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());
+  }
 
 }