Group management
[gpl/argeo-suite.git] / swt / org.argeo.app.ui / src / org / argeo / app / ui / people / NewOrgForm.java
index 539c23c483ed100c81193047bc30a36b5c8137cc..e39ba0a5e13901c1fd412ea42514bfbe0feedeef 100644 (file)
@@ -2,12 +2,23 @@ package org.argeo.app.ui.people;
 
 import static org.argeo.eclipse.ui.EclipseUiUtils.isEmpty;
 
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
 import org.argeo.api.acr.Content;
+import org.argeo.api.acr.ldap.LdapAttr;
+import org.argeo.api.acr.ldap.LdapObj;
+import org.argeo.api.cms.directory.CmsGroup;
 import org.argeo.api.cms.directory.CmsUserManager;
+import org.argeo.api.cms.directory.HierarchyUnit;
 import org.argeo.app.ui.SuiteMsg;
 import org.argeo.app.ui.SuiteUiUtils;
+import org.argeo.cms.swt.dialogs.CmsFeedback;
 import org.argeo.cms.swt.widgets.SwtGuidedFormPage;
 import org.argeo.cms.ux.widgets.AbstractGuidedForm;
+import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -16,12 +27,12 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Text;
 
-/** Ask first & last name. Update the passed node on finish */
+/** Form to create a new organisation. */
 public class NewOrgForm extends AbstractGuidedForm {
        private Content hierarchyUnit;
        private CmsUserManager cmsUserManager;
 
-       protected Text firstNameT;
+       protected Text orgNameT;
 
        public NewOrgForm(CmsUserManager cmsUserManager, Content hierarchyUnit) {
                this.hierarchyUnit = hierarchyUnit;
@@ -39,13 +50,26 @@ public class NewOrgForm extends AbstractGuidedForm {
                setFormTitle(SuiteMsg.orgWizardWindowTitle.lead());
        }
 
-       /**
-        * Called when the user click on 'Finish' in the wizard. The task is then
-        * created and the corresponding session saved.
-        */
        @Override
        public boolean performFinish() {
-               return false;
+               String orgName = orgNameT.getText();
+               if (EclipseUiUtils.isEmpty(orgName)) {
+                       CmsFeedback.show(SuiteMsg.allFieldsMustBeSet.lead());
+                       return false;
+               } else {
+                       HierarchyUnit hu = hierarchyUnit.adapt(HierarchyUnit.class);
+                       String dn = "cn=" + orgName + ",ou=Groups," + hu.getBase();
+
+                       CmsGroup user = cmsUserManager.createGroup(dn);
+
+                       Map<String, Object> additionalProperties = new HashMap<>();
+                       additionalProperties.put(LdapAttr.o.name(), orgName);
+
+                       Set<String> objectClasses = new HashSet<>();
+                       objectClasses.add(LdapObj.organization.name());
+                       cmsUserManager.addObjectClasses(user, objectClasses, additionalProperties);
+                       return true;
+               }
        }
 
        @Override
@@ -55,7 +79,7 @@ public class NewOrgForm extends AbstractGuidedForm {
 
        @Override
        public boolean canFinish() {
-               String firstName = firstNameT.getText();
+               String firstName = orgNameT.getText();
                if (isEmpty(firstName)) {
                        return false;
                } else
@@ -74,9 +98,9 @@ public class NewOrgForm extends AbstractGuidedForm {
 
                        // FirstName
                        SuiteUiUtils.createBoldLabel(parent, SuiteMsg.org);
-                       firstNameT = new Text(parent, SWT.BORDER);
+                       orgNameT = new Text(parent, SWT.BORDER);
                        // firstNameTxt.setMessage("a first name");
-                       firstNameT.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+                       orgNameT.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
 
                        ModifyListener ml = new ModifyListener() {
                                private static final long serialVersionUID = 1939491923843870844L;
@@ -87,9 +111,9 @@ public class NewOrgForm extends AbstractGuidedForm {
                                }
                        };
 
-                       firstNameT.addModifyListener(ml);
+                       orgNameT.addModifyListener(ml);
 
-                       firstNameT.setFocus();
+                       orgNameT.setFocus();
                }
        }
 }