From 41c907953b7529e20461e09928916e047d4198e8 Mon Sep 17 00:00:00 2001 From: bsinou Date: Thu, 9 Feb 2017 22:45:38 +0100 Subject: [PATCH] Clean workgroup home creation process --- .../META-INF/spring/osgi.xml | 3 ++ .../META-INF/spring/parts.xml | 1 + .../useradmin/parts/GroupMainPage.java | 53 +++++-------------- .../internal/useradmin/parts/UserEditor.java | 13 +++-- 4 files changed, 27 insertions(+), 43 deletions(-) diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml b/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml index 7fa7adb8f..a32241299 100644 --- a/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml +++ b/org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml @@ -19,6 +19,9 @@ + + + diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml b/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml index 22c3485c6..a884d5108 100644 --- a/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml +++ b/org.argeo.cms.ui.workbench/META-INF/spring/parts.xml @@ -17,6 +17,7 @@ scope="prototype"> + diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java index 2b72d5626..41cb0217c 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java @@ -23,8 +23,8 @@ import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; -import javax.jcr.nodetype.NodeType; -import javax.jcr.security.Privilege; +import javax.naming.InvalidNameException; +import javax.naming.ldap.LdapName; import javax.transaction.UserTransaction; import org.argeo.cms.CmsException; @@ -47,8 +47,7 @@ import org.argeo.eclipse.ui.parts.LdifUsersTable; import org.argeo.jcr.JcrUtils; import org.argeo.naming.LdapAttrs; import org.argeo.node.ArgeoNames; -import org.argeo.node.NodeNames; -import org.argeo.node.NodeTypes; +import org.argeo.node.NodeInstance; import org.argeo.node.NodeUtils; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; @@ -96,10 +95,12 @@ public class GroupMainPage extends FormPage implements ArgeoNames { final static String ID = "GroupEditor.mainPage"; private final UserEditor editor; - private UserAdminWrapper userAdminWrapper; + private final NodeInstance nodeInstance; + private final UserAdminWrapper userAdminWrapper; private final Session session; - public GroupMainPage(FormEditor editor, UserAdminWrapper userAdminWrapper, Repository repository) { + public GroupMainPage(FormEditor editor, UserAdminWrapper userAdminWrapper, Repository repository, + NodeInstance nodeInstance) { super(editor, ID, "Main"); try { session = repository.login(); @@ -108,6 +109,7 @@ public class GroupMainPage extends FormPage implements ArgeoNames { } this.editor = (UserEditor) editor; this.userAdminWrapper = userAdminWrapper; + this.nodeInstance = nodeInstance; } protected void createFormContent(final IManagedForm mf) { @@ -202,33 +204,15 @@ public class GroupMainPage extends FormPage implements ArgeoNames { if (confirmed) { Node workgroupHome = NodeUtils.getGroupHome(session, cn); if (workgroupHome != null) - // already marked as workgroup, do nothing - return; - else { - // Insure the session is clean to enable rollback + return; // already marked as workgroup, do nothing + else try { - if (session.hasPendingChanges()) - MessageDialog.openError(getSite().getShell(), "Cannot create home group home", - "The current session is dirty. Please save and try again."); - } catch (RepositoryException e2) { - throw new CmsException("Cannot check session state", e2); - } - try { - // FIXME hardcoded base path - String relPath = generateWorkgroupHomeRelPath(cn); - Node newHome = JcrUtils.mkdirs(session.getNode("/groups"), relPath, - NodeType.NT_UNSTRUCTURED); - newHome.addMixin(NodeTypes.NODE_GROUP_HOME); - newHome.setProperty(NodeNames.LDAP_CN, cn); - session.save(); - JcrUtils.addPrivilege(session, newHome.getPath(), group.getName(), Privilege.JCR_ALL); - session.save(); + nodeInstance.createWorkgroup(new LdapName(group.getName())); part.refresh(); - } catch (RepositoryException e2) { - JcrUtils.discardQuietly(session); - throw new CmsException("Cannot check session state", e2); + } catch (InvalidNameException e1) { + throw new CmsException("Cannot create Workgroup for " + group.toString(), e1); } - } + } } }); @@ -238,14 +222,6 @@ public class GroupMainPage extends FormPage implements ArgeoNames { getManagedForm().addPart(part); } - // FIXME finalise and centralise Workgroup home path management - private String generateWorkgroupHomeRelPath(String cn) { - // // Dirty management of space and special characters - // String cleanedName = cn.replaceAll("[^a-zA-Z0-9]", "_"); - // return JcrUtils.firstCharsToPath(cleanedName, 2) + '/' + cleanedName; - return cn; - } - /** Filtered table with members. Has drag & drop ability */ protected void appendMembersPart(Composite parent, Group group) { @@ -440,7 +416,6 @@ public class GroupMainPage extends FormPage implements ArgeoNames { @Override public void drop(DropTargetEvent event) { // TODO Is there an opportunity to perform the check before? - String newUserName = (String) event.data; UserAdmin myUserAdmin = userAdminWrapper.getUserAdmin(); Role role = myUserAdmin.getRole(newUserName); diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java index 35f2c7f38..be1ce47ca 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java @@ -26,6 +26,7 @@ import org.argeo.cms.ui.workbench.internal.useradmin.UiUserAdminListener; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.util.UserAdminUtils; import org.argeo.naming.LdapAttrs; +import org.argeo.node.NodeInstance; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; @@ -53,8 +54,8 @@ public class UserEditor extends FormEditor { private Repository repository; private UserAdminWrapper userAdminWrapper; private UserAdmin userAdmin; + private NodeInstance nodeInstance; - // Context private User user; private String username; @@ -110,7 +111,7 @@ public class UserEditor extends FormEditor { protected void addPages() { try { if (user.getType() == Role.GROUP) - addPage(new GroupMainPage(this, userAdminWrapper, repository)); + addPage(new GroupMainPage(this, userAdminWrapper, repository, nodeInstance)); else addPage(new UserMainPage(this, userAdminWrapper)); } catch (Exception e) { @@ -213,9 +214,13 @@ public class UserEditor extends FormEditor { public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) { this.userAdminWrapper = userAdminWrapper; } - + public void setRepository(Repository repository) { this.repository = repository; } - + + public void setNodeInstance(NodeInstance nodeInstance) { + this.nodeInstance = nodeInstance; + } + } -- 2.30.2