1 package org
.argeo
.jcr
.ui
.explorer
.utils
;
4 import javax
.jcr
.RepositoryException
;
5 import javax
.jcr
.nodetype
.NodeType
;
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
;
25 * Centralizes the management of double click on a NodeTreeViewer
27 public class GenericNodeDoubleClickListener
implements IDoubleClickListener
{
29 private final static Log log
= LogFactory
30 .getLog(GenericNodeDoubleClickListener
.class);
32 private TreeViewer nodeViewer
;
33 private JcrFileProvider jfp
;
34 private FileHandler fileHandler
;
36 public GenericNodeDoubleClickListener(TreeViewer nodeViewer
) {
37 this.nodeViewer
= nodeViewer
;
38 jfp
= new JcrFileProvider();
39 fileHandler
= new FileHandler(jfp
);
42 public void doubleClick(DoubleClickEvent event
) {
43 if (event
.getSelection() == null || event
.getSelection().isEmpty())
45 Object obj
= ((IStructuredSelection
) event
.getSelection())
47 if (obj
instanceof RepositoryNode
) {
48 RepositoryNode rpNode
= (RepositoryNode
) obj
;
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
;
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();
62 // For the file provider to be able to browse the
65 // TODO : enhanced that.
66 ITreeContentProvider itcp
= (ITreeContentProvider
) nodeViewer
67 .getContentProvider();
68 jfp
.setRootNodes((Object
[]) itcp
.getElements(null));
69 fileHandler
.openFile(name
, id
);
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
);
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
)
92 parent
= ncp
.getParent(parent
);
93 return parent
== null ?
null : ((RepositoryNode
) parent
).getName();