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=7d853f4ba6b6da0e94f3ad2685b895d67f7be950;hb=ada93169e85b906c38407f02514edde1dc193503;hp=cf70923158629d960737d83f9e8db655ae87eb7d;hpb=5489d914ae3576354936390e980072792af6d6ef;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 cf7092315..7d853f4ba 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,18 +1,18 @@ package org.argeo.eclipse.ui.jcr.views; -import java.io.InputStream; import java.util.Arrays; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.PropertyType; +import javax.jcr.Repository; import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; -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; @@ -21,6 +21,8 @@ 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.ArgeoJcrConstants; +import org.argeo.jcr.JcrUtils; import org.argeo.jcr.RepositoryRegister; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ColumnLabelProvider; @@ -28,8 +30,8 @@ import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; 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; @@ -40,145 +42,59 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.part.ViewPart; -public class GenericJcrBrowser extends ViewPart { +public class GenericJcrBrowser extends AbstractJcrBrowser { private final static Log log = LogFactory.getLog(GenericJcrBrowser.class); + /** DEPENDENCY INJECTION **/ + private Session session; + private RepositoryRegister repositoryRegister; + private TreeViewer nodesViewer; + private NodeContentProvider nodeContentProvider; private TableViewer propertiesViewer; - private RepositoryRegister repositoryRegister; + private JcrFileProvider jcrFileProvider; + private FileHandler fileHandler; @Override public void createPartControl(Composite parent) { - /* - * TEST - */ + + // look for session + Session nodeSession = session; + if (nodeSession == null) { + Repository nodeRepository = JcrUtils.getRepositoryByAlias( + repositoryRegister, ArgeoJcrConstants.ALIAS_NODE); + if (nodeRepository != null) + try { + nodeSession = nodeRepository.login(); + } catch (RepositoryException e1) { + throw new ArgeoException("Cannot login to node repository"); + } + } // 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 + // both RCP & RAP + // Note 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); - - /* - * TEST END - */ + jcrFileProvider = new JcrFileProvider(); + fileHandler = new FileHandler(jcrFileProvider); parent.setLayout(new FillLayout()); - SashForm sashForm = new SashForm(parent, SWT.VERTICAL); sashForm.setSashWidth(4); sashForm.setLayout(new FillLayout()); + // Create the tree on top of the view Composite top = new Composite(sashForm, SWT.NONE); GridLayout gl = new GridLayout(1, false); top.setLayout(gl); - // nodes viewer - nodesViewer = new TreeViewer(top, SWT.MULTI | SWT.H_SCROLL - | SWT.V_SCROLL); - nodesViewer.getTree().setLayoutData( - new GridData(SWT.FILL, SWT.FILL, true, true)); - nodesViewer.setContentProvider(new NodeContentProvider()); - nodesViewer.setLabelProvider(new NodeLabelProvider()); - nodesViewer - .addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - if (!event.getSelection().isEmpty()) { - IStructuredSelection sel = (IStructuredSelection) event - .getSelection(); - propertiesViewer.setInput(sel.getFirstElement()); - } else { - propertiesViewer.setInput(getViewSite()); - } - } - }); - - nodesViewer.addDoubleClickListener(new IDoubleClickListener() { - public void doubleClick(DoubleClickEvent event) { - if (event.getSelection() == null - || event.getSelection().isEmpty()) - return; - Object obj = ((IStructuredSelection) event.getSelection()) - .getFirstElement(); - if (obj instanceof RepositoryNode) { - RepositoryNode rpNode = (RepositoryNode) obj; - rpNode.login(); - // For the file provider to be able to browse the repo. - // 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) { - // Shell shell = - // aup.getWorkbench().getActiveWorkbenchWindow() - // .getShell(); - // we can also do - // event.getViewer().getControl().getShell(); - - // Browser browser = new Browser(shell, SWT.NONE); - // browser.setText(encodedURL); - // boolean check = browser.setUrl(encodedURL); - // System.out.println("soo ?? : " + check); - // System.out.println("script : " + browser.executeScript); - - // try { - // RWT.getResponse().sendRedirect(encodedURL); - // } catch (IOException e1) { - // // TODO Auto-generated catch block - // e1.printStackTrace(); - // } - - // final Browser browser = new Browser(parent, SWT.NONE); - // browser.setText(createDownloadHtml("test.pdf", - // "Download file")); - - Node node = (Node) obj; - try { - if (node.isNodeType("nt:file")) { - String name = node.getName(); - String id = node.getIdentifier(); - - 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; - } - - InputStream fis = null; - - try { - fis = (InputStream) child - .getProperty("jcr:data").getBinary() - .getStream(); - // Instantiate the generic object that fits for - // both RCP & RAP. - fh.openFile(name, id, fis); - } catch (Exception e) { - throw new ArgeoException( - "Stream error while opening file", e); - } finally { - IOUtils.closeQuietly(fis); - } - } - } catch (RepositoryException re) { - re.printStackTrace(); - - } + nodeContentProvider = new NodeContentProvider(nodeSession, + repositoryRegister); - } - - } - }); + // nodes viewer + nodesViewer = createNodeViewer(top, nodeContentProvider); // context menu MenuManager menuManager = new MenuManager(); @@ -186,13 +102,11 @@ public class GenericJcrBrowser extends ViewPart { nodesViewer.getTree().setMenu(menu); getSite().registerContextMenu(menuManager, nodesViewer); getSite().setSelectionProvider(nodesViewer); + nodesViewer.setInput(getViewSite()); - nodesViewer.setInput(repositoryRegister); - + // Create the property viewer on the bottom Composite bottom = new Composite(sashForm, SWT.NONE); bottom.setLayout(new GridLayout(1, false)); - - // properties viewer propertiesViewer = new TableViewer(bottom); propertiesViewer.getTable().setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, true)); @@ -248,50 +162,129 @@ public class GenericJcrBrowser extends ViewPart { propertiesViewer.setInput(getViewSite()); sashForm.setWeights(getWeights()); - nodesViewer.setComparer(new NodeViewerComparer()); - - } - - @Override - public void setFocus() { - nodesViewer.getTree().setFocus(); } /** - * To be overidden to adapt size of form and result frames. - * - * @return + * To be overridden to adapt size of form and result frames. */ protected int[] getWeights() { return new int[] { 70, 30 }; } - /* - * NOTIFICATION - */ - public void refresh(Object obj) { - nodesViewer.refresh(obj); + // @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; } - public void nodeAdded(Node parentNode, Node newNode) { - nodesViewer.refresh(parentNode); - nodesViewer.expandToLevel(newNode, 0); + private FileHandler getFileHandler() { + return fileHandler; } - public void nodeRemoved(Node parentNode) { + protected TreeViewer createNodeViewer(Composite parent, + final ITreeContentProvider nodeContentProvider) { - IStructuredSelection newSel = new StructuredSelection(parentNode); - nodesViewer.setSelection(newSel, true); - // Force refresh - IStructuredSelection tmpSel = (IStructuredSelection) nodesViewer - .getSelection(); - nodesViewer.refresh(tmpSel.getFirstElement()); + 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(); + propertiesViewer.setInput(sel.getFirstElement()); + } else { + propertiesViewer.setInput(getViewSite()); + } + } + }); + + tmpNodeViewer.addDoubleClickListener(new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { + if (event.getSelection() == null + || event.getSelection().isEmpty()) + return; + Object obj = ((IStructuredSelection) event.getSelection()) + .getFirstElement(); + if (obj instanceof RepositoryNode) { + RepositoryNode rpNode = (RepositoryNode) obj; + rpNode.login(); + tmpNodeViewer.refresh(obj); + } else if (obj instanceof WorkspaceNode) { + ((WorkspaceNode) obj).login(); + tmpNodeViewer.refresh(obj); + } else if (obj instanceof Node) { + Node node = (Node) obj; + + // double clic on a file node triggers its opening + try { + if (node.isNodeType(NodeType.NT_FILE)) { + String name = node.getName(); + String id = node.getIdentifier(); + // For the file provider to be able to browse the + // various + // repository. + // TODO : enhanced that. + getJcrFileProvider().setRootNodes( + (Object[]) nodeContentProvider + .getElements(null)); + + getFileHandler().openFile(name, id); + } + } catch (RepositoryException re) { + throw new ArgeoException( + "Repository error while getting Node file info", + re); + } + } + } + }); + return tmpNodeViewer; + } + + @Override + protected TreeViewer getNodeViewer() { + return nodesViewer; } - // IoC + /** DEPENDENCY INJECTION **/ public void setRepositoryRegister(RepositoryRegister repositoryRegister) { this.repositoryRegister = repositoryRegister; } + public void setSession(Session session) { + this.session = session; + } + }