X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fplugins%2Forg.argeo.security.ui.admin%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Feditors%2FArgeoUserEditor.java;h=b511e683c5242cea0188f71e2988089791ddc740;hb=fb4f7c451ea7d9025f7cf7fe032020f229df794a;hp=9b82e8783985325f4dfd3979e52125d035308a47;hpb=183b34a3f8c0bce78bed916d413934f20522818c;p=lgpl%2Fargeo-commons.git diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java index 9b82e8783..b511e683c 100644 --- a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java +++ b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java @@ -1,13 +1,19 @@ package org.argeo.security.ui.admin.editors; +import javax.jcr.Node; +import javax.jcr.Session; + import org.argeo.ArgeoException; -import org.argeo.security.ArgeoUser; -import org.argeo.security.SimpleArgeoUser; +import org.argeo.jcr.ArgeoNames; +import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.nature.SimpleUserNature; +import org.argeo.security.jcr.JcrUserDetails; +import org.argeo.security.ui.admin.SecurityAdminPlugin; +import org.argeo.security.ui.admin.views.UsersView; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PartInitException; import org.eclipse.ui.forms.editor.FormEditor; @@ -15,30 +21,32 @@ import org.eclipse.ui.forms.editor.FormEditor; public class ArgeoUserEditor extends FormEditor { public final static String ID = "org.argeo.security.ui.admin.adminArgeoUserEditor"; - private ArgeoUser user; + private JcrUserDetails userDetails; + private Node userHome; private UserAdminService userAdminService; + private Session session; public void init(IEditorSite site, IEditorInput input) throws PartInitException { super.init(site, input); String username = ((ArgeoUserEditorInput) getEditorInput()) .getUsername(); - if (username == null) {// new - user = new SimpleArgeoUser(); - user.getUserNatures().put(SimpleUserNature.TYPE, - new SimpleUserNature()); - } else - user = userAdminService.getUser(username); + userHome = JcrUtils.getUserHome(session, username); + + userDetails = (JcrUserDetails) userAdminService + .loadUserByUsername(username); + this.setPartProperty("name", username != null ? username : ""); setPartName(username != null ? username : ""); } protected void addPages() { try { - addPage(new DefaultUserMainPage(this, userAdminService, user)); - - } catch (PartInitException e) { - throw new ArgeoException("Not able to add page ", e); + addPage(new DefaultUserMainPage(this, + userHome.getNode(ArgeoNames.ARGEO_PROFILE))); + addPage(new UserRolesPage(this, userDetails, userAdminService)); + } catch (Exception e) { + throw new ArgeoException("Cannot add pages", e); } } @@ -46,15 +54,39 @@ public class ArgeoUserEditor extends FormEditor { public void doSave(IProgressMonitor monitor) { // list pages // TODO: make it more generic - findPage(DefaultUserMainPage.ID).doSave(monitor); + DefaultUserMainPage defaultUserMainPage = (DefaultUserMainPage) findPage(DefaultUserMainPage.ID); + if (defaultUserMainPage.isDirty()) { + defaultUserMainPage.doSave(monitor); + String newPassword = defaultUserMainPage.getNewPassword(); + defaultUserMainPage.resetNewPassword(); + if (newPassword != null) + userDetails = userDetails.cloneWithNewPassword(newPassword); + } - if (userAdminService.userExists(user.getUsername())) - userAdminService.updateUser(user); - else { - userAdminService.newUser(user); - setPartName(user.getUsername()); + UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); + if (userRolesPage.isDirty()) { + userRolesPage.doSave(monitor); + userDetails = userDetails.cloneWithNewRoles(userRolesPage + .getRoles()); } + + userAdminService.updateUser(userDetails); + + // if (userAdminService.userExists(user.getUsername())) + // userAdminService.updateUser(user); + // else { + // userAdminService.newUser(user); + // setPartName(user.getUsername()); + // } firePropertyChange(PROP_DIRTY); + + userRolesPage.setUserDetails(userDetails); + + // refresh users view + IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench(); + UsersView usersView = (UsersView) iw.getActiveWorkbenchWindow() + .getActivePage().findView(UsersView.ID); + usersView.refresh(); } @Override @@ -66,7 +98,16 @@ public class ArgeoUserEditor extends FormEditor { return false; } + public void refresh() { + UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); + userRolesPage.refresh(); + } + public void setUserAdminService(UserAdminService userAdminService) { this.userAdminService = userAdminService; } + + public void setSession(Session session) { + this.session = session; + } }