From 8d1eadf7de1334862f307fc9a652b79ccf5b6173 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 28 Jun 2011 13:50:22 +0000 Subject: [PATCH] Improve JCR UI git-svn-id: https://svn.argeo.org/commons/trunk@4630 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../eclipse/ui/jcr/AsyncUiEventListener.java | 78 ++++++++++++++----- .../eclipse/ui/jcr/NodeElementComparer.java | 36 +++++++++ .../ui/rcp/SecureWorkbenchWindowAdvisor.java | 3 +- 3 files changed, 98 insertions(+), 19 deletions(-) create mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java index 6a83ef374..c152a328a 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/AsyncUiEventListener.java @@ -1,8 +1,16 @@ package org.argeo.eclipse.ui.jcr; +import java.util.ArrayList; +import java.util.List; + +import javax.jcr.RepositoryException; +import javax.jcr.observation.Event; import javax.jcr.observation.EventIterator; import javax.jcr.observation.EventListener; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.ArgeoException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -11,36 +19,70 @@ import org.eclipse.swt.widgets.Display; /** {@link EventListener} which simplifies running actions within the UI thread. */ public abstract class AsyncUiEventListener implements EventListener { + private final static Log logSuper = LogFactory + .getLog(AsyncUiEventListener.class); + private final Log logThis = LogFactory.getLog(getClass()); + private final Display display; - + public AsyncUiEventListener(Display display) { super(); this.display = display; } /** Called asynchronously in the UI thread. */ - protected abstract void onEventInUiThread(EventIterator events); + protected abstract void onEventInUiThread(List events) + throws RepositoryException; - public void onEvent(final EventIterator events) { - Job job = new Job("JCR Events") { - protected IStatus run(IProgressMonitor monitor) { - //Display display = Display.getCurrent(); - //Display display = PlatformUI.getWorkbench().getDisplay(); + /** + * Whether these events should be processed in the UI or skipped with no UI + * job created. + */ + protected Boolean willProcessInUiThread(List events) + throws RepositoryException { + return true; + } + + protected Log getLog() { + return logThis; + } + + public final void onEvent(final EventIterator eventIterator) { + final List events = new ArrayList(); + 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() { - onEventInUiThread(events); + try { + onEventInUiThread(events); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot process events " + + events, e); + } } }); - return Status.OK_STATUS; - } - }; - job.schedule(); - - // PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - // public void run() { - // onEventInUiThread(events); - // } - // }); + +// return Status.OK_STATUS; +// } +// }; +// job.schedule(); } } diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java new file mode 100644 index 000000000..fc18965c6 --- /dev/null +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/NodeElementComparer.java @@ -0,0 +1,36 @@ +package org.argeo.eclipse.ui.jcr; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; + +import org.argeo.ArgeoException; +import org.eclipse.jface.viewers.IElementComparer; + +/** Element comparer for JCR node, to be used in JFace viewers. */ +public class NodeElementComparer implements IElementComparer { + + public boolean equals(Object a, Object b) { + try { + if ((a instanceof Node) && (b instanceof Node)) { + Node nodeA = (Node) a; + Node nodeB = (Node) b; + return nodeA.getIdentifier().equals(nodeB.getIdentifier()); + } else { + return a.equals(b); + } + } catch (RepositoryException e) { + throw new ArgeoException("Cannot compare nodes", e); + } + } + + public int hashCode(Object element) { + try { + if (element instanceof Node) + return ((Node) element).getIdentifier().hashCode(); + return element.hashCode(); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot get hash code", e); + } + } + +} diff --git a/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureWorkbenchWindowAdvisor.java b/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureWorkbenchWindowAdvisor.java index 4847bcfdd..d85c17c1a 100644 --- a/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureWorkbenchWindowAdvisor.java +++ b/security/plugins/org.argeo.security.ui.rcp/src/main/java/org/argeo/security/ui/rcp/SecureWorkbenchWindowAdvisor.java @@ -25,7 +25,8 @@ public class SecureWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { configurer.setInitialSize(new Point(1200, 900)); configurer.setShowCoolBar(true); configurer.setShowMenuBar(true); - configurer.setShowStatusLine(false); + configurer.setShowStatusLine(true); + configurer.setShowProgressIndicator(true); configurer.setShowPerspectiveBar(true); configurer.setTitle("Argeo UI - " + username); //$NON-NLS-1$ -- 2.30.2