]> 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
Clean JCR Ui Explorer editor
[lgpl/argeo-commons.git] / server / plugins / org.argeo.jcr.ui.explorer / src / main / java / org / argeo / jcr / ui / explorer / views / GenericJcrBrowser.java
index 2fd97ae97172ad9bf88eae527faa94e4200ed29e..2274644d9d9d9b2fc4eb2c922250e9966219317c 100644 (file)
@@ -5,34 +5,32 @@ import java.util.List;
 
 import javax.jcr.Property;
 import javax.jcr.PropertyType;
-import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventListener;
 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;
-import org.argeo.eclipse.ui.specific.FileHandler;
-import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.JcrUtils;
 import org.argeo.jcr.RepositoryRegister;
+import org.argeo.jcr.security.JcrKeyring;
 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,11 +43,17 @@ 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);
+       // private final static Log log =
+       // LogFactory.getLog(GenericJcrBrowser.class);
 
        /* DEPENDENCY INJECTION */
-       private Session session;
+       private JcrKeyring jcrKeyring;
        private RepositoryRegister repositoryRegister;
 
        // This page widgets
@@ -59,33 +63,34 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
        private EventListener resultsObserver;
 
        // Manage documents
-       private JcrFileProvider jcrFileProvider;
-       private FileHandler fileHandler;
+       // private JcrFileProvider jcrFileProvider;
+       // private FileHandler fileHandler;
 
        @Override
        public void createPartControl(Composite parent) {
 
                // look for session
-               Session nodeSession = session;
-               if (nodeSession == null) {
-                       Repository nodeRepository = JcrUtils.getRepositoryByAlias(
-                                       repositoryRegister, ArgeoJcrConstants.ALIAS_NODE);
-                       if (nodeRepository != null)
-                               try {
-                                       nodeSession = nodeRepository.login();
-                                       // TODO : enhance that to enable multirepository listener.
-                                       session = nodeSession;
-                               } catch (RepositoryException e1) {
-                                       throw new ArgeoException("Cannot login to node repository");
-                               }
-               }
+               Session nodeSession = jcrKeyring != null ? jcrKeyring.getSession()
+                               : null;
+               // if (nodeSession == null) {
+               // Repository nodeRepository = JcrUtils.getRepositoryByAlias(
+               // repositoryRegister, ArgeoJcrConstants.ALIAS_NODE);
+               // if (nodeRepository != null)
+               // try {
+               // nodeSession = nodeRepository.login();
+               // // TODO : enhance that to enable multirepository listener.
+               // session = nodeSession;
+               // } catch (RepositoryException e1) {
+               // throw new ArgeoException("Cannot login to node repository");
+               // }
+               // }
 
                // Instantiate the generic object that fits for
                // both RCP & RAP
                // Note that in RAP, it registers a service handler that provide the
                // access to the files.
-               jcrFileProvider = new JcrFileProvider();
-               fileHandler = new FileHandler(jcrFileProvider);
+               // jcrFileProvider = new JcrFileProvider();
+               // fileHandler = new FileHandler(jcrFileProvider);
 
                parent.setLayout(new FillLayout());
                SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
@@ -97,15 +102,16 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                GridLayout gl = new GridLayout(1, false);
                top.setLayout(gl);
 
-               nodeContentProvider = new NodeContentProvider(nodeSession,
+               nodeContentProvider = new NodeContentProvider(jcrKeyring,
                                repositoryRegister);
 
                // nodes viewer
                nodesViewer = createNodeViewer(top, nodeContentProvider);
 
-               // context menu
+               // context menu : it is completely defined in the plugin.xml file.
                MenuManager menuManager = new MenuManager();
                Menu menu = menuManager.createContextMenu(nodesViewer.getTree());
+
                nodesViewer.getTree().setMenu(menu);
                getSite().registerContextMenu(menuManager, nodesViewer);
                getSite().setSelectionProvider(nodesViewer);
@@ -180,41 +186,6 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                return new int[] { 70, 30 };
        }
 
-       // @Override
-       // public void setFocus() {
-       // nodesViewer.getTree().setFocus();
-       // }
-       //
-       // /*
-       // * NOTIFICATION
-       // */
-       // public void refresh(Object obj) {
-       // nodesViewer.refresh(obj);
-       // }
-       //
-       // public void nodeAdded(Node parentNode, Node newNode) {
-       // nodesViewer.refresh(parentNode);
-       // nodesViewer.expandToLevel(newNode, 0);
-       // }
-       //
-       // public void nodeRemoved(Node parentNode) {
-       //
-       // IStructuredSelection newSel = new StructuredSelection(parentNode);
-       // nodesViewer.setSelection(newSel, true);
-       // // Force refresh
-       // IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer
-       // .getSelection();
-       // nodesViewer.refresh(tmpSel.getFirstElement());
-       // }
-
-       private JcrFileProvider getJcrFileProvider() {
-               return jcrFileProvider;
-       }
-
-       private FileHandler getFileHandler() {
-               return fileHandler;
-       }
-
        protected TreeViewer createNodeViewer(Composite parent,
                        final ITreeContentProvider nodeContentProvider) {
 
@@ -231,7 +202,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());
                                                }
@@ -239,15 +214,16 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                                });
 
                resultsObserver = new TreeObserver(tmpNodeViewer.getTree().getDisplay());
-               try {
-                       ObservationManager observationManager = session.getWorkspace()
-                                       .getObservationManager();
-                       observationManager.addEventListener(resultsObserver,
-                                       Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/", true,
-                                       null, null, false);
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot register listeners", e);
-               }
+               if (jcrKeyring != null)
+                       try {
+                               ObservationManager observationManager = jcrKeyring.getSession()
+                                               .getWorkspace().getObservationManager();
+                               observationManager.addEventListener(resultsObserver,
+                                               Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/",
+                                               true, null, null, false);
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException("Cannot register listeners", e);
+                       }
 
                tmpNodeViewer
                                .addDoubleClickListener(new GenericNodeDoubleClickListener(
@@ -260,6 +236,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) {
@@ -295,8 +289,8 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                this.repositoryRegister = repositoryRegister;
        }
 
-       public void setSession(Session session) {
-               this.session = session;
+       public void setJcrKeyring(JcrKeyring jcrKeyring) {
+               this.jcrKeyring = jcrKeyring;
        }
 
 }