package org.argeo.security.ui.admin.internal.commands;
import java.util.Dictionary;
+import java.util.List;
+import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
import org.argeo.jcr.ArgeoNames;
+import org.argeo.osgi.useradmin.LdifName;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.handlers.HandlerUtil;
import org.osgi.service.useradmin.Group;
import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.UserAdmin;
import org.osgi.service.useradmin.UserAdminEvent;
/** Create a new group. */
/* DEPENDENCY INJECTION */
private UserAdminWrapper userAdminWrapper;
- private UserAdmin userAdmin;
-
- // TODO implement a dynamic choice of the base dn
- private String getDn(String cn) {
- return "cn=" + cn + ",dc=example,dc=com";
- }
public Object execute(ExecutionEvent event) throws ExecutionException {
NewGroupWizard newGroupWizard = new NewGroupWizard();
+ newGroupWizard.setWindowTitle("Group creation");
WizardDialog dialog = new WizardDialog(
HandlerUtil.getActiveShell(event), newGroupWizard);
- dialog.setTitle("Create a new group");
dialog.open();
return null;
}
// End user fields
private Text dNameTxt, commonNameTxt, descriptionTxt;
+ private Combo baseDnCmb;
public NewGroupWizard() {
}
public void addPages() {
mainGroupInfo = new MainGroupInfoWizardPage();
addPage(mainGroupInfo);
-
- setWindowTitle("Create a new group");
- // mainGroupInfo.setMessage(message, WizardPage.WARNING);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
String commonName = commonNameTxt.getText();
try {
userAdminWrapper.beginTransactionIfNeeded();
- Group group = (Group) userAdmin.createRole(getDn(commonName),
- Role.GROUP);
+ Group group = (Group) userAdminWrapper.getUserAdmin()
+ .createRole(getDn(commonName), Role.GROUP);
Dictionary props = group.getProperties();
String descStr = descriptionTxt.getText();
if (UiAdminUtils.notNull(descStr))
- props.put(UserAdminConstants.KEY_DESC, descStr);
+ props.put(LdifName.description.name(), descStr);
userAdminWrapper.notifyListeners(new UserAdminEvent(null,
UserAdminEvent.ROLE_CREATED, group));
return true;
public MainGroupInfoWizardPage() {
super("Main");
setTitle("General information");
- setMessage("Please provide a common name and a free description");
+ setMessage("Please choose a domain, provide a common name "
+ + "and a free description");
}
@Override
Composite bodyCmp = new Composite(parent, SWT.NONE);
bodyCmp.setLayout(new GridLayout(2, false));
dNameTxt = EclipseUiUtils.createGridLT(bodyCmp,
- "Distinguished name", this);
+ "Distinguished name"); // Read-only -> no listener
dNameTxt.setEnabled(false);
+
+ baseDnCmb = createGridLC(bodyCmp, "Base DN");
+ // Initialise before adding the listener top avoid NPE
+ initialiseDnCmb(baseDnCmb);
+ baseDnCmb.addModifyListener(this);
+ baseDnCmb.addModifyListener(new ModifyListener() {
+ private static final long serialVersionUID = -1435351236582736843L;
+
+ @Override
+ public void modifyText(ModifyEvent event) {
+ String name = commonNameTxt.getText();
+ dNameTxt.setText(getDn(name));
+ }
+ });
+
commonNameTxt = EclipseUiUtils.createGridLT(bodyCmp,
"Common name", this);
commonNameTxt.addModifyListener(new ModifyListener() {
if (name.trim().equals(""))
return "Common name must not be empty";
- Role role = userAdmin.getRole(getDn(name));
+ Role role = userAdminWrapper.getUserAdmin()
+ .getRole(getDn(name));
if (role != null)
return "Group " + name + " already exists";
return null;
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible)
- commonNameTxt.setFocus();
+ if (baseDnCmb.getSelectionIndex() == -1)
+ baseDnCmb.setFocus();
+ else
+ commonNameTxt.setFocus();
}
}
+
+ private String getDn(String cn) {
+ return "cn=" + cn + ",ou=groups," + baseDnCmb.getText();
+ }
+
+ private void initialiseDnCmb(Combo combo) {
+ List<String> dns = userAdminWrapper.getKnownBaseDns(true);
+ if (dns.isEmpty())
+ throw new ArgeoException(
+ "No writable base dn found. Cannot create user");
+ combo.setItems(dns.toArray(new String[0]));
+ if (dns.size() == 1)
+ combo.select(0);
+ }
+
+ }
+
+ private Combo createGridLC(Composite parent, String label) {
+ Label lbl = new Label(parent, SWT.LEAD);
+ lbl.setText(label);
+ lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+ Combo combo = new Combo(parent, SWT.LEAD | SWT.BORDER | SWT.READ_ONLY);
+ combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+ return combo;
}
/* DEPENDENCY INJECTION */
public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
this.userAdminWrapper = userAdminWrapper;
- this.userAdmin = userAdminWrapper.getUserAdmin();
}
}
\ No newline at end of file