X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Feditors%2FUserEditor.java;h=ed39f30f282cac4cf776f98c90ab2a3e1f856adb;hb=cd2948994931fcb43283ffb30c1058d5860dec68;hp=a811f86216b0eaf7ab2d77e244f854908eaaed6e;hpb=94c54deff25c97eb8143594c15c2a3dea06c5811;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java index a811f8621..ed39f30f2 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java @@ -15,17 +15,23 @@ */ package org.argeo.security.ui.admin.editors; +import java.util.ArrayList; +import java.util.List; + import org.argeo.ArgeoException; 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.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; 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; /** Editor for a user, might be a user or a group. */ public class UserEditor extends FormEditor implements UserAdminConstants { @@ -35,6 +41,7 @@ public class UserEditor extends FormEditor implements UserAdminConstants { + ".userEditor"; /* DEPENDENCY INJECTION */ + private UserAdminWrapper userAdminWrapper; private UserAdmin userAdmin; // Context @@ -48,14 +55,37 @@ public class UserEditor extends FormEditor implements UserAdminConstants { user = (User) userAdmin.getRole(username); String commonName = getProperty(KEY_CN); - // this.setPartProperty("name", commonName != null ? commonName - // : "username"); - // if (user.getType() == Role.GROUP) { - // this.setPartProperty("icon", "icons/users.gif"); - // firePartPropertyChanged("icon", "icons/user.gif", "icons/users.gif"); - // } 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); + } + + /** + * returns the list of all authorisation for the given user or of the + * current displayed user if parameter is null + */ + protected List getFlatGroups(User aUser) { + Authorization currAuth; + if (aUser == null) + currAuth = userAdmin.getAuthorization(this.user); + else + currAuth = userAdmin.getAuthorization(aUser); + + String[] roles = currAuth.getRoles(); + + List groups = new ArrayList(); + for (String roleStr : roles) { + User currRole = (User) userAdmin.getRole(roleStr); + if (!groups.contains(currRole)) + groups.add(currRole); + } + return groups; } /** Exposes the user (or group) that is displayed by the current editor */ @@ -63,14 +93,16 @@ public class UserEditor extends FormEditor implements UserAdminConstants { return user; } + void updateEditorTitle(String title) { + setPartName(title); + } + protected void addPages() { try { - if (user.getType() == Role.GROUP) - addPage(new GroupMainPage(this, userAdmin)); + addPage(new GroupMainPage(this, userAdminWrapper)); else - addPage(new UserMainPage(this)); - + addPage(new UserMainPage(this, userAdminWrapper)); } catch (Exception e) { throw new ArgeoException("Cannot add pages", e); } @@ -84,7 +116,10 @@ public class UserEditor extends FormEditor implements UserAdminConstants { return ""; } - /** The property is directly updated!!! */ + /** + * 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); @@ -92,8 +127,11 @@ public class UserEditor extends FormEditor implements UserAdminConstants { @Override public void doSave(IProgressMonitor monitor) { + userAdminWrapper.beginTransactionIfNeeded(); commitPages(true); firePropertyChange(PROP_DIRTY); + userAdminWrapper.notifyListeners(new UserAdminEvent(null, + UserAdminEvent.ROLE_REMOVED, user)); } @Override @@ -115,7 +153,8 @@ public class UserEditor extends FormEditor implements UserAdminConstants { } /* DEPENDENCY INJECTION */ - public void setUserAdmin(UserAdmin userAdmin) { - this.userAdmin = userAdmin; + public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) { + this.userAdminWrapper = userAdminWrapper; + this.userAdmin = userAdminWrapper.getUserAdmin(); } } \ No newline at end of file