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