]> 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.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.editors.GenericNodeEditor;
13 import org.argeo.jcr.ui.explorer.editors.GenericNodeEditorInput;
14 import org.argeo.jcr.ui.explorer.model.RepositoryNode;
15 import org.argeo.jcr.ui.explorer.model.SingleJcrNode;
16 import org.argeo.jcr.ui.explorer.model.WorkspaceNode;
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 if (rpNode.getChildren().length == 0) {
50 rpNode.login();
51 nodeViewer.refresh(obj);
52 }
53 // else do nothing
54 } else if (obj instanceof WorkspaceNode) {
55 ((WorkspaceNode) obj).login();
56 nodeViewer.refresh(obj);
57 } else if (obj instanceof SingleJcrNode) {
58 SingleJcrNode sjn = (SingleJcrNode) obj;
59 Node node = sjn.getNode();
60 try {
61 if (node.isNodeType(NodeType.NT_FILE)) {
62 // double click on a file node triggers its opening
63 String name = node.getName();
64 String id = node.getIdentifier();
65
66 // For the file provider to be able to browse the
67 // various
68 // repository.
69 // TODO : enhanced that.
70 ITreeContentProvider itcp = (ITreeContentProvider) nodeViewer
71 .getContentProvider();
72 // jfp.setRootNodes((Object[]) itcp.getElements(null));
73 fileHandler.openFile(name, id);
74 }
75 GenericNodeEditorInput gnei = new GenericNodeEditorInput(node);
76 JcrExplorerPlugin.getDefault().getWorkbench()
77 .getActiveWorkbenchWindow().getActivePage()
78 .openEditor(gnei, GenericNodeEditor.ID);
79 } catch (RepositoryException re) {
80 throw new ArgeoException(
81 "Repository error while getting node info", re);
82 } catch (PartInitException pie) {
83 throw new ArgeoException(
84 "Unexepected exception while opening node editor", pie);
85 }
86 }
87 }
88 }