]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ChildNodesPage.java
Enhance privilege display to ease JCR privilege management
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui.workbench / src / org / argeo / eclipse / ui / workbench / jcr / internal / parts / ChildNodesPage.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.parts;
17
18 import javax.jcr.Node;
19
20 import org.argeo.ArgeoException;
21 import org.argeo.eclipse.ui.EclipseUiUtils;
22 import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
23 import org.argeo.eclipse.ui.workbench.jcr.DefaultNodeEditor;
24 import org.argeo.eclipse.ui.workbench.jcr.internal.NodeLabelProvider;
25 import org.argeo.eclipse.ui.workbench.jcr.internal.SingleNodeAsTreeContentProvider;
26 import org.eclipse.jface.viewers.DoubleClickEvent;
27 import org.eclipse.jface.viewers.IDoubleClickListener;
28 import org.eclipse.jface.viewers.IStructuredSelection;
29 import org.eclipse.jface.viewers.ITreeContentProvider;
30 import org.eclipse.jface.viewers.TreeViewer;
31 import org.eclipse.swt.SWT;
32 import org.eclipse.swt.layout.GridLayout;
33 import org.eclipse.swt.widgets.Composite;
34 import org.eclipse.swt.widgets.Tree;
35 import org.eclipse.ui.PartInitException;
36 import org.eclipse.ui.forms.IManagedForm;
37 import org.eclipse.ui.forms.editor.FormEditor;
38 import org.eclipse.ui.forms.editor.FormPage;
39 import org.eclipse.ui.forms.widgets.ScrolledForm;
40
41 /**
42 * List all childs of the current node and brings some browsing capabilities
43 * accross the repository
44 */
45 public class ChildNodesPage extends FormPage {
46 // private final static Log log = LogFactory.getLog(ChildNodesPage.class);
47
48 // business objects
49 private Node currentNode;
50
51 // this page UI components
52 private SingleNodeAsTreeContentProvider nodeContentProvider;
53 private TreeViewer nodesViewer;
54
55 public ChildNodesPage(FormEditor editor, String title, Node currentNode) {
56 super(editor, "ChildNodesPage", title);
57 this.currentNode = currentNode;
58 }
59
60 protected void createFormContent(IManagedForm managedForm) {
61 try {
62 ScrolledForm form = managedForm.getForm();
63 form.setText(WorkbenchUiPlugin.getMessage("childNodesPageTitle"));
64 Composite body = form.getBody();
65 GridLayout twt = new GridLayout(1, false);
66 twt.marginWidth = twt.marginHeight = 5;
67 body.setLayout(twt);
68 if (!currentNode.hasNodes()) {
69 managedForm.getToolkit().createLabel(body,
70 WorkbenchUiPlugin.getMessage("warningNoChildNode"));
71 } else {
72 nodeContentProvider = new SingleNodeAsTreeContentProvider();
73 nodesViewer = createNodeViewer(body, nodeContentProvider);
74 nodesViewer.setInput(currentNode);
75 }
76 } catch (Exception e) {
77 throw new ArgeoException(
78 "Unexpected error while creating child node page", e);
79 }
80 }
81
82 protected TreeViewer createNodeViewer(Composite parent,
83 final ITreeContentProvider nodeContentProvider) {
84
85 final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.BORDER);
86 Tree tree = tmpNodeViewer.getTree();
87 tree.setLinesVisible(true);
88 tmpNodeViewer.getTree().setLayoutData(EclipseUiUtils.fillAll());
89 tmpNodeViewer.setContentProvider(nodeContentProvider);
90 tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
91 tmpNodeViewer.addDoubleClickListener(new DClickListener());
92 return tmpNodeViewer;
93 }
94
95 public class DClickListener implements IDoubleClickListener {
96
97 public void doubleClick(DoubleClickEvent event) {
98 if (event.getSelection() == null || event.getSelection().isEmpty())
99 return;
100 Object obj = ((IStructuredSelection) event.getSelection())
101 .getFirstElement();
102 if (obj instanceof Node) {
103 Node node = (Node) obj;
104 try {
105 GenericNodeEditorInput gnei = new GenericNodeEditorInput(
106 node);
107 WorkbenchUiPlugin.getDefault().getWorkbench()
108 .getActiveWorkbenchWindow().getActivePage()
109 .openEditor(gnei, DefaultNodeEditor.ID);
110 } catch (PartInitException pie) {
111 throw new ArgeoException(
112 "Unexepected exception while opening node editor",
113 pie);
114 }
115 }
116 }
117 }
118 }