]> git.argeo.org Git - gpl/argeo-suite.git/blob - NewUserForm.java
bdaa2e8b2cffac6895fe11703b7f0344e94024c8
[gpl/argeo-suite.git] / NewUserForm.java
1 package org.argeo.app.ui.people;
2
3 import static org.argeo.eclipse.ui.EclipseUiUtils.isEmpty;
4
5 import java.util.HashMap;
6 import java.util.HashSet;
7 import java.util.Map;
8 import java.util.Set;
9 import java.util.UUID;
10
11 import org.argeo.api.acr.Content;
12 import org.argeo.api.acr.ldap.LdapAttr;
13 import org.argeo.api.acr.ldap.LdapObj;
14 import org.argeo.api.cms.directory.CmsUser;
15 import org.argeo.api.cms.directory.CmsUserManager;
16 import org.argeo.api.cms.directory.HierarchyUnit;
17 import org.argeo.app.core.SuiteUtils;
18 import org.argeo.app.swt.ux.SuiteSwtUtils;
19 import org.argeo.app.ux.SuiteMsg;
20 import org.argeo.cms.swt.dialogs.CmsFeedback;
21 import org.argeo.cms.swt.widgets.SwtGuidedFormPage;
22 import org.argeo.cms.ux.widgets.AbstractGuidedForm;
23 import org.argeo.eclipse.ui.EclipseUiUtils;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.events.ModifyEvent;
26 import org.eclipse.swt.events.ModifyListener;
27 import org.eclipse.swt.layout.GridData;
28 import org.eclipse.swt.layout.GridLayout;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Text;
31
32 /** Ask first & last name. Update the passed node on finish */
33 public class NewUserForm extends AbstractGuidedForm {
34 private Content hierarchyUnit;
35 private CmsUserManager cmsUserManager;
36
37 protected Text lastNameT;
38 protected Text firstNameT;
39 protected Text emailT;
40
41 public NewUserForm(CmsUserManager cmsUserManager, Content hierarchyUnit) {
42 this.hierarchyUnit = hierarchyUnit;
43 if (!hierarchyUnit.hasContentClass(LdapObj.posixGroup.qName()))
44 throw new IllegalArgumentException(hierarchyUnit + " is not a POSIX group");
45 this.cmsUserManager = cmsUserManager;
46 }
47
48 @Override
49 public void addPages() {
50 try {
51 MainInfoPage page = new MainInfoPage("main");
52 addPage(page);
53 } catch (Exception e) {
54 throw new RuntimeException("Cannot add page to wizard", e);
55 }
56 setFormTitle(SuiteMsg.personWizardWindowTitle.lead());
57 }
58
59 /**
60 * Called when the user click on 'Finish' in the wizard. The task is then
61 * created and the corresponding session saved.
62 */
63 @Override
64 public boolean performFinish() {
65 String lastName = lastNameT.getText();
66 String firstName = firstNameT.getText();
67 String email = emailT.getText();
68 if (EclipseUiUtils.isEmpty(lastName) || EclipseUiUtils.isEmpty(firstName) || EclipseUiUtils.isEmpty(email)) {
69 CmsFeedback.show(SuiteMsg.allFieldsMustBeSet.lead());
70 return false;
71 } else {
72 UUID uuid = UUID.randomUUID();
73 String shortId = uuid.toString().split("-")[0];
74 String uid = "u" + shortId;
75 HierarchyUnit hu = hierarchyUnit.adapt(HierarchyUnit.class);
76 String username = "uid=" + uid + ",ou=People," + hu.getBase();
77
78 Map<String, Object> properties = new HashMap<>();
79 properties.put(LdapAttr.givenName.name(), firstName);
80 properties.put(LdapAttr.sn.name(), lastName);
81 properties.put(LdapAttr.mail.name(), email);
82 properties.put(LdapAttr.cn.name(), firstName + " " + lastName);
83 properties.put(LdapAttr.employeeNumber.name(), uuid.toString());
84
85 Map<String, Object> credentials = new HashMap<>();
86 CmsUser user = cmsUserManager.createUser(username, properties, credentials);
87
88 Long huGidNumber = hierarchyUnit.get(LdapAttr.gidNumber.qName(), Long.class).orElseThrow();
89 Long nextUserId = SuiteUtils.findNextId(hierarchyUnit, LdapObj.posixAccount.qName());
90 String homeDirectory = "/home/" + uid;
91 Map<String, Object> additionalProperties = new HashMap<>();
92 additionalProperties.put(LdapAttr.uidNumber.name(), nextUserId.toString());
93 additionalProperties.put(LdapAttr.gidNumber.name(), huGidNumber.toString());
94 additionalProperties.put(LdapAttr.homeDirectory.name(), homeDirectory);
95
96 Set<String> objectClasses = new HashSet<>();
97 objectClasses.add(LdapObj.posixAccount.name());
98 cmsUserManager.addObjectClasses(user, objectClasses, additionalProperties);
99 return true;
100 }
101 }
102
103 @Override
104 public boolean performCancel() {
105 return true;
106 }
107
108 @Override
109 public boolean canFinish() {
110 String lastName = lastNameT.getText();
111 String firstName = firstNameT.getText();
112 String email = emailT.getText();
113 if (isEmpty(lastName) || isEmpty(firstName) || isEmpty(email)) {
114 return false;
115 } else
116 return true;
117 }
118
119 protected class MainInfoPage extends SwtGuidedFormPage {
120
121 public MainInfoPage(String pageName) {
122 super(pageName);
123 setTitle(SuiteMsg.personWizardPageTitle.lead());
124 }
125
126 public void createControl(Composite parent) {
127 parent.setLayout(new GridLayout(2, false));
128
129 // FirstName
130 SuiteSwtUtils.createBoldLabel(parent, SuiteMsg.firstName);
131 firstNameT = new Text(parent, SWT.BORDER);
132 // firstNameTxt.setMessage("a first name");
133 firstNameT.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
134
135 // LastName
136 SuiteSwtUtils.createBoldLabel(parent, SuiteMsg.lastName);
137 lastNameT = new Text(parent, SWT.BORDER);
138 // lastNameTxt.setMessage("a last name");
139 lastNameT.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
140
141 SuiteSwtUtils.createBoldLabel(parent, SuiteMsg.email);
142 emailT = new Text(parent, SWT.BORDER);
143 emailT.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
144
145 ModifyListener ml = new ModifyListener() {
146 private static final long serialVersionUID = 1939491923843870844L;
147
148 @Override
149 public void modifyText(ModifyEvent event) {
150 getView().updateButtons();
151 }
152 };
153
154 firstNameT.addModifyListener(ml);
155 lastNameT.addModifyListener(ml);
156 emailT.addModifyListener(ml);
157
158 firstNameT.setFocus();
159 }
160 }
161 }