]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java
+ refactoring of the JCR UI Model (in a MVC point of view)
[lgpl/argeo-commons.git] / server / plugins / org.argeo.jcr.ui.explorer / src / main / java / org / argeo / jcr / ui / explorer / views / GenericJcrBrowser.java
index d009a85fb2b4366870364cf6c0c219ae80917b96..484a2d42c03f41ff6c434b9a127b70eec699947b 100644 (file)
@@ -15,6 +15,7 @@ import javax.jcr.observation.ObservationManager;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.TreeParent;
 import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;
 import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer;
 import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
@@ -25,14 +26,17 @@ import org.argeo.jcr.RepositoryRegister;
 import org.argeo.jcr.ui.explorer.browser.NodeContentProvider;
 import org.argeo.jcr.ui.explorer.browser.NodeLabelProvider;
 import org.argeo.jcr.ui.explorer.browser.PropertiesContentProvider;
+import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
 import org.argeo.jcr.ui.explorer.utils.GenericNodeDoubleClickListener;
 import org.argeo.jcr.ui.explorer.utils.JcrFileProvider;
+import org.argeo.jcr.ui.explorer.utils.JcrUiUtils;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -45,6 +49,11 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Menu;
 
+/**
+ * Basic View to display a sash form to browse a JCR compliant multirepository
+ * environment
+ */
+
 public class GenericJcrBrowser extends AbstractJcrBrowser {
        private final static Log log = LogFactory.getLog(GenericJcrBrowser.class);
 
@@ -109,6 +118,7 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                nodesViewer.getTree().setMenu(menu);
                getSite().registerContextMenu(menuManager, nodesViewer);
                getSite().setSelectionProvider(nodesViewer);
+
                nodesViewer.setInput(getViewSite());
 
                // Create the property viewer on the bottom
@@ -206,13 +216,13 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
        // nodesViewer.refresh(tmpSel.getFirstElement());
        // }
 
-       private JcrFileProvider getJcrFileProvider() {
-               return jcrFileProvider;
-       }
-
-       private FileHandler getFileHandler() {
-               return fileHandler;
-       }
+       // private JcrFileProvider getJcrFileProvider() {
+       // return jcrFileProvider;
+       // }
+       //
+       // private FileHandler getFileHandler() {
+       // return fileHandler;
+       // }
 
        protected TreeViewer createNodeViewer(Composite parent,
                        final ITreeContentProvider nodeContentProvider) {
@@ -230,7 +240,11 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                                                if (!event.getSelection().isEmpty()) {
                                                        IStructuredSelection sel = (IStructuredSelection) event
                                                                        .getSelection();
-                                                       propertiesViewer.setInput(sel.getFirstElement());
+                                                       Object firstItem = sel.getFirstElement();
+                                                       if (firstItem instanceof SingleJcrNode)
+                                                               propertiesViewer
+                                                                               .setInput(((SingleJcrNode) firstItem)
+                                                                                               .getNode());
                                                } else {
                                                        propertiesViewer.setInput(getViewSite());
                                                }
@@ -241,7 +255,6 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                try {
                        ObservationManager observationManager = session.getWorkspace()
                                        .getObservationManager();
-                       // FIXME Will not be notified if empty result is deleted
                        observationManager.addEventListener(resultsObserver,
                                        Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/", true,
                                        null, null, false);
@@ -260,6 +273,24 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                return nodesViewer;
        }
 
+       /** Notifies the current view that a node has been added */
+       public void nodeAdded(TreeParent parentNode) {
+               // insure that Ui objects have been correctly created:
+               JcrUiUtils.forceRefreshIfNeeded(parentNode);
+               getNodeViewer().refresh(parentNode);
+               getNodeViewer().expandToLevel(parentNode, 1);
+       }
+
+       /** Notifies the current view that a node has been added */
+       public void nodeRemoved(TreeParent parentNode) {
+               IStructuredSelection newSel = new StructuredSelection(parentNode);
+               getNodeViewer().setSelection(newSel, true);
+               // Force refresh
+               IStructuredSelection tmpSel = (IStructuredSelection) getNodeViewer()
+                               .getSelection();
+               getNodeViewer().refresh(tmpSel.getFirstElement());
+       }
+
        class TreeObserver extends AsyncUiEventListener {
 
                public TreeObserver(Display display) {
@@ -270,11 +301,13 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                protected Boolean willProcessInUiThread(List<Event> events)
                                throws RepositoryException {
                        for (Event event : events) {
-                               getLog().debug("Received event " + event);
+                               if (getLog().isTraceEnabled())
+                                       getLog().debug("Received event " + event);
                                String path = event.getPath();
                                int index = path.lastIndexOf('/');
                                String propertyName = path.substring(index + 1);
-                               getLog().debug("Concerned property " + propertyName);
+                               if (getLog().isTraceEnabled())
+                                       getLog().debug("Concerned property " + propertyName);
                        }
                        return false;
                }