X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=inline;f=eclipse%2Fruntime%2Forg.argeo.eclipse.ui.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Feclipse%2Fui%2Fjcr%2Fviews%2FGenericJcrBrowser.java;h=4685fbb2131fc7af0d40645e5e2d7af6edc19d60;hb=a99d11e0c2696ff1a4a258adaa94d137440c8d6c;hp=eb23629673f4c367f7fef24847eabc2cdd555c13;hpb=591e96576707e4139b142026a7d915ffdde1e223;p=lgpl%2Fargeo-commons.git diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java index eb2362967..4685fbb21 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/GenericJcrBrowser.java @@ -7,12 +7,17 @@ import javax.jcr.Property; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; import org.argeo.eclipse.ui.jcr.browser.NodeContentProvider; import org.argeo.eclipse.ui.jcr.browser.NodeLabelProvider; import org.argeo.eclipse.ui.jcr.browser.PropertiesContentProvider; import org.argeo.eclipse.ui.jcr.browser.RepositoryNode; import org.argeo.eclipse.ui.jcr.browser.WorkspaceNode; +import org.argeo.eclipse.ui.jcr.utils.JcrFileProvider; +import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer; +import org.argeo.eclipse.ui.specific.FileHandler; import org.argeo.jcr.RepositoryRegister; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ColumnLabelProvider; @@ -21,6 +26,7 @@ import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; 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; @@ -34,6 +40,8 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.part.ViewPart; public class GenericJcrBrowser extends ViewPart { + private final static Log log = LogFactory.getLog(GenericJcrBrowser.class); + private TreeViewer nodesViewer; private TableViewer propertiesViewer; @@ -41,6 +49,16 @@ public class GenericJcrBrowser extends ViewPart { @Override public void createPartControl(Composite parent) { + + // Instantiate the generic object that fits for + // both RCP & RAP, must be final to be accessed in the double click + // listener. + // Not that in RAP, it registers a service handler that provide the + // access to the files. + + final JcrFileProvider jfp = new JcrFileProvider(); + final FileHandler fh = new FileHandler(jfp); + parent.setLayout(new FillLayout()); SashForm sashForm = new SashForm(parent, SWT.VERTICAL); @@ -70,6 +88,7 @@ public class GenericJcrBrowser extends ViewPart { } } }); + nodesViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { if (event.getSelection() == null @@ -78,13 +97,33 @@ public class GenericJcrBrowser extends ViewPart { Object obj = ((IStructuredSelection) event.getSelection()) .getFirstElement(); if (obj instanceof RepositoryNode) { - ((RepositoryNode) obj).login(); + RepositoryNode rpNode = (RepositoryNode) obj; + rpNode.login(); + // For the file provider to be able to browse the various + // repository. + // TODO : enhanced that. + jfp.setRepositoryNode(rpNode); nodesViewer.refresh(obj); + } else if (obj instanceof WorkspaceNode) { ((WorkspaceNode) obj).login(); nodesViewer.refresh(obj); + } else if (obj instanceof Node) { + Node node = (Node) obj; + + // double clic on a file node triggers its opening + try { + if (node.isNodeType("nt:file")) { + String name = node.getName(); + String id = node.getIdentifier(); + fh.openFile(name, id); + } + } catch (RepositoryException re) { + throw new ArgeoException( + "Repository error while getting Node file info", + re); + } } - } }); @@ -157,6 +196,8 @@ public class GenericJcrBrowser extends ViewPart { sashForm.setWeights(getWeights()); + nodesViewer.setComparer(new NodeViewerComparer()); + } @Override @@ -186,10 +227,18 @@ public class GenericJcrBrowser extends ViewPart { } public void nodeRemoved(Node parentNode) { - nodesViewer.refresh(parentNode); + + IStructuredSelection newSel = new StructuredSelection(parentNode); + nodesViewer.setSelection(newSel, true); + // Force refresh + IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer + .getSelection(); + nodesViewer.refresh(tmpSel.getFirstElement()); } + // IoC public void setRepositoryRegister(RepositoryRegister repositoryRegister) { this.repositoryRegister = repositoryRegister; } + }