X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fviews%2FGenericJcrBrowser.java;h=f401ae8fe3a352967e0a1b979d2b6abaa8d88e72;hb=3a3d316af102ba410d1d9e6de349d0c8f7ac044f;hp=1c1ce6a234cc826a3ac8a9cbec34011c37700950;hpb=1d5afdce3e91054f07ddd3c98309c363b4cf1d46;p=lgpl%2Fargeo-commons.git diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java index 1c1ce6a23..f401ae8fe 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,8 +19,10 @@ import java.util.List; import javax.jcr.Property; import javax.jcr.PropertyType; +import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.RepositoryFactory; +import javax.jcr.Session; import javax.jcr.Value; import javax.jcr.observation.Event; import javax.jcr.observation.EventListener; @@ -32,14 +34,14 @@ 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.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; -import org.argeo.jcr.ui.explorer.model.SingleJcrNode; +import org.argeo.jcr.ui.explorer.model.SingleJcrNodeElem; import org.argeo.jcr.ui.explorer.utils.GenericNodeDoubleClickListener; import org.argeo.jcr.ui.explorer.utils.JcrUiUtils; +import org.argeo.util.security.Keyring; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -63,17 +65,20 @@ 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); public final static String ID = JcrExplorerPlugin.ID + ".browserView"; - private boolean sortChildNodes = false; + private boolean sortChildNodes = true; /* DEPENDENCY INJECTION */ - private JcrKeyring jcrKeyring; + private Keyring keyring; private RepositoryRegister repositoryRegister; private RepositoryFactory repositoryFactory; + private Repository nodeRepository; + /** + * A session of the logged in user on the default workspace of the node + * repository. + */ + private Session userSession; // This page widgets private TreeViewer nodesViewer; @@ -81,35 +86,8 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { private TableViewer propertiesViewer; private EventListener resultsObserver; - // Manage documents - // private JcrFileProvider jcrFileProvider; - // private FileHandler fileHandler; - @Override public void createPartControl(Composite parent) { - - // look for session - // 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 - // Note that in RAP, it registers a service handler that provide the - // access to the files. - // jcrFileProvider = new JcrFileProvider(); - // fileHandler = new FileHandler(jcrFileProvider); - parent.setLayout(new FillLayout()); SashForm sashForm = new SashForm(parent, SWT.VERTICAL); sashForm.setSashWidth(4); @@ -120,7 +98,13 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { GridLayout gl = new GridLayout(1, false); top.setLayout(gl); - nodeContentProvider = new NodeContentProvider(jcrKeyring, + try { + this.userSession = this.nodeRepository.login(); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot open user session", e); + } + + nodeContentProvider = new NodeContentProvider(userSession, keyring, repositoryRegister, repositoryFactory, sortChildNodes); // nodes viewer @@ -145,6 +129,21 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { nodesViewer.setComparer(new NodeViewerComparer()); } + @Override + public void refresh(Object obj) { + // Enable full refresh from a command when no element of the tree is + // selected + if (obj == null) { + Object[] elements = nodeContentProvider.getElements(null); + for (Object el : elements) { + if (el instanceof TreeParent) + JcrUiUtils.forceRefreshIfNeeded((TreeParent) el); + getNodeViewer().refresh(el); + } + } + super.refresh(obj); + } + /** * To be overridden to adapt size of form and result frames. */ @@ -169,9 +168,9 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { IStructuredSelection sel = (IStructuredSelection) event .getSelection(); Object firstItem = sel.getFirstElement(); - if (firstItem instanceof SingleJcrNode) + if (firstItem instanceof SingleJcrNodeElem) propertiesViewer - .setInput(((SingleJcrNode) firstItem) + .setInput(((SingleJcrNodeElem) firstItem) .getNode()); } else { propertiesViewer.setInput(getViewSite()); @@ -180,9 +179,9 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { }); resultsObserver = new TreeObserver(tmpNodeViewer.getTree().getDisplay()); - if (jcrKeyring != null) + if (keyring != null) try { - ObservationManager observationManager = jcrKeyring.getSession() + ObservationManager observationManager = userSession .getWorkspace().getObservationManager(); observationManager.addEventListener(resultsObserver, Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/", @@ -272,6 +271,20 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { return nodesViewer; } + /** + * Resets the tree content provider + * + * @param sortChildNodes + * if true the content provider will use a comparer to sort nodes + * that might slow down the display + * */ + public void setSortChildNodes(boolean sortChildNodes) { + this.sortChildNodes = sortChildNodes; + ((NodeContentProvider) nodesViewer.getContentProvider()) + .setSortChildren(sortChildNodes); + nodesViewer.setInput(getViewSite()); + } + /** Notifies the current view that a node has been added */ public void nodeAdded(TreeParent parentNode) { // insure that Ui objects have been correctly created: @@ -280,7 +293,7 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { getNodeViewer().expandToLevel(parentNode, 1); } - /** Notifies the current view that a node has been added */ + /** Notifies the current view that a node has been removed */ public void nodeRemoved(TreeParent parentNode) { IStructuredSelection newSel = new StructuredSelection(parentNode); getNodeViewer().setSelection(newSel, true); @@ -320,10 +333,6 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { } - public void setSortChildNodes(boolean sortChildNodes) { - this.sortChildNodes = sortChildNodes; - } - public boolean getSortChildNodes() { return sortChildNodes; } @@ -333,12 +342,16 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { this.repositoryRegister = repositoryRegister; } - public void setJcrKeyring(JcrKeyring jcrKeyring) { - this.jcrKeyring = jcrKeyring; + public void setKeyring(Keyring keyring) { + this.keyring = keyring; } public void setRepositoryFactory(RepositoryFactory repositoryFactory) { this.repositoryFactory = repositoryFactory; } + public void setNodeRepository(Repository nodeRepository) { + this.nodeRepository = nodeRepository; + } + }