]> 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
Introduce Tabular Content
[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 * Centralizes the management of double click on a NodeTreeViewer
26 */
27 public class GenericNodeDoubleClickListener implements IDoubleClickListener {
28
29 private final static Log log = LogFactory
30 .getLog(GenericNodeDoubleClickListener.class);
31
32 private TreeViewer nodeViewer;
33 private JcrFileProvider jfp;
34 private FileHandler fileHandler;
35
36 public GenericNodeDoubleClickListener(TreeViewer nodeViewer) {
37 this.nodeViewer = nodeViewer;
38 jfp = new JcrFileProvider();
39 fileHandler = new FileHandler(jfp);
40 }
41
42 public void doubleClick(DoubleClickEvent event) {
43 if (event.getSelection() == null || event.getSelection().isEmpty())
44 return;
45 Object obj = ((IStructuredSelection) event.getSelection())
46 .getFirstElement();
47 if (obj instanceof RepositoryNode) {
48 RepositoryNode rpNode = (RepositoryNode) obj;
49 rpNode.login();
50 nodeViewer.refresh(obj);
51 } else if (obj instanceof WorkspaceNode) {
52 ((WorkspaceNode) obj).login();
53 nodeViewer.refresh(obj);
54 } else if (obj instanceof Node) {
55 Node node = (Node) obj;
56 try {
57 if (node.isNodeType(NodeType.NT_FILE)) {
58 // double click on a file node triggers its opening
59 String name = node.getName();
60 String id = node.getIdentifier();
61
62 // For the file provider to be able to browse the
63 // various
64 // repository.
65 // TODO : enhanced that.
66 ITreeContentProvider itcp = (ITreeContentProvider) nodeViewer
67 .getContentProvider();
68 jfp.setRootNodes((Object[]) itcp.getElements(null));
69 fileHandler.openFile(name, id);
70 }
71 GenericNodeEditorInput gnei = new GenericNodeEditorInput(node);
72 JcrExplorerPlugin.getDefault().getWorkbench()
73 .getActiveWorkbenchWindow().getActivePage()
74 .openEditor(gnei, GenericNodeEditor.ID);
75 } catch (RepositoryException re) {
76 throw new ArgeoException(
77 "Repository error while getting node info", re);
78 } catch (PartInitException pie) {
79 throw new ArgeoException(
80 "Unexepected exception while opening node editor", pie);
81 }
82 }
83 }
84
85 // Enhance this method
86 private String getRepositoryAlias(Object element) {
87 NodeContentProvider ncp = (NodeContentProvider) nodeViewer
88 .getContentProvider();
89 Object parent = element;
90 while (!(ncp.getParent(parent) instanceof RepositoryNode)
91 && parent != null)
92 parent = ncp.getParent(parent);
93 return parent == null ? null : ((RepositoryNode) parent).getName();
94 }
95 }