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.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 }