X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fviews%2FGenericJcrBrowser.java;h=2274644d9d9d9b2fc4eb2c922250e9966219317c;hb=43f16492d87ed567a7d332b205129016a3ef1dd7;hp=2fd97ae97172ad9bf88eae527faa94e4200ed29e;hpb=2f0d8516846690fcb9a13ebe7a8c15ca50930a2b;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 2fd97ae97..2274644d9 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 @@ -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; } }