2 * Copyright (C) 2007-2012 Mathieu Baudier
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.jcr
.ui
.explorer
.utils
;
18 import javax
.jcr
.Node
;
19 import javax
.jcr
.RepositoryException
;
20 import javax
.jcr
.nodetype
.NodeType
;
22 import org
.argeo
.ArgeoException
;
23 import org
.argeo
.eclipse
.ui
.jcr
.utils
.JcrFileProvider
;
24 import org
.argeo
.eclipse
.ui
.specific
.FileHandler
;
25 import org
.argeo
.jcr
.ui
.explorer
.JcrExplorerPlugin
;
26 import org
.argeo
.jcr
.ui
.explorer
.editors
.GenericNodeEditor
;
27 import org
.argeo
.jcr
.ui
.explorer
.editors
.GenericNodeEditorInput
;
28 import org
.argeo
.jcr
.ui
.explorer
.model
.RepositoryNode
;
29 import org
.argeo
.jcr
.ui
.explorer
.model
.SingleJcrNode
;
30 import org
.argeo
.jcr
.ui
.explorer
.model
.WorkspaceNode
;
31 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
32 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
33 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
34 import org
.eclipse
.jface
.viewers
.TreeViewer
;
35 import org
.eclipse
.ui
.PartInitException
;
38 * Centralizes the management of double click on a NodeTreeViewer
40 public class GenericNodeDoubleClickListener
implements IDoubleClickListener
{
42 // private final static Log log = LogFactory
43 // .getLog(GenericNodeDoubleClickListener.class);
45 private TreeViewer nodeViewer
;
46 private JcrFileProvider jfp
;
47 private FileHandler fileHandler
;
49 public GenericNodeDoubleClickListener(TreeViewer nodeViewer
) {
50 this.nodeViewer
= nodeViewer
;
51 jfp
= new JcrFileProvider();
52 fileHandler
= new FileHandler(jfp
);
55 public void doubleClick(DoubleClickEvent event
) {
56 if (event
.getSelection() == null || event
.getSelection().isEmpty())
58 Object obj
= ((IStructuredSelection
) event
.getSelection())
60 if (obj
instanceof RepositoryNode
) {
61 RepositoryNode rpNode
= (RepositoryNode
) obj
;
62 if (rpNode
.getChildren().length
== 0) {
64 nodeViewer
.refresh(obj
);
67 } else if (obj
instanceof WorkspaceNode
) {
68 ((WorkspaceNode
) obj
).login();
69 nodeViewer
.refresh(obj
);
70 } else if (obj
instanceof SingleJcrNode
) {
71 SingleJcrNode sjn
= (SingleJcrNode
) obj
;
72 Node node
= sjn
.getNode();
74 if (node
.isNodeType(NodeType
.NT_FILE
)) {
75 // double click on a file node triggers its opening
76 String name
= node
.getName();
77 String id
= node
.getIdentifier();
79 // For the file provider to be able to browse the
82 // TODO : enhanced that.
83 // ITreeContentProvider itcp = (ITreeContentProvider)
85 // .getContentProvider();
86 jfp
.setReferenceNode(node
);
87 fileHandler
.openFile(name
, id
);
89 GenericNodeEditorInput gnei
= new GenericNodeEditorInput(node
);
90 JcrExplorerPlugin
.getDefault().getWorkbench()
91 .getActiveWorkbenchWindow().getActivePage()
92 .openEditor(gnei
, GenericNodeEditor
.ID
);
93 } catch (RepositoryException re
) {
94 throw new ArgeoException(
95 "Repository error while getting node info", re
);
96 } catch (PartInitException pie
) {
97 throw new ArgeoException(
98 "Unexepected exception while opening node editor", pie
);