]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java
Introduce a UserAdmin wrapper service
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / editors / UserEditor.java
index 7518b8084aaf90892e0117f0ece1412b29f3d0e5..ed39f30f282cac4cf776f98c90ab2a3e1f856adb 100644 (file)
  */
 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.SecurityAdminImages;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
-import org.argeo.security.ui.admin.UserAdminConstants;
+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 an Argeo user. */
+/** Editor for a user, might be a user or a group. */
 public class UserEditor extends FormEditor implements UserAdminConstants {
        private static final long serialVersionUID = 8357851520380820241L;
 
@@ -36,6 +41,7 @@ public class UserEditor extends FormEditor implements UserAdminConstants {
                        + ".userEditor";
 
        /* DEPENDENCY INJECTION */
+       private UserAdminWrapper userAdminWrapper;
        private UserAdmin userAdmin;
 
        // Context
@@ -49,26 +55,54 @@ 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<User> getFlatGroups(User aUser) {
+               Authorization currAuth;
+               if (aUser == null)
+                       currAuth = userAdmin.getAuthorization(this.user);
+               else
+                       currAuth = userAdmin.getAuthorization(aUser);
+
+               String[] roles = currAuth.getRoles();
+
+               List<User> groups = new ArrayList<User>();
+               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 */
+       protected User getDisplayedUser() {
+               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);
                }
@@ -82,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);
@@ -90,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
@@ -113,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