View Javadoc
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 }