]> 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
Some refactoring of the model and of command handling.
[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.argeo.ArgeoException;
8 import org.argeo.eclipse.ui.specific.FileHandler;
9 import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
10 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditor;
11 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditorInput;
12 import org.argeo.jcr.ui.explorer.model.RepositoryNode;
13 import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
14 import org.argeo.jcr.ui.explorer.model.WorkspaceNode;
15 import org.eclipse.jface.viewers.DoubleClickEvent;
16 import org.eclipse.jface.viewers.IDoubleClickListener;
17 import org.eclipse.jface.viewers.IStructuredSelection;
18 import org.eclipse.jface.viewers.TreeViewer;
19 import org.eclipse.ui.PartInitException;
20
21 /**
22 * Centralizes the management of double click on a NodeTreeViewer
23 */
24 public class GenericNodeDoubleClickListener implements IDoubleClickListener {
25
26 // private final static Log log = LogFactory
27 // .getLog(GenericNodeDoubleClickListener.class);
28
29 private TreeViewer nodeViewer;
30 private JcrFileProvider jfp;
31 private FileHandler fileHandler;
32
33 public GenericNodeDoubleClickListener(TreeViewer nodeViewer) {
34 this.nodeViewer = nodeViewer;
35 jfp = new JcrFileProvider();
36 fileHandler = new FileHandler(jfp);
37 }
38
39 public void doubleClick(DoubleClickEvent event) {
40 if (event.getSelection() == null || event.getSelection().isEmpty())
41 return;
42 Object obj = ((IStructuredSelection) event.getSelection())
43 .getFirstElement();
44 if (obj instanceof RepositoryNode) {
45 RepositoryNode rpNode = (RepositoryNode) obj;
46 if (rpNode.getChildren().length == 0) {
47 rpNode.login();
48 nodeViewer.refresh(obj);
49 }
50 // else do nothing
51 } else if (obj instanceof WorkspaceNode) {
52 ((WorkspaceNode) obj).login();
53 nodeViewer.refresh(obj);
54 } else if (obj instanceof SingleJcrNode) {
55 SingleJcrNode sjn = (SingleJcrNode) obj;
56 Node node = sjn.getNode();
57 try {
58 if (node.isNodeType(NodeType.NT_FILE)) {
59 // double click on a file node triggers its opening
60 String name = node.getName();
61 String id = node.getIdentifier();
62
63 // For the file provider to be able to browse the
64 // various
65 // repository.
66 // TODO : enhanced that.
67 // ITreeContentProvider itcp = (ITreeContentProvider)
68 // 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 }