*/
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;
+ ".userEditor";
/* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
private UserAdmin userAdmin;
// Context
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);
}
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);
@Override
public void doSave(IProgressMonitor monitor) {
+ userAdminWrapper.beginTransactionIfNeeded();
commitPages(true);
firePropertyChange(PROP_DIRTY);
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_REMOVED, user));
}
@Override
}
/* 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