]> git.argeo.org Git - lgpl/argeo-commons.git/blob - utils/GenericNodeDoubleClickListener.java
Prepare next development cycle
[lgpl/argeo-commons.git] / 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.argeo.ArgeoException;
8 import org.argeo.eclipse.ui.jcr.utils.JcrFileProvider;
9 import org.argeo.eclipse.ui.specific.FileHandler;
10 import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
11 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditor;
12 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditorInput;
13 import org.argeo.jcr.ui.explorer.model.RepositoryNode;
14 import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
15 import org.argeo.jcr.ui.explorer.model.WorkspaceNode;
16 import org.eclipse.jface.viewers.DoubleClickEvent;
17 import org.eclipse.jface.viewers.IDoubleClickListener;
18 import org.eclipse.jface.viewers.IStructuredSelection;
19 import org.eclipse.jface.viewers.TreeViewer;
20 import org.eclipse.ui.PartInitException;
21
22 /**
23 * Centralizes the management of double click on a NodeTreeViewer
24 */
25 public class GenericNodeDoubleClickListener implements IDoubleClickListener {
26
27 // private final static Log log = LogFactory
28 // .getLog(GenericNodeDoubleClickListener.class);
29
30 private TreeViewer nodeViewer;
31 private JcrFileProvider jfp;
32 private FileHandler fileHandler;
33
34 public GenericNodeDoubleClickListener(TreeViewer nodeViewer) {
35 this.nodeViewer = nodeViewer;
36 jfp = new JcrFileProvider();
37 fileHandler = new FileHandler(jfp);
38 }
39
40 public void doubleClick(DoubleClickEvent event) {
41 if (event.getSelection() == null || event.getSelection().isEmpty())
42 return;
43 Object obj = ((IStructuredSelection) event.getSelection())
44 .getFirstElement();
45 if (obj instanceof RepositoryNode) {
46 RepositoryNode rpNode = (RepositoryNode) obj;
47 if (rpNode.getChildren().length == 0) {
48 rpNode.login();
49 nodeViewer.refresh(obj);
50 }
51 // else do nothing
52 } else if (obj instanceof WorkspaceNode) {
53 ((WorkspaceNode) obj).login();
54 nodeViewer.refresh(obj);
55 } else if (obj instanceof SingleJcrNode) {
56 SingleJcrNode sjn = (SingleJcrNode) obj;
57 Node node = sjn.getNode();
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)
69 // nodeViewer
70 // .getContentProvider();
71 jfp.setReferenceNode(node);
72 fileHandler.openFile(name, id);
73 }
74 GenericNodeEditorInput gnei = new GenericNodeEditorInput(node);
75 JcrExplorerPlugin.getDefault().getWorkbench()
76 .getActiveWorkbenchWindow().getActivePage()
77 .openEditor(gnei, GenericNodeEditor.ID);
78 } catch (RepositoryException re) {
79 throw new ArgeoException(
80 "Repository error while getting node info", re);
81 } catch (PartInitException pie) {
82 throw new ArgeoException(
83 "Unexepected exception while opening node editor", pie);
84 }
85 }
86 }
87 }