X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Finternal%2Fparts%2FUserEditor.java;h=715d343105f302c580b0d6e26f98176775aaf85a;hb=f782539a48e6d4779767c5a511c25df1b9078667;hp=90ea372bd5e19384752777e7e5eb66cc26b45314;hpb=732542c8de267ed7d6cbb8c66b84cc90c8ad22d7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserEditor.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserEditor.java index 90ea372bd..715d34310 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserEditor.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserEditor.java @@ -19,13 +19,20 @@ import java.util.ArrayList; import java.util.List; import org.argeo.ArgeoException; +import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.osgi.useradmin.LdifName; import org.argeo.security.ui.admin.SecurityAdminPlugin; -import org.argeo.security.ui.admin.internal.UserAdminConstants; +import org.argeo.security.ui.admin.internal.UiUserAdminListener; import org.argeo.security.ui.admin.internal.UserAdminWrapper; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.forms.AbstractFormPart; import org.eclipse.ui.forms.editor.FormEditor; import org.osgi.service.useradmin.Authorization; import org.osgi.service.useradmin.Role; @@ -34,11 +41,13 @@ import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; /** Editor for a user, might be a user or a group. */ -public class UserEditor extends FormEditor implements UserAdminConstants { +public class UserEditor extends FormEditor { private static final long serialVersionUID = 8357851520380820241L; - public final static String ID = SecurityAdminPlugin.PLUGIN_ID + public final static String USER_EDITOR_ID = SecurityAdminPlugin.PLUGIN_ID + ".userEditor"; + public final static String GROUP_EDITOR_ID = SecurityAdminPlugin.PLUGIN_ID + + ".groupEditor"; /* DEPENDENCY INJECTION */ private UserAdminWrapper userAdminWrapper; @@ -48,26 +57,21 @@ public class UserEditor extends FormEditor implements UserAdminConstants { private User user; private String username; + private NameChangeListener listener; + public void init(IEditorSite site, IEditorInput input) throws PartInitException { super.init(site, input); username = ((UserEditorInput) getEditorInput()).getUsername(); user = (User) userAdmin.getRole(username); - String commonName = getProperty(KEY_CN); - - setPartName(commonName != null ? commonName : "username"); - - // TODO: following has been disabled because it causes NPE after a - // login/logout on RAP - // Image titleIcon = user.getType() == Role.GROUP ? - // SecurityAdminImages.ICON_GROUP - // : SecurityAdminImages.ICON_USER; - // setTitleImage(titleIcon); + listener = new NameChangeListener(site.getShell().getDisplay(), user); + userAdminWrapper.addListener(listener); + updateEditorTitle(null); } /** - * returns the list of all authorisation for the given user or of the + * returns the list of all authorization for the given user or of the * current displayed user if parameter is null */ protected List getFlatGroups(User aUser) { @@ -94,6 +98,11 @@ public class UserEditor extends FormEditor implements UserAdminConstants { } void updateEditorTitle(String title) { + if (title == null) { + String commonName = UserAdminUtils.getProperty(user, + LdifName.cn.name()); + title = "".equals(commonName) ? user.getName() : commonName; + } setPartName(title); } @@ -108,23 +117,6 @@ public class UserEditor extends FormEditor implements UserAdminConstants { } } - protected String getProperty(String key) { - Object obj = user.getProperties().get(key); - if (obj != null) - return (String) obj; - else - return ""; - } - - /** - * Updates the property in the working copy. The transaction must be - * explicitly committed to persist the update. - */ - @SuppressWarnings("unchecked") - protected void setProperty(String key, String value) { - user.getProperties().put(key, value); - } - @Override public void doSave(IProgressMonitor monitor) { userAdminWrapper.beginTransactionIfNeeded(); @@ -143,15 +135,79 @@ public class UserEditor extends FormEditor implements UserAdminConstants { return false; } - public void refresh() { - - } - @Override public void dispose() { + userAdminWrapper.removeListener(listener); super.dispose(); } + // CONTROLERS FOR THIS EDITOR AND ITS PAGES + + private class NameChangeListener extends UiUserAdminListener { + + private final User user; + + public NameChangeListener(Display display, User user) { + super(display); + this.user = user; + } + + @Override + public void roleChangedToUiThread(UserAdminEvent event) { + Role changedRole = event.getRole(); + if (changedRole == null || changedRole.equals(user)) + updateEditorTitle(null); + } + } + + class MainInfoListener extends UiUserAdminListener { + private final AbstractFormPart part; + + public MainInfoListener(Display display, AbstractFormPart part) { + super(display); + this.part = part; + } + + @Override + public void roleChangedToUiThread(UserAdminEvent event) { + // Rollback + if (event.getRole() == null) + part.markStale(); + } + } + + class GroupChangeListener extends UiUserAdminListener { + private final AbstractFormPart part; + + public GroupChangeListener(Display display, AbstractFormPart part) { + super(display); + this.part = part; + } + + @Override + public void roleChangedToUiThread(UserAdminEvent event) { + // always mark as stale + part.markStale(); + } + } + + /** Registers a listener that will notify this part */ + class FormPartML implements ModifyListener { + private static final long serialVersionUID = 6299808129505381333L; + private AbstractFormPart formPart; + + public FormPartML(AbstractFormPart generalPart) { + this.formPart = generalPart; + } + + public void modifyText(ModifyEvent e) { + // Discard event when the control does not have the focus, typically + // to avoid all editors being marked as dirty during a Rollback + if (((Control) e.widget).isFocusControl()) + formPart.markDirty(); + } + } + /* DEPENDENCY INJECTION */ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) { this.userAdminWrapper = userAdminWrapper;