]> git.argeo.org Git - lgpl/argeo-commons.git/blob - jcr/DefaultNodeEditor.java
Prepare next development cycle
[lgpl/argeo-commons.git] / jcr / DefaultNodeEditor.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.jcr;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import javax.jcr.Node;
22 import javax.jcr.RepositoryException;
23 import javax.jcr.nodetype.NodeType;
24 import javax.jcr.security.AccessControlManager;
25 import javax.jcr.security.Privilege;
26
27 import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
28 import org.argeo.cms.ui.workbench.internal.jcr.parts.ChildNodesPage;
29 import org.argeo.cms.ui.workbench.internal.jcr.parts.GenericNodeEditorInput;
30 import org.argeo.cms.ui.workbench.internal.jcr.parts.GenericNodePage;
31 import org.argeo.cms.ui.workbench.internal.jcr.parts.GenericPropertyPage;
32 import org.argeo.cms.ui.workbench.internal.jcr.parts.NodePrivilegesPage;
33 import org.argeo.cms.ui.workbench.internal.jcr.parts.NodeVersionHistoryPage;
34 import org.argeo.eclipse.ui.EclipseUiException;
35 import org.argeo.jcr.JcrUtils;
36 import org.eclipse.core.runtime.IProgressMonitor;
37 import org.eclipse.ui.IEditorInput;
38 import org.eclipse.ui.IEditorSite;
39 import org.eclipse.ui.PartInitException;
40 import org.eclipse.ui.forms.editor.FormEditor;
41
42 /** Default form editor for a Jcr {@link Node} */
43 public class DefaultNodeEditor extends FormEditor {
44 private static final long serialVersionUID = 8322127770921612239L;
45
46 // private final static Log log =
47 // LogFactory.getLog(GenericNodeEditor.class);
48 public final static String ID = WorkbenchUiPlugin.PLUGIN_ID
49 + ".defaultNodeEditor";
50
51 private Node currentNode;
52
53 private GenericNodePage genericNodePage;
54 private GenericPropertyPage genericPropertyPage;
55 private ChildNodesPage childNodesPage;
56 private NodePrivilegesPage nodeRightsManagementPage;
57 private NodeVersionHistoryPage nodeVersionHistoryPage;
58
59 public void init(IEditorSite site, IEditorInput input)
60 throws PartInitException {
61 super.init(site, input);
62 GenericNodeEditorInput nei = (GenericNodeEditorInput) getEditorInput();
63 currentNode = nei.getCurrentNode();
64 this.setPartName(JcrUtils.lastPathElement(nei.getPath()));
65 }
66
67 @Override
68 protected void addPages() {
69 try {
70 genericPropertyPage = new GenericPropertyPage(this,
71 WorkbenchUiPlugin.getMessage("genericNodePageTitle"),
72 currentNode);
73 addPage(genericPropertyPage);
74
75 childNodesPage = new ChildNodesPage(this,
76 WorkbenchUiPlugin.getMessage("childNodesPageTitle"),
77 currentNode);
78 addPage(childNodesPage);
79
80 AccessControlManager accessControlManager = currentNode
81 .getSession().getAccessControlManager();
82 List<Privilege> privileges = new ArrayList<Privilege>();
83 privileges.add(accessControlManager
84 .privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL));
85 if (accessControlManager.hasPrivileges(currentNode.getPath(),
86 privileges.toArray(new Privilege[0]))) {
87 nodeRightsManagementPage = new NodePrivilegesPage(this,
88 WorkbenchUiPlugin
89 .getMessage("nodeRightsManagementPageTitle"),
90 currentNode);
91 addPage(nodeRightsManagementPage);
92 }
93 if (currentNode.isNodeType(NodeType.MIX_VERSIONABLE)) {
94 nodeVersionHistoryPage = new NodeVersionHistoryPage(this,
95 WorkbenchUiPlugin
96 .getMessage("nodeVersionHistoryPageTitle"),
97 currentNode);
98 addPage(nodeVersionHistoryPage);
99 }
100
101 privileges = new ArrayList<Privilege>();
102 privileges.add(accessControlManager
103 .privilegeFromName(Privilege.JCR_ALL));
104 if (accessControlManager.hasPrivileges(currentNode.getPath(),
105 privileges.toArray(new Privilege[0]))) {
106 genericNodePage = new GenericNodePage(
107 this,
108 WorkbenchUiPlugin.getMessage("propertyEditorPageTitle"),
109 currentNode);
110 addPage(genericNodePage);
111 }
112
113 } catch (RepositoryException e) {
114 throw new EclipseUiException("Cannot get node info for "
115 + currentNode, e);
116 } catch (PartInitException e) {
117 throw new EclipseUiException("Cannot add page "
118 + "on node editor for " + currentNode, e);
119 }
120 }
121
122 @Override
123 public void doSaveAs() {
124 // unused compulsory method
125 }
126
127 @Override
128 public void doSave(IProgressMonitor monitor) {
129 try {
130 // Automatically commit all pages of the editor
131 commitPages(true);
132 firePropertyChange(PROP_DIRTY);
133 } catch (Exception e) {
134 throw new EclipseUiException("Error while saving node", e);
135 }
136
137 }
138
139 @Override
140 public boolean isSaveAsAllowed() {
141 return true;
142 }
143
144 Node getCurrentNode() {
145 return currentNode;
146 }
147 }