]> 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
Update license headers
[lgpl/argeo-commons.git] / server / plugins / org.argeo.jcr.ui.explorer / src / main / java / org / argeo / jcr / ui / explorer / views / GenericJcrBrowser.java
index ee28eb863ec6dfed819fd5cc5961574447b5998b..1c1ce6a234cc826a3ac8a9cbec34011c37700950 100644 (file)
@@ -1,13 +1,27 @@
+/*
+ * Copyright (C) 2007-2012 Mathieu Baudier
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.argeo.jcr.ui.explorer.views;
 
-import java.util.Arrays;
 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.RepositoryFactory;
+import javax.jcr.Value;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventListener;
 import javax.jcr.observation.ObservationManager;
@@ -17,9 +31,9 @@ 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.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.JcrUtils;
 import org.argeo.jcr.RepositoryRegister;
+import org.argeo.jcr.security.JcrKeyring;
+import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
 import org.argeo.jcr.ui.explorer.browser.NodeContentProvider;
 import org.argeo.jcr.ui.explorer.browser.NodeLabelProvider;
 import org.argeo.jcr.ui.explorer.browser.PropertiesContentProvider;
@@ -53,10 +67,13 @@ import org.eclipse.swt.widgets.Menu;
 public class GenericJcrBrowser extends AbstractJcrBrowser {
        // private final static Log log =
        // LogFactory.getLog(GenericJcrBrowser.class);
+       public final static String ID = JcrExplorerPlugin.ID + ".browserView";
+       private boolean sortChildNodes = false;
 
        /* DEPENDENCY INJECTION */
-       private Session session;
+       private JcrKeyring jcrKeyring;
        private RepositoryRegister repositoryRegister;
+       private RepositoryFactory repositoryFactory;
 
        // This page widgets
        private TreeViewer nodesViewer;
@@ -66,26 +83,25 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
 
        // Manage documents
        // 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.
+               // } catch (RepositoryException e1) {
+               // throw new ArgeoException("Cannot login to node repository");
+               // }
+               // }
 
                // Instantiate the generic object that fits for
                // both RCP & RAP
@@ -104,8 +120,8 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                GridLayout gl = new GridLayout(1, false);
                top.setLayout(gl);
 
-               nodeContentProvider = new NodeContentProvider(nodeSession,
-                               repositoryRegister);
+               nodeContentProvider = new NodeContentProvider(jcrKeyring,
+                               repositoryRegister, repositoryFactory, sortChildNodes);
 
                // nodes viewer
                nodesViewer = createNodeViewer(top, nodeContentProvider);
@@ -123,7 +139,66 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                // Create the property viewer on the bottom
                Composite bottom = new Composite(sashForm, SWT.NONE);
                bottom.setLayout(new GridLayout(1, false));
-               propertiesViewer = new TableViewer(bottom);
+               propertiesViewer = createPropertiesViewer(bottom);
+
+               sashForm.setWeights(getWeights());
+               nodesViewer.setComparer(new NodeViewerComparer());
+       }
+
+       /**
+        * To be overridden to adapt size of form and result frames.
+        */
+       protected int[] getWeights() {
+               return new int[] { 70, 30 };
+       }
+
+       protected TreeViewer createNodeViewer(Composite parent,
+                       final ITreeContentProvider nodeContentProvider) {
+
+               final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
+
+               tmpNodeViewer.getTree().setLayoutData(
+                               new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               tmpNodeViewer.setContentProvider(nodeContentProvider);
+               tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
+               tmpNodeViewer
+                               .addSelectionChangedListener(new ISelectionChangedListener() {
+                                       public void selectionChanged(SelectionChangedEvent event) {
+                                               if (!event.getSelection().isEmpty()) {
+                                                       IStructuredSelection sel = (IStructuredSelection) event
+                                                                       .getSelection();
+                                                       Object firstItem = sel.getFirstElement();
+                                                       if (firstItem instanceof SingleJcrNode)
+                                                               propertiesViewer
+                                                                               .setInput(((SingleJcrNode) firstItem)
+                                                                                               .getNode());
+                                               } else {
+                                                       propertiesViewer.setInput(getViewSite());
+                                               }
+                                       }
+                               });
+
+               resultsObserver = new TreeObserver(tmpNodeViewer.getTree().getDisplay());
+               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(
+                                               tmpNodeViewer));
+               return tmpNodeViewer;
+       }
+
+       protected TableViewer createPropertiesViewer(Composite parent) {
+               propertiesViewer = new TableViewer(parent);
                propertiesViewer.getTable().setLayoutData(
                                new GridData(SWT.FILL, SWT.FILL, true, true));
                propertiesViewer.getTable().setHeaderVisible(true);
@@ -151,9 +226,17 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                                        Property property = (Property) element;
                                        if (property.getType() == PropertyType.BINARY)
                                                return "<binary>";
-                                       else if (property.isMultiple())
-                                               return Arrays.asList(property.getValues()).toString();
-                                       else
+                                       else if (property.isMultiple()) {
+                                               StringBuffer buf = new StringBuffer("[");
+                                               Value[] values = property.getValues();
+                                               for (int i = 0; i < values.length; i++) {
+                                                       if (i != 0)
+                                                               buf.append(", ");
+                                                       buf.append(values[i].getString());
+                                               }
+                                               buf.append(']');
+                                               return buf.toString();
+                                       } else
                                                return property.getValue().getString();
                                } catch (RepositoryException e) {
                                        throw new ArgeoException(
@@ -176,60 +259,12 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                        }
                });
                propertiesViewer.setInput(getViewSite());
-
-               sashForm.setWeights(getWeights());
-               nodesViewer.setComparer(new NodeViewerComparer());
+               return propertiesViewer;
        }
 
-       /**
-        * To be overridden to adapt size of form and result frames.
-        */
-       protected int[] getWeights() {
-               return new int[] { 70, 30 };
-       }
-
-       protected TreeViewer createNodeViewer(Composite parent,
-                       final ITreeContentProvider nodeContentProvider) {
-
-               final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
-
-               tmpNodeViewer.getTree().setLayoutData(
-                               new GridData(SWT.FILL, SWT.FILL, true, true));
-
-               tmpNodeViewer.setContentProvider(nodeContentProvider);
-               tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
-               tmpNodeViewer
-                               .addSelectionChangedListener(new ISelectionChangedListener() {
-                                       public void selectionChanged(SelectionChangedEvent event) {
-                                               if (!event.getSelection().isEmpty()) {
-                                                       IStructuredSelection sel = (IStructuredSelection) event
-                                                                       .getSelection();
-                                                       Object firstItem = sel.getFirstElement();
-                                                       if (firstItem instanceof SingleJcrNode)
-                                                               propertiesViewer
-                                                                               .setInput(((SingleJcrNode) firstItem)
-                                                                                               .getNode());
-                                               } else {
-                                                       propertiesViewer.setInput(getViewSite());
-                                               }
-                                       }
-                               });
-
-               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);
-               }
-
-               tmpNodeViewer
-                               .addDoubleClickListener(new GenericNodeDoubleClickListener(
-                                               tmpNodeViewer));
-               return tmpNodeViewer;
+       @Override
+       public void dispose() {
+               super.dispose();
        }
 
        @Override
@@ -285,13 +320,25 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
 
        }
 
+       public void setSortChildNodes(boolean sortChildNodes) {
+               this.sortChildNodes = sortChildNodes;
+       }
+
+       public boolean getSortChildNodes() {
+               return sortChildNodes;
+       }
+
        /* DEPENDENCY INJECTION */
        public void setRepositoryRegister(RepositoryRegister repositoryRegister) {
                this.repositoryRegister = repositoryRegister;
        }
 
-       public void setSession(Session session) {
-               this.session = session;
+       public void setJcrKeyring(JcrKeyring jcrKeyring) {
+               this.jcrKeyring = jcrKeyring;
+       }
+
+       public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
+               this.repositoryFactory = repositoryFactory;
        }
 
 }