]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/parts/ChildNodesPage.java
Improve digest utilities
[lgpl/argeo-commons.git] / org.argeo.cms.ui.workbench / src / org / argeo / cms / ui / workbench / internal / jcr / 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.cms.ui.workbench.internal.jcr.parts;
17
18 import javax.jcr.Node;
19
20 import org.argeo.cms.ui.jcr.JcrTreeContentProvider;
21 import org.argeo.cms.ui.jcr.NodeLabelProvider;
22 import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
23 import org.argeo.cms.ui.workbench.jcr.DefaultNodeEditor;
24 import org.argeo.eclipse.ui.EclipseUiException;
25 import org.argeo.eclipse.ui.EclipseUiUtils;
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 /** List all children of the current node */
42 public class ChildNodesPage extends FormPage {
43 // private final static Log log = LogFactory.getLog(ChildNodesPage.class);
44
45 private Node currentNode;
46
47 private JcrTreeContentProvider nodeContentProvider;
48 private TreeViewer nodesViewer;
49
50 public ChildNodesPage(FormEditor editor, String title, Node currentNode) {
51 super(editor, "ChildNodesPage", title);
52 this.currentNode = currentNode;
53 }
54
55 protected void createFormContent(IManagedForm managedForm) {
56 try {
57 ScrolledForm form = managedForm.getForm();
58 form.setText(WorkbenchUiPlugin.getMessage("childNodesPageTitle"));
59 Composite innerBox = form.getBody();
60 // Composite innerBox = new Composite(body, SWT.NO_FOCUS);
61 GridLayout twt = new GridLayout(1, false);
62 twt.marginWidth = twt.marginHeight = 5;
63 innerBox.setLayout(twt);
64 if (!currentNode.hasNodes()) {
65 managedForm.getToolkit().createLabel(innerBox, WorkbenchUiPlugin.getMessage("warningNoChildNode"));
66 } else {
67 nodeContentProvider = new JcrTreeContentProvider();
68 nodesViewer = createNodeViewer(innerBox, nodeContentProvider);
69 nodesViewer.setInput(currentNode);
70 }
71 } catch (Exception e) {
72 throw new EclipseUiException("Cannot create children page for " + currentNode, e);
73 }
74 }
75
76 protected TreeViewer createNodeViewer(Composite parent, final ITreeContentProvider nodeContentProvider) {
77
78 final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.BORDER);
79 Tree tree = tmpNodeViewer.getTree();
80 tree.setLinesVisible(true);
81 tmpNodeViewer.getTree().setLayoutData(EclipseUiUtils.fillAll());
82 tmpNodeViewer.setContentProvider(nodeContentProvider);
83 tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
84 tmpNodeViewer.addDoubleClickListener(new DClickListener());
85 return tmpNodeViewer;
86 }
87
88 public class DClickListener implements IDoubleClickListener {
89
90 public void doubleClick(DoubleClickEvent event) {
91 if (event.getSelection() == null || event.getSelection().isEmpty())
92 return;
93 Object obj = ((IStructuredSelection) event.getSelection()).getFirstElement();
94 if (obj instanceof Node) {
95 Node node = (Node) obj;
96 try {
97 GenericNodeEditorInput gnei = new GenericNodeEditorInput(node);
98 WorkbenchUiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage()
99 .openEditor(gnei, DefaultNodeEditor.ID);
100 } catch (PartInitException pie) {
101 throw new EclipseUiException("Cannot open editor for " + node, pie);
102 }
103 }
104 }
105 }
106 }