*/
package org.argeo.eclipse.ui.workbench.jcr;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.Privilege;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.editor.FormEditor;
-/**
- * Container for the node editor page. At creation time, it takes a JCR Node
- * that cannot be changed afterwards.
- */
+/** Default form editor for a Jcr {@link Node} */
public class DefaultNodeEditor extends FormEditor {
- private static final long serialVersionUID = -5397680152514917137L;
+ private static final long serialVersionUID = 8322127770921612239L;
// private final static Log log =
// LogFactory.getLog(GenericNodeEditor.class);
currentNode);
addPage(childNodesPage);
- nodeRightsManagementPage = new NodeRightsManagementPage(this,
- WorkbenchUiPlugin
- .getMessage("nodeRightsManagementPageTitle"),
- currentNode);
- addPage(nodeRightsManagementPage);
-
- nodeVersionHistoryPage = new NodeVersionHistoryPage(
- this,
- WorkbenchUiPlugin.getMessage("nodeVersionHistoryPageTitle"),
- currentNode);
- addPage(nodeVersionHistoryPage);
+ AccessControlManager accessControlManager = currentNode
+ .getSession().getAccessControlManager();
+ List<Privilege> privileges = new ArrayList<Privilege>();
+ privileges.add(accessControlManager
+ .privilegeFromName(Privilege.JCR_READ_ACCESS_CONTROL));
+ if (accessControlManager.hasPrivileges(currentNode.getPath(),
+ privileges.toArray(new Privilege[0]))) {
+ nodeRightsManagementPage = new NodeRightsManagementPage(this,
+ WorkbenchUiPlugin
+ .getMessage("nodeRightsManagementPageTitle"),
+ currentNode);
+ addPage(nodeRightsManagementPage);
+ }
+ if (currentNode.isNodeType(NodeType.MIX_VERSIONABLE)) {
+ nodeVersionHistoryPage = new NodeVersionHistoryPage(this,
+ WorkbenchUiPlugin
+ .getMessage("nodeVersionHistoryPageTitle"),
+ currentNode);
+ addPage(nodeVersionHistoryPage);
+ }
+
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot get node info for " + currentNode,
+ e);
} catch (PartInitException e) {
- throw new ArgeoException("Not able to add an empty page ", e);
+ throw new ArgeoException("Cannot add page " + "on node editor for "
+ + currentNode, e);
}
}
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.ui.PartInitException;
-/**
- * Centralizes the management of double click on a NodeTreeViewer
- */
+/** Centralizes the management of double click on a NodeTreeViewer */
public class GenericNodeDoubleClickListener implements IDoubleClickListener {
-
// private final static Log log = LogFactory
// .getLog(GenericNodeDoubleClickListener.class);
if (element instanceof SingleJcrNodeElem) {
SingleJcrNodeElem sjn = (SingleJcrNodeElem) element;
return getText(sjn.getNode());
+ } else if (element instanceof Node) {
+ return getText((Node) element);
} else
return super.getText(element);
} catch (RepositoryException e) {
} else if (element instanceof SingleJcrNodeElem) {
Node nodeElem = ((SingleJcrNodeElem) element).getNode();
return getImage(nodeElem);
-
+
// if (element instanceof Node) {
// return getImage((Node) element);
// } else if (element instanceof WrappedNode) {
import javax.jcr.Node;
import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
-import org.argeo.eclipse.ui.workbench.jcr.internal.GenericNodeDoubleClickListener;
+import org.argeo.eclipse.ui.workbench.jcr.DefaultNodeEditor;
import org.argeo.eclipse.ui.workbench.jcr.internal.NodeLabelProvider;
import org.argeo.eclipse.ui.workbench.jcr.internal.SingleNodeAsTreeContentProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
managedForm.getToolkit().createLabel(body,
WorkbenchUiPlugin.getMessage("warningNoChildNode"));
} else {
-
nodeContentProvider = new SingleNodeAsTreeContentProvider();
nodesViewer = createNodeViewer(body, nodeContentProvider);
nodesViewer.setInput(currentNode);
protected TreeViewer createNodeViewer(Composite parent,
final ITreeContentProvider nodeContentProvider) {
- final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
-
- tmpNodeViewer.getTree().setLayoutData(
- new GridData(SWT.FILL, SWT.FILL, true, true));
-
+ final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.BORDER);
+ Tree tree = tmpNodeViewer.getTree();
+ tree.setLinesVisible(true);
+ tmpNodeViewer.getTree().setLayoutData(EclipseUiUtils.fillAll());
tmpNodeViewer.setContentProvider(nodeContentProvider);
tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
- tmpNodeViewer
- .addDoubleClickListener(new GenericNodeDoubleClickListener(
- tmpNodeViewer));
+ tmpNodeViewer.addDoubleClickListener(new DClickListener());
return tmpNodeViewer;
}
-}
+
+ public class DClickListener implements IDoubleClickListener {
+
+ public void doubleClick(DoubleClickEvent event) {
+ if (event.getSelection() == null || event.getSelection().isEmpty())
+ return;
+ Object obj = ((IStructuredSelection) event.getSelection())
+ .getFirstElement();
+ if (obj instanceof Node) {
+ Node node = (Node) obj;
+ try {
+ GenericNodeEditorInput gnei = new GenericNodeEditorInput(
+ node);
+ WorkbenchUiPlugin.getDefault().getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage()
+ .openEditor(gnei, DefaultNodeEditor.ID);
+ } catch (PartInitException pie) {
+ throw new ArgeoException(
+ "Unexepected exception while opening node editor",
+ pie);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
*/
package org.argeo.eclipse.ui.workbench.jcr.internal.parts;
+import java.util.ArrayList;
+import java.util.List;
+
import javax.jcr.Node;
-import javax.jcr.security.AccessControlManager;
-import javax.jcr.security.Privilege;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
createRightsPart(form.getBody());
}
- /** Creates the rights part */
+ /** Creates the authorization part */
protected void createRightsPart(Composite parent) {
Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
table.setLinesVisible(true);
table.setHeaderVisible(true);
viewer = new TableViewer(table);
- // check column
- TableViewerColumn column = createTableViewerColumn(viewer, "checked",
- 20);
+ // Group / user name
+ TableViewerColumn column = createTableViewerColumn(viewer,
+ "User/Group Name", 280);
column.setLabelProvider(new ColumnLabelProvider() {
- private static final long serialVersionUID = 3314605415711811035L;
+ private static final long serialVersionUID = -2290781173498395973L;
public String getText(Object element) {
- return null;
+ Node node = (Node) element;
+ try {
+ if (node.hasProperty("rep:principalName"))
+ return node.getProperty("rep:principalName")
+ .getString();
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Unable to retrieve "
+ + "principal name on " + node, e);
+ }
+ return "";
}
public Image getImage(Object element) {
return null;
}
});
- // column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
- // role column
- column = createTableViewerColumn(viewer, "Role", 200);
+ // Privileges
+ column = createTableViewerColumn(viewer, "Assigned privileges", 300);
column.setLabelProvider(new ColumnLabelProvider() {
private static final long serialVersionUID = -2290781173498395973L;
+ private String propertyName = "rep:privileges";
public String getText(Object element) {
- Privilege p = (Privilege) element;
- return p.getName();
+ Node node = (Node) element;
+ try {
+ if (node.hasProperty(propertyName)) {
+ String separator = ", ";
+ Value[] langs = node.getProperty(propertyName)
+ .getValues();
+ StringBuilder builder = new StringBuilder();
+ for (Value val : langs) {
+ String currStr = val.getString();
+ builder.append(currStr).append(separator);
+ }
+ if (builder.lastIndexOf(separator) >= 0)
+ return builder.substring(0, builder.length()
+ - separator.length());
+ else
+ return builder.toString();
+
+ }
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Unable to retrieve "
+ + "privileges on " + node, e);
+ }
+ return "";
}
public Image getImage(Object element) {
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
+ // TODO clean retrieval of authorization
public Object[] getElements(Object inputElement) {
try {
- AccessControlManager accessControlManager = currentNode
- .getSession().getAccessControlManager();
- Privilege[] privileges = accessControlManager
- .getPrivileges(currentNode.getPath());
- return privileges;
+ List<Node> privs = new ArrayList<Node>();
+ if (currentNode.hasNode("rep:policy")) {
+ NodeIterator nit = currentNode.getNode("rep:policy")
+ .getNodes();
+ while (nit.hasNext()) {
+ Node currNode = nit.nextNode();
+ if (currNode.getName().equals("allow"))
+ privs.add(currNode);
+ }
+ return privs.toArray();
+ }
+ return null;
} catch (Exception e) {
- throw new ArgeoException("Cannot retrieve rights", e);
+ throw new ArgeoException("Cannot retrieve authorization on "
+ + currentNode, e);
}
}
nodeEditorLbl=Generic node editor
genericNodePageTitle=Properties
childNodesPageTitle=Children
-nodeRightsManagementPageTitle=Rights
+nodeRightsManagementPageTitle=Defined privileges
nodeVersionHistoryPageTitle=History
# History
String lastNameStr = lastNameTxt.getText();
if (UiAdminUtils.notNull(lastNameStr))
- props.put(LdifName.dn.name(), lastNameStr);
+ props.put(LdifName.sn.name(), lastNameStr);
String firstNameStr = firstNameTxt.getText();
if (UiAdminUtils.notNull(firstNameStr))