From d172f924a8524ff1e5a2d68db054103ca461ee1e Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 28 Jun 2011 13:53:16 +0000 Subject: [PATCH] Improve JCR UI git-svn-id: https://svn.argeo.org/slc/trunk@4631 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../client/ui/editors/ProcessBuilderPage.java | 2 +- .../ui/views/JcrExecutionModulesView.java | 2 +- .../client/ui/views/JcrProcessListView.java | 2 +- .../client/ui/views/JcrResultListView.java | 79 +++++++++++++++---- .../slc/jcr/execution/JcrResultListener.java | 3 + 5 files changed, 71 insertions(+), 17 deletions(-) diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java index f5e8708ae..e37097b23 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java @@ -115,7 +115,7 @@ public class ProcessBuilderPage extends FormPage implements SlcNames { // observation statusObserver = new AsyncUiEventListener(form.getDisplay()) { - protected void onEventInUiThread(EventIterator events) { + protected void onEventInUiThread(List events) { statusChanged(); } }; diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java index 75864680e..37c8dc570 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java @@ -235,7 +235,7 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, super(display); } - protected void onEventInUiThread(EventIterator events) { + protected void onEventInUiThread(List events) { // List baseNodes = ((SimpleNodeContentProvider) viewer // .getContentProvider()).getBaseNodes(); // Node baseNode = baseNodes.get(0); diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java index b849aa4bf..640e4c86c 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java @@ -67,7 +67,7 @@ public class JcrProcessListView extends ViewPart { processesObserver = new AsyncUiEventListener(viewer.getTable() .getDisplay()) { - protected void onEventInUiThread(EventIterator events) { + protected void onEventInUiThread(List events) { // TODO optimize by updating only the changed process viewer.refresh(); } diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultListView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultListView.java index 11eb02fd0..98e8fff04 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultListView.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultListView.java @@ -7,7 +7,6 @@ import java.util.List; import javax.jcr.Node; import javax.jcr.NodeIterator; -import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.observation.Event; @@ -17,6 +16,7 @@ import javax.jcr.observation.ObservationManager; import javax.jcr.query.Query; import org.argeo.eclipse.ui.jcr.AsyncUiEventListener; +import org.argeo.eclipse.ui.jcr.NodeElementComparer; import org.argeo.jcr.JcrUtils; import org.argeo.slc.SlcException; import org.argeo.slc.client.ui.editors.ProcessEditor; @@ -36,6 +36,7 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IWorkbenchPage; @@ -64,23 +65,20 @@ public class JcrResultListView extends ViewPart implements SlcNames { viewer.setContentProvider(new ViewContentProvider()); viewer.setInput(getViewSite()); viewer.addDoubleClickListener(new ViewDoubleClickListener()); + viewer.setComparer(new NodeElementComparer()); getViewSite().setSelectionProvider(viewer); - resultsObserver = new AsyncUiEventListener(viewer.getTable() - .getDisplay()) { - protected void onEventInUiThread(EventIterator events) { - // TODO optimize by updating only the changed result - viewer.refresh(); - } - }; + resultsObserver = new ResultObserver(viewer.getTable().getDisplay()); try { ObservationManager observationManager = session.getWorkspace() .getObservationManager(); + String[] nodeTypes = { SlcTypes.SLC_RESULT }; + // FIXME Will not be notified if empty result is deleted observationManager.addEventListener(resultsObserver, - Event.NODE_ADDED | Event.NODE_REMOVED - | Event.PROPERTY_CHANGED, - SlcJcrConstants.RESULTS_BASE_PATH, true, null, null, false); + Event.PROPERTY_ADDED | Event.NODE_REMOVED, + SlcJcrConstants.RESULTS_BASE_PATH, true, null, nodeTypes, + false); } catch (RepositoryException e) { throw new SlcException("Cannot register listeners", e); } @@ -126,6 +124,7 @@ public class JcrResultListView extends ViewPart implements SlcNames { try { if (obj instanceof Node) { Node node = (Node) obj; + // FIXME: open a default result editor if (node.isNodeType(SlcTypes.SLC_PROCESS)) { IWorkbenchPage activePage = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); @@ -201,9 +200,13 @@ public class JcrResultListView extends ViewPart implements SlcNames { switch (index) { case 0: - return dateFormat.format(node - .getProperty(Property.JCR_LAST_MODIFIED).getDate() - .getTime()); + if (node.hasProperty(SLC_COMPLETED)) { + return dateFormat + .format(node.getProperty(SLC_COMPLETED) + .getDate().getTime()); + } else { + return "OPEN"; + } case 1: return node.getProperty(SlcNames.SLC_UUID).getString(); } @@ -222,6 +225,54 @@ public class JcrResultListView extends ViewPart implements SlcNames { } + class ResultObserver extends AsyncUiEventListener { + + public ResultObserver(Display display) { + super(display); + } + + @Override + protected Boolean willProcessInUiThread(List events) + throws RepositoryException { + for (Event event : events) { + // getLog().debug("Received event " + event); + int eventType = event.getType(); + if (eventType == Event.NODE_REMOVED) + return true; + // if (event.getType() == Event.PROPERTY_ADDED) { + String path = event.getPath(); + // getLog().debug(path); + int index = path.lastIndexOf('/'); + String propertyName = path.substring(index + 1); + // Property property = session.getProperty(path); + // if (!property.getName().equals(SLC_COMPLETED)) + // return true; + if (propertyName.equals(SLC_COMPLETED) + || propertyName.equals(SLC_UUID)) { + // getLog().debug("Kept " + propertyName); + return true; + } else { + // getLog().debug("Skipped " + propertyName); + } + // } else if (eventType == Event.NODE_ADDED + // || eventType == Event.NODE_MOVED + // || eventType == Event.NODE_REMOVED) { + // return true; + // } else { + // } + } + return false; + } + + protected void onEventInUiThread(List events) + throws RepositoryException { + if (getLog().isDebugEnabled()) + getLog().debug("Refresh result list"); + viewer.refresh(); + } + + } + public void setSession(Session session) { this.session = session; } diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrResultListener.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrResultListener.java index db575885f..0eb900e19 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrResultListener.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrResultListener.java @@ -174,6 +174,9 @@ public class JcrResultListener implements TreeTestResultListener, SlcNames { uuidToIdentifier.remove(uuid); session.save(); + + if (log.isDebugEnabled()) + log.debug("Closed test result " + uuid); } catch (RepositoryException e) { JcrUtils.discardQuietly(session); log.error("Cannot close result " + testResult, e); -- 2.39.2