2 * Copyright (C) 2007-2012 Argeo GmbH
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org
.argeo
.cms
.ui
.workbench
.jcr
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
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
;
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
;
42 /** Default form editor for a Jcr {@link Node} */
43 public class DefaultNodeEditor
extends FormEditor
{
44 private static final long serialVersionUID
= 8322127770921612239L;
46 // private final static Log log =
47 // LogFactory.getLog(GenericNodeEditor.class);
48 public final static String ID
= WorkbenchUiPlugin
.PLUGIN_ID
49 + ".defaultNodeEditor";
51 private Node currentNode
;
53 private GenericNodePage genericNodePage
;
54 private GenericPropertyPage genericPropertyPage
;
55 private ChildNodesPage childNodesPage
;
56 private NodePrivilegesPage nodeRightsManagementPage
;
57 private NodeVersionHistoryPage nodeVersionHistoryPage
;
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()));
68 protected void addPages() {
70 genericPropertyPage
= new GenericPropertyPage(this,
71 WorkbenchUiPlugin
.getMessage("genericNodePageTitle"),
73 addPage(genericPropertyPage
);
75 childNodesPage
= new ChildNodesPage(this,
76 WorkbenchUiPlugin
.getMessage("childNodesPageTitle"),
78 addPage(childNodesPage
);
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,
89 .getMessage("nodeRightsManagementPageTitle"),
91 addPage(nodeRightsManagementPage
);
93 if (currentNode
.isNodeType(NodeType
.MIX_VERSIONABLE
)) {
94 nodeVersionHistoryPage
= new NodeVersionHistoryPage(this,
96 .getMessage("nodeVersionHistoryPageTitle"),
98 addPage(nodeVersionHistoryPage
);
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(
108 WorkbenchUiPlugin
.getMessage("propertyEditorPageTitle"),
110 addPage(genericNodePage
);
113 } catch (RepositoryException e
) {
114 throw new EclipseUiException("Cannot get node info for "
116 } catch (PartInitException e
) {
117 throw new EclipseUiException("Cannot add page "
118 + "on node editor for " + currentNode
, e
);
123 public void doSaveAs() {
124 // unused compulsory method
128 public void doSave(IProgressMonitor monitor
) {
130 // Automatically commit all pages of the editor
132 firePropertyChange(PROP_DIRTY
);
133 } catch (Exception e
) {
134 throw new EclipseUiException("Error while saving node", e
);
140 public boolean isSaveAsAllowed() {
144 Node
getCurrentNode() {