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=1ec321d6c79833e1482b532573d7e692e8ee4124;hb=1c75ba2f683c41d0e081970758d1fb5b2e91689f;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..1ec321d6c 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,26 +19,34 @@ 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.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.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; import org.osgi.service.useradmin.User; import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; +import org.osgi.service.useradmin.UserAdminListener; /** 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 +56,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(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 +97,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 +116,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 +134,76 @@ 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 implements UserAdminListener { + + private final User user; + + public NameChangeListener(User user) { + this.user = user; + } + + @Override + public void roleChanged(UserAdminEvent event) { + Role changedRole = event.getRole(); + if (changedRole == null || changedRole.equals(user)) + updateEditorTitle(null); + } + } + + class MainInfoListener implements UserAdminListener { + private final AbstractFormPart part; + + public MainInfoListener(AbstractFormPart part) { + this.part = part; + } + + @Override + public void roleChanged(UserAdminEvent event) { + // Rollback + if (event.getRole() == null) + part.markStale(); + } + } + + class GroupChangeListener implements UserAdminListener { + private final AbstractFormPart part; + + public GroupChangeListener(AbstractFormPart part) { + this.part = part; + } + + @Override + public void roleChanged(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;