X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fruntime%2Forg.argeo.eclipse.ui.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Feclipse%2Fui%2Fjcr%2Fviews%2FGenericJcrBrowser.java;h=4685fbb2131fc7af0d40645e5e2d7af6edc19d60;hb=a99d11e0c2696ff1a4a258adaa94d137440c8d6c;hp=2496177824088a4404888cbbd47aae8e82263620;hpb=5f0b7679ef0cbcb1b101f71673f1e5e24e735b39;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 249617782..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 @@ -1,7 +1,5 @@ package org.argeo.eclipse.ui.jcr.views; -import java.io.BufferedInputStream; -import java.io.File; import java.util.Arrays; import javax.jcr.Node; @@ -9,14 +7,16 @@ import javax.jcr.Property; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; -import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.dialogs.Error; 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; @@ -26,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; @@ -39,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; @@ -46,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); @@ -75,6 +88,7 @@ public class GenericJcrBrowser extends ViewPart { } } }); + nodesViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { if (event.getSelection() == null @@ -83,51 +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); - } // call the openFile commands on node - else if (obj instanceof Node) { + } else if (obj instanceof Node) { Node node = (Node) obj; + + // double clic on a file node triggers its opening try { if (node.isNodeType("nt:file")) { - - Node child = node.getNodes().nextNode(); - if (!child.isNodeType("nt:resource")) { - Error.show("Cannot open file children Node that are not of 'nt:resource' type."); - return; - } - BufferedInputStream fis = null; - - try { - fis = (BufferedInputStream) child - .getProperty("jcr:data").getBinary() - .getStream(); - - String name = node.getName(); - - // Instantiate the generic object that fits for - // both - // RCP & RAP. - FileHandler fh = new FileHandler(); - fh.openFile(name, - fis); - //fh.openFile(file); - } catch (Exception e) { - throw new ArgeoException( - "Stream error while opening file", e); - } finally { - IOUtils.closeQuietly(fis); - } + String name = node.getName(); + String id = node.getIdentifier(); + fh.openFile(name, id); } } catch (RepositoryException re) { - re.printStackTrace(); - + throw new ArgeoException( + "Repository error while getting Node file info", + re); } } - } }); @@ -200,6 +196,8 @@ public class GenericJcrBrowser extends ViewPart { sashForm.setWeights(getWeights()); + nodesViewer.setComparer(new NodeViewerComparer()); + } @Override @@ -229,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; } + }