]> git.argeo.org Git - lgpl/argeo-commons.git/blob - server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/GenericNodeDoubleClickListener.java
+ change GenericNodeEditorInput to rely on the JCR Node
[lgpl/argeo-commons.git] / server / plugins / org.argeo.jcr.ui.explorer / src / main / java / org / argeo / jcr / ui / explorer / utils / GenericNodeDoubleClickListener.java
1 package org.argeo.jcr.ui.explorer.utils;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5 import javax.jcr.nodetype.NodeType;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.argeo.ArgeoException;
10 import org.argeo.eclipse.ui.specific.FileHandler;
11 import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
12 import org.argeo.jcr.ui.explorer.browser.NodeContentProvider;
13 import org.argeo.jcr.ui.explorer.browser.RepositoryNode;
14 import org.argeo.jcr.ui.explorer.browser.WorkspaceNode;
15 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditor;
16 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditorInput;
17 import org.eclipse.jface.viewers.DoubleClickEvent;
18 import org.eclipse.jface.viewers.IDoubleClickListener;
19 import org.eclipse.jface.viewers.IStructuredSelection;
20 import org.eclipse.jface.viewers.ITreeContentProvider;
21 import org.eclipse.jface.viewers.TreeViewer;
22 import org.eclipse.ui.PartInitException;
23
24 /**
25 *
26 * Centralizes the management of double click on a NodeTreeViewer
27 *
28 */
29 public class GenericNodeDoubleClickListener implements IDoubleClickListener {
30
31 private final static Log log = LogFactory
32 .getLog(GenericNodeDoubleClickListener.class);
33
34 private TreeViewer nodeViewer;
35 private JcrFileProvider jfp;
36 private FileHandler fileHandler;
37
38 public GenericNodeDoubleClickListener(TreeViewer nodeViewer) {
39 this.nodeViewer = nodeViewer;
40 jfp = new JcrFileProvider();
41 fileHandler = new FileHandler(jfp);
42 }
43
44 public void doubleClick(DoubleClickEvent event) {
45 if (event.getSelection() == null || event.getSelection().isEmpty())
46 return;
47 Object obj = ((IStructuredSelection) event.getSelection())
48 .getFirstElement();
49 if (obj instanceof RepositoryNode) {
50 RepositoryNode rpNode = (RepositoryNode) obj;
51 rpNode.login();
52 nodeViewer.refresh(obj);
53 } else if (obj instanceof WorkspaceNode) {
54 ((WorkspaceNode) obj).login();
55 nodeViewer.refresh(obj);
56 } else if (obj instanceof Node) {
57 Node node = (Node) obj;
58 try {
59 if (node.isNodeType(NodeType.NT_FILE)) {
60 // double click on a file node triggers its opening
61 String name = node.getName();
62 String id = node.getIdentifier();
63
64 // For the file provider to be able to browse the
65 // various
66 // repository.
67 // TODO : enhanced that.
68 ITreeContentProvider itcp = (ITreeContentProvider) nodeViewer
69 .getContentProvider();
70 jfp.setRootNodes((Object[]) itcp.getElements(null));
71 fileHandler.openFile(name, id);
72 }
73 GenericNodeEditorInput gnei = new GenericNodeEditorInput(node);
74 JcrExplorerPlugin.getDefault().getWorkbench()
75 .getActiveWorkbenchWindow().getActivePage()
76 .openEditor(gnei, GenericNodeEditor.ID);
77 } catch (RepositoryException re) {
78 throw new ArgeoException(
79 "Repository error while getting node info", re);
80 } catch (PartInitException pie) {
81 throw new ArgeoException(
82 "Unexepected exception while opening node editor", pie);
83 }
84 }
85 }
86
87 // Enhance this method
88 private String getRepositoryAlias(Object element) {
89 NodeContentProvider ncp = (NodeContentProvider) nodeViewer
90 .getContentProvider();
91 Object parent = element;
92 while (!(ncp.getParent(parent) instanceof RepositoryNode)
93 && parent != null)
94 parent = ncp.getParent(parent);
95 return parent == null ? null : ((RepositoryNode) parent).getName();
96 }
97 }