1 package org
.argeo
.cms
.ui
.workbench
.internal
.jcr
.parts
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Value
;
11 import org
.argeo
.cms
.ui
.workbench
.WorkbenchUiPlugin
;
12 import org
.argeo
.eclipse
.ui
.EclipseUiException
;
13 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
14 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
15 import org
.eclipse
.jface
.viewers
.TableViewer
;
16 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
17 import org
.eclipse
.jface
.viewers
.Viewer
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.graphics
.Image
;
20 import org
.eclipse
.swt
.layout
.FillLayout
;
21 import org
.eclipse
.swt
.widgets
.Composite
;
22 import org
.eclipse
.swt
.widgets
.Table
;
23 import org
.eclipse
.swt
.widgets
.TableColumn
;
24 import org
.eclipse
.ui
.forms
.IManagedForm
;
25 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
26 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
27 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
30 * Display and edit a given node privilege. For the time being it is completely
31 * JackRabbit specific (and hard coded for this) and will display an empty page
32 * if using any other implementation
34 public class NodePrivilegesPage
extends FormPage
{
38 private TableViewer viewer
;
40 public NodePrivilegesPage(FormEditor editor
, String title
, Node context
) {
41 super(editor
, "NodePrivilegesPage", title
);
42 this.context
= context
;
45 protected void createFormContent(IManagedForm managedForm
) {
46 ScrolledForm form
= managedForm
.getForm();
47 form
.setText(WorkbenchUiPlugin
.getMessage("nodeRightsManagementPageTitle"));
48 FillLayout layout
= new FillLayout();
49 layout
.marginHeight
= 5;
50 layout
.marginWidth
= 5;
51 form
.getBody().setLayout(layout
);
53 createRightsPart(form
.getBody());
56 /** Creates the authorization part */
57 protected void createRightsPart(Composite parent
) {
58 Table table
= new Table(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
59 table
.setLinesVisible(true);
60 table
.setHeaderVisible(true);
61 viewer
= new TableViewer(table
);
64 TableViewerColumn column
= createTableViewerColumn(viewer
, "User/Group Name", 280);
65 column
.setLabelProvider(new ColumnLabelProvider() {
66 private static final long serialVersionUID
= -2290781173498395973L;
68 public String
getText(Object element
) {
69 Node node
= (Node
) element
;
71 if (node
.hasProperty("rep:principalName"))
72 return node
.getProperty("rep:principalName").getString();
73 } catch (RepositoryException e
) {
74 throw new EclipseUiException("Unable to retrieve " + "principal name on " + node
, e
);
79 public Image
getImage(Object element
) {
85 column
= createTableViewerColumn(viewer
, "Assigned privileges", 300);
86 column
.setLabelProvider(new ColumnLabelProvider() {
87 private static final long serialVersionUID
= -2290781173498395973L;
88 private String propertyName
= "rep:privileges";
90 public String
getText(Object element
) {
91 Node node
= (Node
) element
;
93 if (node
.hasProperty(propertyName
)) {
94 String separator
= ", ";
95 Value
[] langs
= node
.getProperty(propertyName
).getValues();
96 StringBuilder builder
= new StringBuilder();
97 for (Value val
: langs
) {
98 String currStr
= val
.getString();
99 builder
.append(currStr
).append(separator
);
101 if (builder
.lastIndexOf(separator
) >= 0)
102 return builder
.substring(0, builder
.length() - separator
.length());
104 return builder
.toString();
107 } catch (RepositoryException e
) {
108 throw new EclipseUiException("Unable to retrieve " + "privileges on " + node
, e
);
113 public Image
getImage(Object element
) {
119 column
= createTableViewerColumn(viewer
, "Relevant node", 300);
120 column
.setLabelProvider(new ColumnLabelProvider() {
121 private static final long serialVersionUID
= 4245522992038244849L;
123 public String
getText(Object element
) {
124 Node node
= (Node
) element
;
126 return node
.getParent().getParent().getPath();
127 } catch (RepositoryException e
) {
128 throw new EclipseUiException("Unable get path for " + node
, e
);
132 public Image
getImage(Object element
) {
137 viewer
.setContentProvider(new RightsContentProvider());
138 viewer
.setInput(getEditorSite());
141 protected TableViewerColumn
createTableViewerColumn(TableViewer viewer
, String title
, int bound
) {
142 TableViewerColumn viewerColumn
= new TableViewerColumn(viewer
, SWT
.NONE
);
143 TableColumn column
= viewerColumn
.getColumn();
144 column
.setText(title
);
145 column
.setWidth(bound
);
146 column
.setResizable(true);
147 column
.setMoveable(true);
151 private class RightsContentProvider
implements IStructuredContentProvider
{
152 private static final long serialVersionUID
= -7631476348552802706L;
154 public void dispose() {
157 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
160 // TODO JackRabbit specific retrieval of authorization. Clean and
162 public Object
[] getElements(Object inputElement
) {
164 List
<Node
> privs
= new ArrayList
<Node
>();
166 Node currNode
= context
;
167 String currPath
= currNode
.getPath();
170 if (currNode
.hasNode("rep:policy")) {
171 NodeIterator nit
= currNode
.getNode("rep:policy").getNodes();
172 while (nit
.hasNext()) {
173 Node currPrivNode
= nit
.nextNode();
174 if (currPrivNode
.getName().startsWith("allow"))
175 privs
.add(currPrivNode
);
178 if ("/".equals(currPath
))
181 currNode
= currNode
.getParent();
182 currPath
= currNode
.getPath();
186 // AccessControlManager acm = context.getSession()
187 // .getAccessControlManager();
188 // AccessControlPolicyIterator acpi = acm
189 // .getApplicablePolicies(context.getPath());
191 // List<AccessControlPolicy> acps = new
192 // ArrayList<AccessControlPolicy>();
195 // Object obj = acpi.next();
196 // acps.add((AccessControlPolicy) obj);
198 // } catch (Exception e) {
199 // // No more elements
202 // AccessControlList acl = ((AccessControlList) acps.get(0));
203 // AccessControlEntry[] entries = acl.getAccessControlEntries();
205 return privs
.toArray();
206 } catch (Exception e
) {
207 throw new EclipseUiException("Cannot retrieve authorization for " + context
, e
);
213 * Simply checks if we are using jackrabbit without adding code dependencies
215 private boolean isJackRabbit() {
217 String cname
= context
.getSession().getClass().getName();
218 return cname
.startsWith("org.apache.jackrabbit");
219 } catch (RepositoryException e
) {
220 throw new EclipseUiException("Cannot check JCR implementation used on " + context
, e
);