Clean workgroup home creation process
authorbsinou <bsinou@argeo.org>
Thu, 9 Feb 2017 21:45:38 +0000 (22:45 +0100)
committerbsinou <bsinou@argeo.org>
Thu, 9 Feb 2017 21:45:38 +0000 (22:45 +0100)
org.argeo.cms.ui.workbench/META-INF/spring/osgi.xml
org.argeo.cms.ui.workbench/META-INF/spring/parts.xml
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java

index 7fa7adb8fac4eff9bb486fd3d134df28bf6d19d6..a32241299d3308892c4eadebd4aa382f1a9b5e76 100644 (file)
@@ -19,6 +19,9 @@
 \r
        <reference id="nodeRepository" interface="javax.jcr.Repository"\r
                filter="(cn=home)" />\r
+               \r
+       <reference id="nodeInstance" interface="org.argeo.node.NodeInstance" />\r
+\r
        <reference id="nodeFileSystemProvider" interface="java.nio.file.spi.FileSystemProvider"\r
                filter="(service.pid=org.argeo.node.fsProvider)" />\r
 \r
index 22c3485c6dc173202663fbfdf3867858c00015c1..a884d51080699d77955c7dd346e358d385a251ff 100644 (file)
@@ -17,6 +17,7 @@
                scope="prototype">
                <property name="userAdminWrapper" ref="userAdminWrapper" />
                <property name="repository" ref="nodeRepository" />
+               <property name="nodeInstance" ref="nodeInstance" />
        </bean>
        
        <!-- Views -->
index 2b72d562600775ed130a65e7765a8e09fb0ee5a4..41cb0217cc2dc33adece3c1e0acf845964f3d3cd 100644 (file)
@@ -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);
index 35f2c7f3889b99fa460dfb0662445df25d48e763..be1ce47cafad3dfec5a520f972ba0f28b7c83e1a 100644 (file)
@@ -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;
+       }
+
 }