*/
package org.argeo.security.ui.admin.editors;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.transaction.UserTransaction;
+
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.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;
-/** 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;
/* DEPENDENCY INJECTION */
private UserAdmin userAdmin;
+ private UserTransaction userTransaction;
// Context
private User user;
// firePartPropertyChanged("icon", "icons/user.gif", "icons/users.gif");
// }
setPartName(commonName != null ? commonName : "username");
+ setTitleImage(user.getType() == Role.GROUP ? SecurityAdminImages.ICON_GROUP
+ : SecurityAdminImages.ICON_USER);
+ }
+
+ protected List<User> getFlatGroups() {
+ Authorization currAuth = userAdmin.getAuthorization(user);
+ 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));
else
- addPage(new UserMainPage(this));
-
-
-
+ addPage(new UserMainPage(this, userAdmin));
} catch (Exception e) {
throw new ArgeoException("Cannot add pages", e);
}
public void doSave(IProgressMonitor monitor) {
commitPages(true);
firePropertyChange(PROP_DIRTY);
+ // FIXME transaction should be managed at a higher level
+ // try {
+ // userTransaction.commit();
+ // } catch (Exception e) {
+ // throw new ArgeoException("Could not save user editor", e);
+ // }
}
@Override
public void setUserAdmin(UserAdmin userAdmin) {
this.userAdmin = userAdmin;
}
+
+ public void setUserTransaction(UserTransaction userTransaction) {
+ this.userTransaction = userTransaction;
+ }
+
}
\ No newline at end of file