Remove draft implementation of a user management UI in the CMS that wae based on...
authorBruno Sinou <bsinou@argeo.org>
Mon, 21 Sep 2015 20:36:15 +0000 (20:36 +0000)
committerBruno Sinou <bsinou@argeo.org>
Mon, 21 Sep 2015 20:36:15 +0000 (20:36 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8428 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.cms/src/org/argeo/cms/users/MainUserInfoWizardPage.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/NewUserWizard.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/UserCreationWizard.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/UserPage.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/UserPart.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/UserRolesPart.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/UserStyles.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/UserViewer.java [deleted file]
org.argeo.cms/src/org/argeo/cms/users/UsersPage.java [deleted file]

diff --git a/org.argeo.cms/src/org/argeo/cms/users/MainUserInfoWizardPage.java b/org.argeo.cms/src/org/argeo/cms/users/MainUserInfoWizardPage.java
deleted file mode 100644 (file)
index fc127ad..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.cms.users;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.UserAdminService;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Text;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-
-public class MainUserInfoWizardPage extends WizardPage implements
-               ModifyListener, ArgeoNames {
-       private static final long serialVersionUID = -3367329974808698649L;
-       private Text username, firstName, lastName, primaryEmail, password1,
-                       password2;
-       private UserAdminService userAdminService;
-
-       public MainUserInfoWizardPage(UserAdminService userAdminService) {
-               super("Main");
-               this.userAdminService = userAdminService;
-               setTitle("Required Information");
-       }
-
-       @Override
-       public void createControl(Composite parent) {
-               Composite composite = new Composite(parent, SWT.NONE);
-               composite.setLayout(new GridLayout(2, false));
-               username = EclipseUiUtils.createGridLT(composite, "Username", this);
-               primaryEmail = EclipseUiUtils.createGridLT(composite, "Email", this);
-               firstName = EclipseUiUtils.createGridLT(composite, "First name", this);
-               lastName = EclipseUiUtils.createGridLT(composite, "Last name", this);
-               password1 = EclipseUiUtils.createGridLP(composite, "Password", this);
-               password2 = EclipseUiUtils.createGridLP(composite, "Repeat password",
-                               this);
-               setControl(composite);
-
-               // Initialize buttons
-               setPageComplete(false);
-               getContainer().updateButtons();
-       }
-
-       @Override
-       public void modifyText(ModifyEvent event) {
-               String message = checkComplete();
-               if (message != null) {
-                       setMessage(message, WizardPage.ERROR);
-                       setPageComplete(false);
-               } else {
-                       setMessage("Complete", WizardPage.INFORMATION);
-                       setPageComplete(true);
-               }
-               getContainer().updateButtons();
-       }
-
-       /** @return error message or null if complete */
-       protected String checkComplete() {
-               // if (!username.getText().matches(UserAdminService.USERNAME_PATTERN))
-               // return
-               // "Wrong user name format, should be lower case, between 3 and 64 characters with only '_' an '@' as acceptable special character.";
-
-               if (username.getText().trim().equals(""))
-                       return "User name must not be empty";
-
-               try {
-                       UserDetails userDetails = userAdminService
-                                       .loadUserByUsername(username.getText());
-                       return "User " + userDetails.getUsername() + " already exists";
-               } catch (UsernameNotFoundException e) {
-                       // silent
-               }
-               if (!primaryEmail.getText().matches(UserAdminService.EMAIL_PATTERN))
-                       return "Not a valid email address";
-               if (firstName.getText().trim().equals(""))
-                       return "Specify a first name";
-               if (lastName.getText().trim().equals(""))
-                       return "Specify a last name";
-               if (password1.getText().trim().equals(""))
-                       return "Specify a password";
-               if (password2.getText().trim().equals(""))
-                       return "Repeat the password";
-               if (!password2.getText().equals(password1.getText()))
-                       return "Passwords are different";
-               return null;
-       }
-
-       public String getUsername() {
-               return username.getText();
-       }
-
-       public char[] getPassword() {
-               return password1.getTextChars();
-       }
-
-       public void mapToProfileNode(Node up) {
-               try {
-                       up.setProperty(ARGEO_PRIMARY_EMAIL, primaryEmail.getText());
-                       up.setProperty(ARGEO_FIRST_NAME, firstName.getText());
-                       up.setProperty(ARGEO_LAST_NAME, lastName.getText());
-
-                       // derived values
-                       // TODO add wizard pages to do it
-                       up.setProperty(Property.JCR_TITLE, firstName.getText() + " "
-                                       + lastName.getText());
-                       up.setProperty(Property.JCR_DESCRIPTION, "");
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot map to " + up, e);
-               }
-       }
-}
diff --git a/org.argeo.cms/src/org/argeo/cms/users/NewUserWizard.java b/org.argeo.cms/src/org/argeo/cms/users/NewUserWizard.java
deleted file mode 100644 (file)
index ca81749..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.cms.users;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
-import org.argeo.jcr.JcrUtils;
-import org.argeo.jcr.UserJcrUtils;
-import org.argeo.security.UserAdminService;
-import org.argeo.security.jcr.NewUserDetails;
-import org.eclipse.jface.wizard.Wizard;
-
-/** Wizard to create a new user */
-public class NewUserWizard extends Wizard {
-       private final static Log log = LogFactory.getLog(NewUserWizard.class);
-       private Session session;
-       private UserAdminService userAdminService;
-       // private JcrSecurityModel jcrSecurityModel;
-
-       // pages
-       private MainUserInfoWizardPage mainUserInfo;
-
-       public NewUserWizard(Session session, UserAdminService userAdminService) {
-               this.session = session;
-               this.userAdminService = userAdminService;
-               // this.jcrSecurityModel = jcrSecurityModel;
-       }
-
-       @Override
-       public void addPages() {
-               mainUserInfo = new MainUserInfoWizardPage(userAdminService);
-               addPage(mainUserInfo);
-       }
-
-       @Override
-       public boolean performFinish() {
-               if (!canFinish())
-                       return false;
-
-               String username = mainUserInfo.getUsername();
-               try {
-                       // Node userProfile = SecurityJcrUtils.createUserProfile(session,
-                       // username);
-                       // Node userProfile = jcrSecurityModel.sync(session, username,
-                       // null);
-                       // session.getWorkspace().getVersionManager()
-                       // .checkout(userProfile.getPath());
-                       // mainUserInfo.mapToProfileNode(userProfile);
-                       char[] password = mainUserInfo.getPassword();
-                       // TODO add roles
-                       NewUserDetails jcrUserDetails = new NewUserDetails(username,
-                                       password) {
-                               private static final long serialVersionUID = 7480071525603380742L;
-
-                               @Override
-                               public void mapToProfileNode(Node userProfile)
-                                               throws RepositoryException {
-                                       mainUserInfo.mapToProfileNode(userProfile);
-                               }
-                       };
-                       // session.save();
-                       // session.getWorkspace().getVersionManager()
-                       // .checkin(userProfile.getPath());
-                       userAdminService.createUser(jcrUserDetails);
-                       return true;
-               } catch (Exception e) {
-                       JcrUtils.discardQuietly(session);
-                       Node userHome = UserJcrUtils.getUserHome(session, username);
-                       if (userHome != null) {
-                               try {
-                                       userHome.remove();
-                                       session.save();
-                               } catch (RepositoryException e1) {
-                                       JcrUtils.discardQuietly(session);
-                                       log.warn("Error when trying to clean up failed new user "
-                                                       + username, e1);
-                               }
-                       }
-                       ErrorFeedback.show("Cannot create new user " + username, e);
-                       return false;
-               }
-       }
-
-       public void setSession(Session session) {
-               this.session = session;
-       }
-
-}
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserCreationWizard.java b/org.argeo.cms/src/org/argeo/cms/users/UserCreationWizard.java
deleted file mode 100644 (file)
index 6ffd224..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.cms.users;
-
-import java.util.ArrayList;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
-import org.argeo.cms.internal.auth.JcrSecurityModel;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-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.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Text;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-
-/** Wizard to create a new user */
-@Deprecated
-class UserCreationWizard extends Wizard {
-       private final static Log log = LogFactory.getLog(UserCreationWizard.class);
-       private Session session;
-       private UserAdminService userAdminService;
-       private JcrSecurityModel jcrSecurityModel;
-
-       // pages
-       private MainUserInfoWizardPage mainUserInfo;
-
-       public UserCreationWizard(Session session,
-                       UserAdminService userAdminService, JcrSecurityModel jcrSecurityModel) {
-               this.session = session;
-               this.userAdminService = userAdminService;
-               this.jcrSecurityModel = jcrSecurityModel;
-       }
-
-       @Override
-       public void addPages() {
-               mainUserInfo = new MainUserInfoWizardPage(userAdminService);
-               addPage(mainUserInfo);
-       }
-
-       @Override
-       public boolean performFinish() {
-               if (!canFinish())
-                       return false;
-
-               String username = mainUserInfo.getUsername();
-               try {
-                       Node userProfile = jcrSecurityModel.sync(session, username, null);
-                       session.getWorkspace().getVersionManager()
-                                       .checkout(userProfile.getPath());
-                       mainUserInfo.mapToProfileNode(userProfile);
-                       String password = mainUserInfo.getPassword();
-                       // TODO add roles
-                       JcrUserDetails jcrUserDetails = new JcrUserDetails(userProfile,
-                                       password, new ArrayList<GrantedAuthority>());
-                       session.save();
-                       session.getWorkspace().getVersionManager()
-                                       .checkin(userProfile.getPath());
-                       userAdminService.createUser(jcrUserDetails);
-                       return true;
-               } catch (Exception e) {
-                       JcrUtils.discardQuietly(session);
-                       Node userHome = UserJcrUtils.getUserHome(session, username);
-                       if (userHome != null) {
-                               try {
-                                       userHome.remove();
-                                       session.save();
-                               } catch (RepositoryException e1) {
-                                       JcrUtils.discardQuietly(session);
-                                       log.warn("Error when trying to clean up failed new user "
-                                                       + username, e1);
-                               }
-                       }
-                       // FIXME re-get ErrorFeedback dialog after single sourcing
-                       // refactoring
-                       MessageDialog.openError(getShell(), "Error",
-                                       "Cannot create new user " + username);
-                       log.error("Cannot create new user " + username);
-                       e.printStackTrace();
-                       return false;
-               }
-       }
-
-       /** First page, collect all main info and check their validity */
-       protected class MainUserInfoWizardPage extends WizardPage implements
-                       ModifyListener, ArgeoNames {
-               private static final long serialVersionUID = -3367329974808698649L;
-               private Text username, firstName, lastName, primaryEmail, password1,
-                               password2;
-               private UserAdminService userAdminService;
-
-               public MainUserInfoWizardPage(UserAdminService userAdminService) {
-                       super("Main");
-                       this.userAdminService = userAdminService;
-                       setTitle("Required Information");
-               }
-
-               @Override
-               public void createControl(Composite parent) {
-                       Composite composite = new Composite(parent, SWT.NONE);
-                       composite.setLayout(new GridLayout(2, false));
-                       username = EclipseUiUtils.createGridLT(composite, "Username", this);
-                       primaryEmail = EclipseUiUtils
-                                       .createGridLT(composite, "Email", this);
-                       firstName = EclipseUiUtils.createGridLT(composite, "First name",
-                                       this);
-                       lastName = EclipseUiUtils
-                                       .createGridLT(composite, "Last name", this);
-                       password1 = EclipseUiUtils
-                                       .createGridLP(composite, "Password", this);
-                       password2 = EclipseUiUtils.createGridLP(composite,
-                                       "Repeat password", this);
-                       setControl(composite);
-
-                       // Initialize buttons
-                       setPageComplete(false);
-                       getContainer().updateButtons();
-               }
-
-               @Override
-               public void modifyText(ModifyEvent event) {
-                       String message = checkComplete();
-                       if (message != null) {
-                               setMessage(message, WizardPage.ERROR);
-                               setPageComplete(false);
-                       } else {
-                               setMessage("Complete", WizardPage.INFORMATION);
-                               setPageComplete(true);
-                       }
-                       getContainer().updateButtons();
-               }
-
-               /** @return error message or null if complete */
-               protected String checkComplete() {
-                       // if
-                       // (!username.getText().matches(UserAdminService.USERNAME_PATTERN))
-                       // return
-                       // "Wrong user name format, should be lower case, between 3 and 64 characters with only '_' an '@' as acceptable special character.";
-
-                       if (username.getText().trim().equals(""))
-                               return "User name must not be empty";
-
-                       try {
-                               UserDetails userDetails = userAdminService
-                                               .loadUserByUsername(username.getText());
-                               return "User " + userDetails.getUsername() + " already exists";
-                       } catch (UsernameNotFoundException e) {
-                               // silent
-                       }
-                       if (!primaryEmail.getText().matches(UserAdminService.EMAIL_PATTERN))
-                               return "Not a valid email address";
-                       if (firstName.getText().trim().equals(""))
-                               return "Specify a first name";
-                       if (lastName.getText().trim().equals(""))
-                               return "Specify a last name";
-                       if (password1.getText().trim().equals(""))
-                               return "Specify a password";
-                       if (password2.getText().trim().equals(""))
-                               return "Repeat the password";
-                       if (!password2.getText().equals(password1.getText()))
-                               return "Passwords are different";
-                       return null;
-               }
-
-               public String getUsername() {
-                       return username.getText();
-               }
-
-               public String getPassword() {
-                       return password1.getText();
-               }
-
-               public void mapToProfileNode(Node up) {
-                       try {
-                               up.setProperty(ARGEO_PRIMARY_EMAIL, primaryEmail.getText());
-                               up.setProperty(ARGEO_FIRST_NAME, firstName.getText());
-                               up.setProperty(ARGEO_LAST_NAME, lastName.getText());
-
-                               // derived values
-                               // TODO add wizard pages to do it
-                               up.setProperty(Property.JCR_TITLE, firstName.getText() + " "
-                                               + lastName.getText());
-                               up.setProperty(Property.JCR_DESCRIPTION, "");
-                       } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot map to " + up, e);
-                       }
-               }
-       }
-}
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserPage.java b/org.argeo.cms/src/org/argeo/cms/users/UserPage.java
deleted file mode 100644 (file)
index 0b98443..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.argeo.cms.users;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.argeo.cms.CmsEditable;
-import org.argeo.cms.CmsUiProvider;
-import org.argeo.cms.util.CmsUtils;
-import org.argeo.cms.viewers.JcrVersionCmsEditable;
-import org.argeo.cms.widgets.ScrolledPage;
-import org.argeo.security.UserAdminService;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-/** Enable management of a given user */
-public class UserPage implements CmsUiProvider {
-
-       /* DEPENDENCY INJECTION */
-       private UserAdminService userAdminService;
-
-       @Override
-       public Control createUi(Composite parent, Node context)
-                       throws RepositoryException {
-               CmsEditable cmsEditable = new JcrVersionCmsEditable(context);
-               Composite page = createPage(parent);
-               UserViewer userViewer = new UserViewer(page, SWT.NONE, context,
-                               cmsEditable);
-
-               Control control = userViewer.getControl();
-
-               // FIXME not satisfying.
-               if (control instanceof UserPart)
-                       ((UserPart) control).setUserAdminService(userAdminService);
-
-               Composite par = control.getParent();
-
-               UserRolesPart rolesPart = new UserRolesPart(par, SWT.NO_FOCUS, context,
-                               true);
-               rolesPart.setUserAdminService(userAdminService);
-               rolesPart.setUserAdminService(userAdminService);
-               rolesPart.createControl(rolesPart, UserStyles.USER_FORM_TEXT);
-               rolesPart.refresh();
-               rolesPart.setLayoutData(CmsUtils.fillWidth());
-
-               return page;
-       }
-
-       protected Composite createPage(Composite parent) {
-               parent.setLayout(CmsUtils.noSpaceGridLayout());
-               ScrolledPage scrolled = new ScrolledPage(parent, SWT.NONE);
-               scrolled.setLayoutData(CmsUtils.fillAll());
-               scrolled.setLayout(CmsUtils.noSpaceGridLayout());
-               // TODO manage style
-               // CmsUtils.style(scrolled, "maintenance_user_form");
-
-               Composite page = new Composite(scrolled, SWT.NONE);
-               page.setLayout(CmsUtils.noSpaceGridLayout());
-               page.setBackgroundMode(SWT.INHERIT_NONE);
-               page.setLayoutData(CmsUtils.fillAll());
-               return page;
-       }
-
-       public void setUserAdminService(UserAdminService userAdminService) {
-               this.userAdminService = userAdminService;
-       }
-}
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserPart.java b/org.argeo.cms/src/org/argeo/cms/users/UserPart.java
deleted file mode 100644 (file)
index b3e7c9c..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-package org.argeo.cms.users;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-import org.argeo.cms.util.CmsUtils;
-import org.argeo.cms.viewers.EditablePart;
-import org.argeo.cms.viewers.NodePart;
-import org.argeo.cms.widgets.StyledControl;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.UserAdminService;
-import org.argeo.security.jcr.JcrUserDetails;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.Text;
-
-/** Display a single user main info once it has been created. */
-public class UserPart extends StyledControl implements EditablePart, NodePart,
-               FocusListener {
-       private static final long serialVersionUID = -2883661960366940505L;
-       // private final static Log log = LogFactory.getLog(UserPart.class);
-
-       // A static list of supported properties.
-       private List<Text> texts;
-       private final static String KEY_PROP_NAME = "jcr:propertyName";
-
-       // the 2 password fields
-       private Text pwd1, pwd2;
-
-       private UserAdminService userAdminService;
-
-       // TODO implement to provide user creation ability for anonymous user?
-       // public UserPart(Composite parent, int swtStyle) {
-       // super(parent, swtStyle);
-       // }
-
-       public UserPart(Composite parent, int style, Item item)
-                       throws RepositoryException {
-               this(parent, style, item, true);
-       }
-
-       public UserPart(Composite parent, int style, Item item,
-                       boolean cacheImmediately) throws RepositoryException {
-               super(parent, style, item, cacheImmediately);
-       }
-
-       @Override
-       public Item getItem() throws RepositoryException {
-               return getNode();
-       }
-
-       @Override
-       protected Control createControl(Composite box, String style) {
-               Composite body = new Composite(box, SWT.NO_FOCUS);
-               body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-               CmsUtils.style(body, UserStyles.USER_FORM_TEXT);
-
-               body.setLayout(new GridLayout(2, false));
-
-               // Header
-               Label headerLbl = new Label(body, SWT.NONE);
-               headerLbl.setText(" Main user information");
-               headerLbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false,
-                               2, 1));
-               CmsUtils.style(headerLbl, UserStyles.USER_FORM_TITLE);
-
-               // Form field
-               createTexts(body, UserStyles.USER_FORM_TEXT);
-
-               if (isEditing())
-                       for (Text txt : texts)
-                               txt.addFocusListener(this);
-
-               // Change password link
-               headerLbl = new Label(body, SWT.NONE);
-               headerLbl.setText(" Reset password");
-               headerLbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false,
-                               2, 1));
-               CmsUtils.style(headerLbl, UserStyles.USER_FORM_TITLE);
-
-               pwd1 = createLP(body, UserStyles.USER_FORM_TEXT, "Enter password");
-               pwd2 = createLP(body, UserStyles.USER_FORM_TEXT, "Re-Enter");
-
-               final Link link = new Link(body, SWT.NONE);
-               link.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 2,
-                               1));
-               link.setText("<a>Change password</a>");
-               link.addSelectionListener(new SelectionAdapter() {
-                       private static final long serialVersionUID = 8348668888548451776L;
-
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               String msg = null;
-                               if ("".equals(pwd1.getText().trim()))
-                                       msg = "Passwords cannot be blank";
-                               else if (!pwd1.getText().equals(pwd2.getText()))
-                                       msg = "Passwords do not match, please try again.";
-
-                               if (msg != null) {
-                                       MessageDialog.openError(link.getShell(), "Error", msg);
-                               } else {
-                                       try {
-                                               String username = getNode().getProperty(
-                                                               ArgeoNames.ARGEO_USER_ID).getString();
-                                               if (userAdminService.userExists(username)) {
-                                                       JcrUserDetails userDetails = (JcrUserDetails) userAdminService
-                                                                       .loadUserByUsername(username);
-                                                       userDetails = userDetails.cloneWithNewPassword(pwd1
-                                                                       .getText());
-                                                       userAdminService.updateUser(userDetails);
-                                                       MessageDialog.openInformation(link.getShell(),
-                                                                       "Password changed", "Password changed.");
-                                               }
-                                       } catch (Exception re) {
-                                               throw new ArgeoException(
-                                                               "unable to reset password for user "
-                                                                               + getNode(), re);
-                                       }
-                               }
-
-                               pwd1.setText("");
-                               pwd2.setText("");
-
-                       }
-               });
-               return body;
-       }
-
-       private void createTexts(Composite parent, String style) {
-               texts = new ArrayList<Text>();
-               texts.add(createLT(parent, style, "Displayed Name", Property.JCR_TITLE));
-               texts.add(createLT(parent, style, "First name",
-                               ArgeoNames.ARGEO_FIRST_NAME));
-               texts.add(createLT(parent, style, "Last name",
-                               ArgeoNames.ARGEO_LAST_NAME));
-               texts.add(createLT(parent, style, "Email",
-                               ArgeoNames.ARGEO_PRIMARY_EMAIL));
-               texts.add(createLMT(parent, style, "Description",
-                               Property.JCR_DESCRIPTION));
-       }
-
-       void refresh() {
-               for (Text txt : texts) {
-                       txt.setText(get(getNode(), (String) txt.getData(KEY_PROP_NAME)));
-                       txt.setEditable(isEditing());
-               }
-       }
-
-       // his.listener methods
-       @Override
-       public void focusGained(FocusEvent e) {
-               // Do nothing
-       }
-
-       @Override
-       public void focusLost(FocusEvent e) {
-               // Save change if needed
-               Text text = (Text) e.getSource();
-               set(getNode(), (String) text.getData(KEY_PROP_NAME), text.getText());
-       }
-
-       // HELPERS
-       /** Creates label and text. */
-       protected Text createLT(Composite body, String style, String label,
-                       String propName) {
-               Label lbl = new Label(body, SWT.NONE);
-               lbl.setText(label);
-               lbl.setFont(EclipseUiUtils.getBoldFont(body));
-               lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
-               Text text = new Text(body, SWT.BORDER);
-               text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-               CmsUtils.style(text, style);
-               text.setData(KEY_PROP_NAME, propName);
-               return text;
-       }
-
-       // HELPERS
-       /** Creates label and password text. */
-       protected Text createLP(Composite body, String style, String label) {
-               Label lbl = new Label(body, SWT.NONE);
-               lbl.setText(label);
-               lbl.setFont(EclipseUiUtils.getBoldFont(body));
-               lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
-               Text text = new Text(body, SWT.BORDER | SWT.PASSWORD);
-               text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-               CmsUtils.style(text, style);
-               return text;
-       }
-
-       /** Creates label and multiline text. */
-       protected Text createLMT(Composite body, String style, String label,
-                       String propName) {
-               Label lbl = new Label(body, SWT.NONE);
-               lbl.setText(label);
-               lbl.setFont(EclipseUiUtils.getBoldFont(body));
-               GridData gd = new GridData(SWT.RIGHT, SWT.TOP, false, false);
-               gd.verticalIndent = 0;
-               lbl.setLayoutData(gd);
-               Text text = new Text(body, SWT.BORDER | SWT.MULTI | SWT.WRAP);
-               gd = new GridData(SWT.FILL, SWT.CENTER, true, true);
-               gd.heightHint = 100;
-               text.setLayoutData(gd);
-               CmsUtils.style(text, style);
-               text.setData(KEY_PROP_NAME, propName);
-               return text;
-       }
-
-       /**
-        * Concisely get the string value of a property. Returns an empty String
-        * rather than null if this node doesn't have this property or if the
-        * corresponding property is an empty string.
-        */
-       private String get(Node node, String propertyName) {
-               try {
-                       if (!node.hasProperty(propertyName))
-                               return "";
-                       else
-                               return node.getProperty(propertyName).getString();
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot get property " + propertyName
-                                       + " of " + node, e);
-               }
-       }
-
-       private boolean set(Node node, String propName, String value) {
-               try {
-                       if ("".equals(value)
-                                       && (!node.hasProperty(propName) || node
-                                                       .hasProperty(propName)
-                                                       && "".equals(node.getProperty(propName).getString())))
-                               return false;
-                       else if (node.hasProperty(propName)
-                                       && node.getProperty(propName).getString()
-                                                       .equals((String) value))
-                               return false;
-                       else {
-                               node.setProperty(propName, (String) value);
-                               node.getSession().save();
-                               return true;
-                       }
-               } catch (RepositoryException e) {
-                       throw new ArgeoException("Cannot  property " + propName + " on "
-                                       + node + " with value " + value, e);
-               }
-       }
-
-       public void setUserAdminService(UserAdminService userAdminService) {
-               this.userAdminService = userAdminService;
-       }
-}
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserRolesPart.java b/org.argeo.cms/src/org/argeo/cms/users/UserRolesPart.java
deleted file mode 100644 (file)
index 610c49c..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-package org.argeo.cms.users;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.argeo.ArgeoException;
-import org.argeo.cms.internal.auth.JcrSecurityModel;
-import org.argeo.cms.util.CmsUtils;
-import org.argeo.cms.viewers.EditablePart;
-import org.argeo.cms.viewers.NodePart;
-import org.argeo.cms.widgets.StyledControl;
-import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.UserAdminService;
-import org.argeo.security.jcr.JcrUserDetails;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.springframework.security.core.GrantedAuthority;
-
-/** Display a single user main info once it has been created. */
-public class UserRolesPart extends StyledControl implements EditablePart,
-               NodePart, FocusListener {
-       private static final long serialVersionUID = -6013980335975055846L;
-
-       private CheckboxTableViewer rolesViewer;
-       private Table table;
-
-       private JcrUserDetails userDetails;
-       private UserAdminService userAdminService;
-       private List<String> roles;
-
-       // FIXME
-       // private final Image checked;
-
-       // TODO implement to provide user creation ability for anonymous user?
-       // public UserPart(Composite parent, int swtStyle) {
-       // super(parent, swtStyle);
-       // }
-
-       public UserRolesPart(Composite parent, int style, Item item,
-                       UserAdminService userAdminService, JcrSecurityModel jcrSecurityModel)
-                       throws RepositoryException {
-               this(parent, style, item, true);
-       }
-
-       public UserRolesPart(Composite parent, int style, Item item,
-                       boolean cacheImmediately) throws RepositoryException {
-               super(parent, style, item, cacheImmediately);
-               // checked = new Image(parent, imageData);
-       }
-
-       @Override
-       public Item getItem() throws RepositoryException {
-               return getNode();
-       }
-
-       public void setMouseListener(MouseListener mouseListener) {
-               super.setMouseListener(mouseListener);
-               table.addMouseListener(mouseListener);
-       }
-
-       @Override
-       public Control createControl(Composite box, String style) {
-               // box.setLayout(CmsUtils.noSpaceGridLayout());
-               box.setLayout(new GridLayout());
-
-               Label header = new Label(box, SWT.NONE);
-               header.setText(" Groups");
-               CmsUtils.style(header, UserStyles.USER_FORM_TITLE);
-               header.setLayoutData(CmsUtils.fillWidth());
-
-               int swtStyle = SWT.CHECK | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
-               if (!isEditing())
-                       swtStyle |= SWT.READ_ONLY;
-
-               table = new Table(box, swtStyle);
-               table.setLinesVisible(true);
-               table.setHeaderVisible(false);
-               CmsUtils.style(table, style);
-
-               rolesViewer = new CheckboxTableViewer(table);
-
-               TableViewerColumn column;
-
-               // check column
-               // TableViewerColumn column = createTableViewerColumn(rolesViewer,
-               // "checked", 20);
-               // column.setLabelProvider(new ColumnLabelProvider() {
-               // public String getText(Object element) {
-               // return null;
-               // }
-
-               // public Image getImage(Object element) {
-               // String role = element.toString();
-               // if (roles.contains(role)) {
-               //
-               // return ROLE_CHECKED;
-               // } else {
-               // return null;
-               // }
-               //
-               // }
-               // );
-               // column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
-
-               // role column
-               column = createTableViewerColumn(rolesViewer, "Role", 400);
-               column.setLabelProvider(new ColumnLabelProvider() {
-                       private static final long serialVersionUID = -7334412925967366255L;
-
-                       public String getText(Object element) {
-                               return element.toString();
-                       }
-               });
-               rolesViewer.setContentProvider(new RolesContentProvider());
-               rolesViewer.setInput(userAdminService.listEditableRoles().toArray());
-
-               // try to prevent edition on read only nodes. Does not work.
-               // rolesViewer.setAllGrayed(!isEditing());
-
-               rolesViewer.addCheckStateListener(new ICheckStateListener() {
-
-                       @Override
-                       public void checkStateChanged(CheckStateChangedEvent event) {
-                               String name = (String) event.getElement();
-                               boolean contained = roles.contains(name);
-                               boolean checked = event.getChecked();
-                               if (checked != contained) {
-                                       if (!contained)
-                                               roles.add(name);
-                                       else
-                                               roles.remove(name);
-                                       userDetails = userDetails.cloneWithNewRoles(roles);
-                                       userAdminService.updateUser(userDetails);
-                               }
-                       }
-               });
-               return table;
-       }
-
-       // THE LISTENER
-       @Override
-       public void focusGained(FocusEvent e) {
-               // Do nothing
-       }
-
-       @Override
-       public void focusLost(FocusEvent e) {
-               // Save change if needed
-               // Text text = (Text) e.getSource();
-       }
-
-       // private final static Image ROLE_CHECKED = SecurityAdminPlugin
-       // .getImageDescriptor("icons/security.gif").createImage();
-
-       public void setUserAdminService(UserAdminService userAdminService) {
-               this.userAdminService = userAdminService;
-               try {
-                       Node currNode = getNode();
-                       String username = currNode.getProperty(ArgeoNames.ARGEO_USER_ID)
-                                       .getString();
-                       if (userAdminService.userExists(username)) {
-                               JcrUserDetails userDetails = (JcrUserDetails) userAdminService
-                                               .loadUserByUsername(username);
-                               setUserDetails(userDetails);
-                       }
-               } catch (Exception e) {
-                       throw new ArgeoException("Cannot retrieve userDetails for "
-                                       + getNode(), e);
-               }
-
-       }
-
-       public void setUserDetails(JcrUserDetails userDetails) {
-               this.userDetails = userDetails;
-               this.roles = new ArrayList<String>();
-               for (GrantedAuthority ga : userDetails.getAuthorities())
-                       roles.add(ga.getAuthority());
-               if (rolesViewer != null)
-                       rolesViewer.refresh();
-       }
-
-       protected TableViewerColumn createTableViewerColumn(TableViewer viewer,
-                       String title, int bound) {
-               final TableViewerColumn viewerColumn = new TableViewerColumn(viewer,
-                               SWT.NONE);
-               final TableColumn column = viewerColumn.getColumn();
-               column.setText(title);
-               column.setWidth(bound);
-               column.setResizable(true);
-               column.setMoveable(true);
-               return viewerColumn;
-
-       }
-
-       public List<String> getRoles() {
-               return roles;
-       }
-
-       public void refresh() {
-
-               // return roles.toArray();
-               rolesViewer.setCheckedElements(roles.toArray()); // setSelection(1);
-               // rolesViewer.setInput(roles);
-               rolesViewer.refresh();
-       }
-
-       private class RolesContentProvider implements IStructuredContentProvider {
-               private static final long serialVersionUID = 4119915828862214310L;
-
-               public Object[] getElements(Object inputElement) {
-                       return userAdminService.listEditableRoles().toArray();
-               }
-
-               public void dispose() {
-               }
-
-               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-                       viewer.refresh();
-               }
-       }
-
-       // /** Select the columns by editing the checkbox in the first column */
-       // class RoleEditingSupport extends EditingSupport {
-       //
-       // private final TableViewer viewer;
-       //
-       // public RoleEditingSupport(TableViewer viewer) {
-       // super(viewer);
-       // this.viewer = viewer;
-       // }
-       //
-       // @Override
-       // protected CellEditor getCellEditor(Object element) {
-       // return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
-       //
-       // }
-       //
-       // @Override
-       // protected boolean canEdit(Object element) {
-       // return true;
-       // }
-       //
-       // @Override
-       // protected Object getValue(Object element) {
-       // String role = element.toString();
-       // return roles.contains(role);
-       //
-       // }
-       //
-       // @Override
-       // protected void setValue(Object element, Object value) {
-       // Boolean inRole = (Boolean) value;
-       // String role = element.toString();
-       // if (inRole && !roles.contains(role)) {
-       // roles.add(role);
-       // } else if (!inRole && roles.contains(role)) {
-       // roles.remove(role);
-       // }
-       // viewer.refresh();
-       // }
-       // }
-
-}
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserStyles.java b/org.argeo.cms/src/org/argeo/cms/users/UserStyles.java
deleted file mode 100644 (file)
index 533f5bb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.argeo.cms.users;
-
-/** Some tries with the style */
-public interface UserStyles {
-
-       /** A text in a form  */
-       public final static String USER_FORM_TEXT = "user_form_text";
-       public final static String USER_FORM_TITLE = "user_form_title";
-
-       public final static String USER_FORM_TEXT_ALT = "user_form_text_alt";
-}
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserViewer.java b/org.argeo.cms/src/org/argeo/cms/users/UserViewer.java
deleted file mode 100644 (file)
index 8badedb..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.argeo.cms.users;
-
-import static org.eclipse.swt.SWT.NONE;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.argeo.cms.CmsEditable;
-import org.argeo.cms.util.CmsUtils;
-import org.argeo.cms.viewers.AbstractPageViewer;
-import org.argeo.cms.viewers.EditablePart;
-import org.argeo.cms.viewers.Section;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-public class UserViewer extends AbstractPageViewer {
-       private static final long serialVersionUID = -717973369525981931L;
-       private UserPart userPart;
-
-       public UserViewer(Composite parent, int style, Node userNode,
-                       CmsEditable cmsEditable) throws RepositoryException {
-               this(new UserPart(parent, SWT.NO_BACKGROUND, userNode), style,
-                               userNode, cmsEditable);
-       }
-
-       private UserViewer(UserPart userPart, int style, Node userNode,
-                       CmsEditable cmsEditable) throws RepositoryException {
-               super(new Section(userPart, NONE, userNode), style, cmsEditable);
-               this.userPart = userPart;
-               userPart.createControl(userPart, "cms_test");
-               userPart.setStyle("cms_test");
-               refresh();
-               userPart.setLayoutData(CmsUtils.fillWidth());
-               userPart.setMouseListener(getMouseListener());
-
-               // Add other parts
-               // userRolesPart.createControl(userPart,"cms_test");
-               // userPart.setStyle("cms_test");
-               // refresh();
-               // userPart.setLayoutData(CmsUtils.fillWidth());
-               // userPart.setMouseListener(getMouseListener());
-
-       }
-
-       // private JcrComposite createParents(Composite parent, Node userNode)
-       // throws RepositoryException {
-       // this.parent = ;
-       // return this.parent;
-       // }
-
-       @Override
-       public Control getControl() {
-               return userPart;
-       }
-
-       // MOUSE LISTENER
-       @Override
-       protected MouseListener createMouseListener() {
-               return new ML();
-       }
-
-       private class ML extends MouseAdapter {
-               private static final long serialVersionUID = 8526890859876770905L;
-
-               @Override
-               public void mouseDoubleClick(MouseEvent e) {
-                       if (e.button == 1) {
-                               Control source = (Control) e.getSource();
-                               if (getCmsEditable().canEdit()) {
-                                       getCmsEditable().startEditing();
-                                       EditablePart composite = findDataParent(source);
-                                       Point point = new Point(e.x, e.y);
-                                       edit(composite, source.toDisplay(point));
-                               }
-                       }
-               }
-       }
-
-       protected void updateContent(EditablePart part) throws RepositoryException {
-               if (part instanceof UserPart)
-                       ((UserPart) part).refresh();
-       }
-
-       protected void refresh(Control control) throws RepositoryException {
-               if (control instanceof UserPart)
-                       ((UserPart) control).refresh();
-       }
-
-}
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UsersPage.java b/org.argeo.cms/src/org/argeo/cms/users/UsersPage.java
deleted file mode 100644 (file)
index 600b3da..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-package org.argeo.cms.users;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
-import org.argeo.cms.CmsUiProvider;
-import org.argeo.cms.maintenance.NonAdminPage;
-import org.argeo.cms.util.CmsUtils;
-import org.argeo.eclipse.ui.parts.UsersTable;
-import org.argeo.jcr.ArgeoNames;
-import org.argeo.jcr.JcrUtils;
-import org.argeo.security.UserAdminService;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-/**
- * Simple page to manage users of a given repository. It relies on Argeo user
- * model: user profile nodes are stored in the main workspace
- */
-public class UsersPage implements CmsUiProvider {
-       private final static Log log = LogFactory.getLog(UsersPage.class);
-
-       /* DEPENDENCY INJECTION */
-       private UserAdminService userAdminService;
-       private String userWkspName;
-
-       // TODO use a constant
-       private final static String ROLE_USER_ADMIN = "ROLE_USER_ADMIN";
-
-       // Local UI Providers
-       private NonAdminPage nap = new NonAdminPage();
-       private UserPage userPage = new UserPage();
-
-       @Override
-       public Control createUi(Composite parent, Node context)
-                       throws RepositoryException {
-               // This page is only visible to user with role USER_ADMIN
-               if (isAdmin(context)) {
-                       Session session = context.getSession().getRepository()
-                                       .login(userWkspName);
-                       return createMainLayout(parent, session);
-               } else
-                       nap.createUi(parent, context);
-               return null;
-       }
-
-       // Main layout
-       // Left: User Table - Right User Details Edition
-       private Control createMainLayout(Composite parent, final Session session)
-                       throws RepositoryException {
-
-               Composite layoutCmp = new Composite(parent, SWT.NO_FOCUS);
-               layoutCmp.setLayoutData(CmsUtils.fillAll());
-               layoutCmp
-                               .setLayout(CmsUtils.noSpaceGridLayout(new GridLayout(2, true)));
-
-               Composite left = new Composite(layoutCmp, SWT.NO_FOCUS);
-               left.setLayoutData(CmsUtils.fillAll());
-               UsersTable table = createUsersTable(left, session);
-
-               final Composite right = new Composite(layoutCmp, SWT.NO_FOCUS);
-               right.setLayoutData(CmsUtils.fillAll());
-
-               final TableViewer viewer = table.getTableViewer();
-               viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-
-                       @Override
-                       public void selectionChanged(SelectionChangedEvent event) {
-                               IStructuredSelection selection = (IStructuredSelection) viewer
-                                               .getSelection();
-                               if (selection.isEmpty()) {
-                                       // Should we clean the right column?
-                                       CmsUtils.clear(right);
-                                       right.layout();
-                                       return;
-                               } else {
-                                       Node context = (Node) selection.getFirstElement();
-                                       try {
-                                               CmsUtils.clear(right);
-                                               userPage.createUi(right, context);
-                                               right.layout();
-                                               right.getParent().layout();
-                                       } catch (RepositoryException e) {
-                                               e.printStackTrace();
-                                               throw new ArgeoException("unable to create "
-                                                               + "editor for user " + context, e);
-                                       }
-                               }
-                       }
-               });
-               return left;
-       }
-
-       private UsersTable createUsersTable(Composite parent, final Session session)
-                       throws RepositoryException {
-               parent.setLayout(CmsUtils.noSpaceGridLayout());
-
-               // Add user CRUD buttons
-               Composite buttonCmp = new Composite(parent, SWT.NO_FOCUS);
-               buttonCmp.setLayoutData(CmsUtils.fillWidth());
-               buttonCmp.setLayout(new GridLayout(2, false));
-               // Delete
-               final Button deleteBtn = new Button(buttonCmp, SWT.PUSH);
-               deleteBtn.setText("Delete selected");
-               deleteBtn
-                               .setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));
-
-               // Add
-               final Button addBtn = new Button(buttonCmp, SWT.PUSH);
-               addBtn.setText("Create");
-
-               Composite bottomCmp = new Composite(parent, SWT.NO_FOCUS);
-               bottomCmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
-               bottomCmp.setLayout(new GridLayout());
-               
-               
-               // Create the composite that displays the list and a filter
-               final UsersTable userTableCmp = new UsersTable(bottomCmp, SWT.BORDER,
-                               session);
-               userTableCmp.populate(true, false);
-               userTableCmp.setLayoutData(CmsUtils.fillAll());
-
-               // The various listeners
-               userTableCmp.addDisposeListener(new DisposeListener() {
-                       private static final long serialVersionUID = -8854052549807709846L;
-
-                       @Override
-                       public void widgetDisposed(DisposeEvent event) {
-                               JcrUtils.logoutQuietly(session);
-                       }
-               });
-
-               deleteBtn.addSelectionListener(new SelectionAdapter() {
-                       private static final long serialVersionUID = -7340611909297995666L;
-
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-
-                               TableViewer viewer = userTableCmp.getTableViewer();
-                               ISelection selection = viewer.getSelection();
-                               if (selection.isEmpty())
-                                       return;
-
-                               Map<String, Node> toDelete = new TreeMap<String, Node>();
-                               @SuppressWarnings("unchecked")
-                               Iterator<Node> it = ((IStructuredSelection) selection)
-                                               .iterator();
-                               nodes: while (it.hasNext()) {
-                                       Node profileNode = it.next();
-                                       try {
-                                               String userName = profileNode.getProperty(
-                                                               ArgeoNames.ARGEO_USER_ID).getString();
-                                               if (userName.equals(profileNode.getSession()
-                                                               .getUserID())) {
-                                                       log.warn("Cannot delete its own user: " + userName);
-                                                       continue nodes;
-                                               }
-                                               toDelete.put(userName, profileNode);
-                                       } catch (RepositoryException re) {
-                                               log.warn("Cannot interpred user " + profileNode);
-                                       }
-                               }
-
-                               if (!MessageDialog.openQuestion(
-                                               userTableCmp.getShell(),
-                                               "Delete User",
-                                               "Are you sure that you want to delete users "
-                                                               + toDelete.keySet()
-                                                               + "?\n"
-                                                               + "This may lead to inconsistencies in the application."))
-                                       return;
-
-                               for (String username : toDelete.keySet()) {
-                                       Session session = null;
-                                       try {
-                                               Node profileNode = toDelete.get(username);
-                                               userAdminService.deleteUser(username);
-                                               profileNode.getParent().remove();
-                                               session = profileNode.getSession();
-                                               session.save();
-                                       } catch (RepositoryException re) {
-                                               JcrUtils.discardQuietly(session);
-                                               throw new ArgeoException("Cannot list users", re);
-                                       }
-                               }
-                               userTableCmp.refresh();
-                       }
-               });
-
-               addBtn.addSelectionListener(new SelectionAdapter() {
-                       private static final long serialVersionUID = 9214984636836267786L;
-
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               NewUserWizard newUserWizard = new NewUserWizard(session,
-                                               userAdminService);
-                               WizardDialog dialog = new WizardDialog(addBtn.getShell(),
-                                               newUserWizard);
-                               if (dialog.open() == Dialog.OK)
-                                       userTableCmp.refresh();
-                       }
-               });
-
-               // Configure
-               // userTableCmp.getTableViewer().addDoubleClickListener(
-               // new ViewDoubleClickListener());
-               // getViewSite().setSelectionProvider(userTableCmp.getTableViewer());
-
-               // Add listener to refresh the list when something changes
-               // userStructureListener = new JcrUserListener(getSite().getShell()
-               // .getDisplay());
-               // JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED
-               // | Event.NODE_REMOVED, ArgeoJcrConstants.PEOPLE_BASE_PATH, null);
-               // userPropertiesListener = new JcrUserListener(getSite().getShell()
-               // .getDisplay());
-               // JcrUtils.addListener(session, userStructureListener,
-               // Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED
-               // | Event.PROPERTY_REMOVED,
-               // ArgeoJcrConstants.PEOPLE_BASE_PATH,
-               // ArgeoTypes.ARGEO_USER_PROFILE);
-
-               return userTableCmp;
-       }
-
-       private boolean isAdmin(Node node) throws RepositoryException {
-               return isUserInRole(ROLE_USER_ADMIN);
-       }
-
-       /**
-        * Returns true if the current user is in the specified role TODO factoize
-        * in the user admin service
-        */
-       private boolean isUserInRole(String role) {
-               Authentication authen = SecurityContextHolder.getContext()
-                               .getAuthentication();
-               for (GrantedAuthority ga : authen.getAuthorities()) {
-                       if (ga.getAuthority().equals(role))
-                               return true;
-               }
-               return false;
-       }
-
-       /* DEPENDENCY INJECTION */
-       public void setWorkspaceName(String workspaceName) {
-               this.userWkspName = workspaceName;
-       }
-
-       public void setUserAdminService(UserAdminService userAdminService) {
-               this.userAdminService = userAdminService;
-               userPage.setUserAdminService(userAdminService);
-       }
-}
\ No newline at end of file