]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/GenericNodeDoubleClickListener.java
Do not use latest EclipseUiUtils to enable using the new command as hot fix on existi...
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui.workbench / src / org / argeo / eclipse / ui / workbench / jcr / internal / GenericNodeDoubleClickListener.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16 package org.argeo.eclipse.ui.workbench.jcr.internal;
17
18 import javax.jcr.Node;
19 import javax.jcr.RepositoryException;
20 import javax.jcr.nodetype.NodeType;
21
22 import org.argeo.ArgeoException;
23 import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
24 import org.argeo.eclipse.ui.workbench.jcr.DefaultNodeEditor;
25 import org.argeo.eclipse.ui.workbench.jcr.internal.model.RepositoryElem;
26 import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem;
27 import org.argeo.eclipse.ui.workbench.jcr.internal.model.WorkspaceElem;
28 import org.argeo.eclipse.ui.workbench.jcr.internal.parts.GenericNodeEditorInput;
29 import org.eclipse.jface.viewers.DoubleClickEvent;
30 import org.eclipse.jface.viewers.IDoubleClickListener;
31 import org.eclipse.jface.viewers.IStructuredSelection;
32 import org.eclipse.jface.viewers.TreeViewer;
33 import org.eclipse.ui.PartInitException;
34
35 /**
36 * Centralizes the management of double click on a NodeTreeViewer
37 */
38 public class GenericNodeDoubleClickListener implements IDoubleClickListener {
39
40 // private final static Log log = LogFactory
41 // .getLog(GenericNodeDoubleClickListener.class);
42
43 private TreeViewer nodeViewer;
44
45 // private JcrFileProvider jfp;
46 // private FileHandler fileHandler;
47
48 public GenericNodeDoubleClickListener(TreeViewer nodeViewer) {
49 this.nodeViewer = nodeViewer;
50 // jfp = new JcrFileProvider();
51 // Commented out. see https://www.argeo.org/bugzilla/show_bug.cgi?id=188
52 // fileHandler = null;
53 // fileHandler = new FileHandler(jfp);
54 }
55
56 public void doubleClick(DoubleClickEvent event) {
57 if (event.getSelection() == null || event.getSelection().isEmpty())
58 return;
59 Object obj = ((IStructuredSelection) event.getSelection())
60 .getFirstElement();
61 if (obj instanceof RepositoryElem) {
62 RepositoryElem rpNode = (RepositoryElem) obj;
63 if (!rpNode.isConnected()) {
64 rpNode.login();
65 nodeViewer.refresh(obj);
66 }
67 } else if (obj instanceof WorkspaceElem) {
68 WorkspaceElem wn = (WorkspaceElem) obj;
69 if (wn.isConnected())
70 wn.logout();
71 else
72 wn.login();
73 nodeViewer.refresh(obj);
74 } else if (obj instanceof SingleJcrNodeElem) {
75 SingleJcrNodeElem sjn = (SingleJcrNodeElem) obj;
76 Node node = sjn.getNode();
77 try {
78 if (node.isNodeType(NodeType.NT_FILE)) {
79 // double click on a file node triggers its opening
80 // String name = node.getName();
81 // String id = node.getIdentifier();
82
83 // TODO add integration of direct retrieval of the binary in
84 // a JCR repo.
85 // Map<String, String> params = new HashMap<String,
86 // String>();
87 // params.put(OpenFile.PARAM_FILE_NAME, name);
88 // params.put(OpenFile.PARAM_FILE_URI, "jcr://" + id);
89 // CommandUtils
90 // .callCommand("org.argeo.security.ui.specific.openFile",
91 // params);
92
93 // For the file provider to be able to browse the
94 // various
95 // repository.
96 // TODO : enhanced that.
97 // ITreeContentProvider itcp = (ITreeContentProvider)
98 // nodeViewer
99 // .getContentProvider();
100 // jfp.setReferenceNode(node);
101 // if (fileHandler != null)
102 // fileHandler.openFile(name, id);
103 }
104 GenericNodeEditorInput gnei = new GenericNodeEditorInput(node);
105 WorkbenchUiPlugin.getDefault().getWorkbench()
106 .getActiveWorkbenchWindow().getActivePage()
107 .openEditor(gnei, DefaultNodeEditor.ID);
108 } catch (RepositoryException re) {
109 throw new ArgeoException(
110 "Repository error while getting node info", re);
111 } catch (PartInitException pie) {
112 throw new ArgeoException(
113 "Unexepected exception while opening node editor", pie);
114 }
115 }
116 }
117 }