]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Improve JCR UI
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 28 Jun 2011 13:53:16 +0000 (13:53 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 28 Jun 2011 13:53:16 +0000 (13:53 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@4631 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java
eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java
eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java
eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultListView.java
runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/execution/JcrResultListener.java

index f5e8708aed17483f9a984a1d73bb9ebefca3b317..e37097b23e73df286b51a48711159e3ce751ee49 100644 (file)
@@ -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<Event> events) {
                                        statusChanged();
                                }
                        };
index 75864680e0a8970efac4567b90dbdc1994d49c45..37c8dc570d33b6f80f5a8d26528a3d42b44bbbd9 100644 (file)
@@ -235,7 +235,7 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes,
                        super(display);
                }
 
-               protected void onEventInUiThread(EventIterator events) {
+               protected void onEventInUiThread(List<Event> events) {
                        // List<Node> baseNodes = ((SimpleNodeContentProvider) viewer
                        // .getContentProvider()).getBaseNodes();
                        // Node baseNode = baseNodes.get(0);
index b849aa4bfb890e8185e99f9e78998176c2ad209a..640e4c86c80b4110f24bed4827db57fdbe7fdfba 100644 (file)
@@ -67,7 +67,7 @@ public class JcrProcessListView extends ViewPart {
 
                processesObserver = new AsyncUiEventListener(viewer.getTable()
                                .getDisplay()) {
-                       protected void onEventInUiThread(EventIterator events) {
+                       protected void onEventInUiThread(List<Event> events) {
                                // TODO optimize by updating only the changed process
                                viewer.refresh();
                        }
index 11eb02fd07c9722dadbdff89b0ca5175a40af313..98e8fff042d9c2d1c998e77f38d6947626e1cce0 100644 (file)
@@ -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<Event> 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<Event> events)
+                               throws RepositoryException {
+                       if (getLog().isDebugEnabled())
+                               getLog().debug("Refresh result list");
+                       viewer.refresh();
+               }
+
+       }
+
        public void setSession(Session session) {
                this.session = session;
        }
index db575885fb9f51deafd4404a52c4ecd753bb8d7c..0eb900e19816cf93e34cbf1ce4b2c3c5ebdb3870 100644 (file)
@@ -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);