X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Finternal%2Fcommands%2FNewGroup.java;h=bc90a46d7a9b77a6dc669046b782cfd5d038e4bc;hb=f0be5ec381492eff23d4576ee4122734af4ad877;hp=b50f67f1eb4ea05701a8249f47b8649d79f15622;hpb=732542c8de267ed7d6cbb8c66b84cc90c8ad22d7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java index b50f67f1e..bc90a46d7 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java @@ -16,13 +16,15 @@ 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; @@ -35,13 +37,13 @@ import org.eclipse.swt.events.ModifyEvent; 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. */ @@ -50,18 +52,12 @@ public class NewGroup extends AbstractHandler { /* 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; } @@ -73,6 +69,7 @@ public class NewGroup extends AbstractHandler { // End user fields private Text dNameTxt, commonNameTxt, descriptionTxt; + private Combo baseDnCmb; public NewGroupWizard() { } @@ -81,9 +78,6 @@ public class NewGroup extends AbstractHandler { public void addPages() { mainGroupInfo = new MainGroupInfoWizardPage(); addPage(mainGroupInfo); - - setWindowTitle("Create a new group"); - // mainGroupInfo.setMessage(message, WizardPage.WARNING); } @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -94,12 +88,12 @@ public class NewGroup extends AbstractHandler { 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; @@ -116,7 +110,8 @@ public class NewGroup extends AbstractHandler { 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 @@ -124,8 +119,23 @@ public class NewGroup extends AbstractHandler { 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() { @@ -177,7 +187,8 @@ public class NewGroup extends AbstractHandler { 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; @@ -187,14 +198,40 @@ public class NewGroup extends AbstractHandler { 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 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