- protected abstract void onEventInUiThread(EventIterator events);
-
- public void onEvent(final EventIterator events) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- onEventInUiThread(events);
- }
- });
+ protected abstract void onEventInUiThread(List<Event> events)
+ throws RepositoryException;
+
+ /**
+ * Whether these events should be processed in the UI or skipped with no UI
+ * job created.
+ */
+ protected Boolean willProcessInUiThread(List<Event> events)
+ throws RepositoryException {
+ return true;
+ }
+
+ protected Log getLog() {
+ return logThis;
+ }
+
+ public final void onEvent(final EventIterator eventIterator) {
+ final List<Event> events = new ArrayList<Event>();
+ while (eventIterator.hasNext())
+ events.add(eventIterator.nextEvent());
+
+ if (logThis.isDebugEnabled())
+ logThis.debug("Received " + events.size() + " events");
+
+ try {
+ if (!willProcessInUiThread(events))
+ return;
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot test skip events " + events, e);
+ }
+
+// Job job = new Job("JCR Events") {
+// protected IStatus run(IProgressMonitor monitor) {
+// if (display.isDisposed()) {
+// logSuper.warn("Display is disposed cannot update UI");
+// return Status.CANCEL_STATUS;
+// }
+
+ display.asyncExec(new Runnable() {
+ public void run() {
+ try {
+ onEventInUiThread(events);
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot process events "
+ + events, e);
+ }
+ }
+ });
+
+// return Status.OK_STATUS;
+// }
+// };
+// job.schedule();