1 package org
.argeo
.app
.ui
.people
;
3 import static org
.argeo
.eclipse
.ui
.EclipseUiUtils
.isEmpty
;
5 import java
.util
.HashMap
;
6 import java
.util
.HashSet
;
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
.ui
.SuiteUiUtils
;
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
;
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
;
37 protected Text lastNameT
;
38 protected Text firstNameT
;
39 protected Text emailT
;
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
;
49 public void addPages() {
51 MainInfoPage page
= new MainInfoPage("main");
53 } catch (Exception e
) {
54 throw new RuntimeException("Cannot add page to wizard", e
);
56 setFormTitle(SuiteMsg
.personWizardWindowTitle
.lead());
60 * Called when the user click on 'Finish' in the wizard. The task is then
61 * created and the corresponding session saved.
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());
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();
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());
85 Map
<String
, Object
> credentials
= new HashMap
<>();
86 CmsUser user
= cmsUserManager
.createUser(username
, properties
, credentials
);
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
);
96 Set
<String
> objectClasses
= new HashSet
<>();
97 objectClasses
.add(LdapObj
.posixAccount
.name());
98 cmsUserManager
.addObjectClasses(user
, objectClasses
, additionalProperties
);
104 public boolean performCancel() {
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
)) {
119 protected class MainInfoPage
extends SwtGuidedFormPage
{
121 public MainInfoPage(String pageName
) {
123 setTitle(SuiteMsg
.personWizardPageTitle
.lead());
126 public void createControl(Composite parent
) {
127 parent
.setLayout(new GridLayout(2, false));
130 SuiteUiUtils
.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));
136 SuiteUiUtils
.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));
141 SuiteUiUtils
.createBoldLabel(parent
, SuiteMsg
.email
);
142 emailT
= new Text(parent
, SWT
.BORDER
);
143 emailT
.setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
145 ModifyListener ml
= new ModifyListener() {
146 private static final long serialVersionUID
= 1939491923843870844L;
149 public void modifyText(ModifyEvent event
) {
150 getView().updateButtons();
154 firstNameT
.addModifyListener(ml
);
155 lastNameT
.addModifyListener(ml
);
156 emailT
.addModifyListener(ml
);
158 firstNameT
.setFocus();