Do not process the event if requestor is not valid
If the requestor is not valid in UIEventHandler#handleEvent method,
unsubscribe the requestor. Use the same code from platform
UIEventObjectSupplier class.
Change-Id: Ia075e142785bae8f5169e06b23c329be858c7621
diff --git a/bundles/org.eclipse.rap.e4/src/org/eclipse/rap/e4/internal/RAPUIEventObjectSupplier.java b/bundles/org.eclipse.rap.e4/src/org/eclipse/rap/e4/internal/RAPUIEventObjectSupplier.java
index c1eb2cb..9adea04 100644
--- a/bundles/org.eclipse.rap.e4/src/org/eclipse/rap/e4/internal/RAPUIEventObjectSupplier.java
+++ b/bundles/org.eclipse.rap.e4/src/org/eclipse/rap/e4/internal/RAPUIEventObjectSupplier.java
@@ -12,60 +12,71 @@
import org.eclipse.e4.ui.di.UISynchronize;
import org.osgi.service.event.EventHandler;
-@SuppressWarnings("restriction")
public class RAPUIEventObjectSupplier extends RAPEventObjectSupplier {
- class UIEventHandler implements EventHandler {
+ class UIEventHandler implements EventHandler {
- final protected IRequestor requestor;
- final private String topic;
+ final protected IRequestor requestor;
+ final private String topic;
- public UIEventHandler(String topic, IRequestor requestor) {
- this.topic = topic;
- this.requestor = requestor;
- }
+ public UIEventHandler(String topic, IRequestor requestor) {
+ this.topic = topic;
+ this.requestor = requestor;
+ }
- public void handleEvent(org.osgi.service.event.Event event) {
- addCurrentEvent(topic, event);
- requestor.resolveArguments(false);
- removeCurrentEvent(topic);
- if( uiSync == null ) {
- if (logger != null)
- logger.log(Level.WARNING, "No realm found to process UI event " + event);
- return;
- } else {
- if(RAPEventBroker.isAsyncEvent(event)) {
- uiSync.asyncExec(new Runnable() {
- public void run() {
- requestor.execute();
- }
- });
- } else {
- uiSync.syncExec(new Runnable() {
- public void run() {
- requestor.execute();
- }
- });
- }
- }
- }
- }
+ @Override
+ public void handleEvent(org.osgi.service.event.Event event) {
+ if (!requestor.isValid()) {
+ unsubscribe(requestor);
+ return;
+ }
- @Inject
- protected UISynchronize uiSync;
+ addCurrentEvent(topic, event);
+ requestor.resolveArguments(false);
+ removeCurrentEvent(topic);
+ if( uiSync == null ) {
+ if (logger != null) {
+ logger.log(Level.WARNING, "No realm found to process UI event " + event);
+ }
+ return;
+ } else {
+ if(RAPEventBroker.isAsyncEvent(event)) {
+ uiSync.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ requestor.execute();
+ }
+ });
+ } else {
+ uiSync.syncExec(new Runnable() {
+ @Override
+ public void run() {
+ requestor.execute();
+ }
+ });
+ }
+ }
+ }
+ }
- @Inject @Optional
- protected Logger logger;
+ @Inject
+ protected UISynchronize uiSync;
- protected EventHandler makeHandler(String topic, IRequestor requestor) {
- return new UIEventHandler(topic, requestor);
- }
+ @Inject @Optional
+ protected Logger logger;
- protected String getTopic(IObjectDescriptor descriptor) {
- if (descriptor == null)
- return null;
- UIEventTopic qualifier = descriptor.getQualifier(UIEventTopic.class);
- return RAPEventBroker.rapifyTopic(instanceId, qualifier.value());
- }
+ @Override
+ protected EventHandler makeHandler(String topic, IRequestor requestor) {
+ return new UIEventHandler(topic, requestor);
+ }
+
+ @Override
+ protected String getTopic(IObjectDescriptor descriptor) {
+ if (descriptor == null) {
+ return null;
+ }
+ UIEventTopic qualifier = descriptor.getQualifier(UIEventTopic.class);
+ return RAPEventBroker.rapifyTopic(instanceId, qualifier.value());
+ }
}