]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java
Add forgotten "close session on dispose" behaviour. (fix "WARN Unclosed session detec...
[lgpl/argeo-commons.git] / security / plugins / org.argeo.security.ui.admin / src / main / java / org / argeo / security / ui / admin / editors / ArgeoUserEditor.java
index fab34323af2bfd93f5ebd805b14cca6230df46c8..ebc08319e797e3475dbfaef09b348d3b0336d218 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * Copyright (C) 2007-2012 Argeo GmbH
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 package org.argeo.security.ui.admin.editors;
 
 import javax.jcr.Node;
+import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
 import org.argeo.ArgeoException;
-import org.argeo.jcr.ArgeoJcrUtils;
-import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
 import org.argeo.security.UserAdminService;
 import org.argeo.security.jcr.JcrUserDetails;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
@@ -36,19 +37,23 @@ import org.springframework.security.GrantedAuthority;
 
 /** Editor for an Argeo user. */
 public class ArgeoUserEditor extends FormEditor {
-       public final static String ID = "org.argeo.security.ui.admin.adminArgeoUserEditor";
+       public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+                       + ".adminArgeoUserEditor";
 
-       private JcrUserDetails userDetails;
-       private Node userHome;
-       private UserAdminService userAdminService;
+       /* DEPENDENCY INJECTION */
        private Session session;
+       private UserAdminService userAdminService;
+
+       // private Node userHome;
+       private Node userProfile;
+       private JcrUserDetails userDetails;
 
        public void init(IEditorSite site, IEditorInput input)
                        throws PartInitException {
                super.init(site, input);
                String username = ((ArgeoUserEditorInput) getEditorInput())
                                .getUsername();
-               userHome = ArgeoJcrUtils.getUserHome(session, username);
+               userProfile = UserJcrUtils.getUserProfile(session, username);
 
                if (userAdminService.userExists(username)) {
                        userDetails = (JcrUserDetails) userAdminService
@@ -69,8 +74,7 @@ public class ArgeoUserEditor extends FormEditor {
 
        protected void addPages() {
                try {
-                       addPage(new DefaultUserMainPage(this,
-                                       userHome.getNode(ArgeoNames.ARGEO_PROFILE)));
+                       addPage(new DefaultUserMainPage(this, userProfile));
                        addPage(new UserRolesPage(this, userDetails, userAdminService));
                } catch (Exception e) {
                        throw new ArgeoException("Cannot add pages", e);
@@ -109,11 +113,14 @@ public class ArgeoUserEditor extends FormEditor {
 
                userRolesPage.setUserDetails(userDetails);
 
+               // FIXME rather use a refresh command. Fails when called by another
+               // view.
                // refresh users view
                IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench();
                UsersView usersView = (UsersView) iw.getActiveWorkbenchWindow()
                                .getActivePage().findView(UsersView.ID);
-               usersView.refresh();
+               if (usersView != null)
+                       usersView.refresh();
        }
 
        @Override
@@ -130,11 +137,22 @@ public class ArgeoUserEditor extends FormEditor {
                userRolesPage.refresh();
        }
 
+       @Override
+       public void dispose() {
+               JcrUtils.logoutQuietly(session);
+               super.dispose();
+       }
+       
+       /* DEPENDENCY INJECTION */
        public void setUserAdminService(UserAdminService userAdminService) {
                this.userAdminService = userAdminService;
        }
-
-       public void setSession(Session session) {
-               this.session = session;
+       
+       public void setRepository(Repository repository) {
+               try {
+                       session = repository.login();
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Unable to initialise local session", re);
+               }
        }
 }