X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fusers%2FUsers.java;h=2637ed4d9afeeb923af00e3a6bb3a829805c0071;hb=c110010dddf647925707a8dcd19c86e1f5254878;hp=e7f09440d88fdd015edd0dde9d4a7e0a557946bf;hpb=050d54bb859aaed19777b32d7c9e677c532ef52f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/users/Users.java b/org.argeo.cms/src/org/argeo/cms/users/Users.java index e7f09440d..2637ed4d9 100644 --- a/org.argeo.cms/src/org/argeo/cms/users/Users.java +++ b/org.argeo.cms/src/org/argeo/cms/users/Users.java @@ -1,20 +1,28 @@ 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 javax.jcr.security.AccessControlManager; import javax.jcr.security.Privilege; +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.CmsUtils; import org.argeo.cms.maintenance.NonAdminPage; -import org.argeo.eclipse.ui.dialogs.UserCreationWizard; +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.argeo.security.jcr.JcrSecurityModel; +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; @@ -23,12 +31,14 @@ 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.events.SelectionListener; +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.provisioning.UserDetailsManager; /** * Simple page to manage users of a given repository. We still rely on Argeo @@ -36,9 +46,11 @@ import org.eclipse.swt.widgets.Control; */ public class Users implements CmsUiProvider { + private final static Log log = LogFactory.getLog(Users.class); + // Enable user CRUD // INJECTED private UserAdminService userAdminService; - private JcrSecurityModel jcrSecurityModel; + // private UserDetailsManager userDetailsManager; private String userWkspName; // Local UI Providers @@ -116,31 +128,20 @@ public class Users implements CmsUiProvider { // 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"); - addBtn.addSelectionListener(new SelectionListener() { - private static final long serialVersionUID = 9214984636836267786L; - - @Override - public void widgetSelected(SelectionEvent e) { - UserCreationWizard newUserWizard = new UserCreationWizard( - session, userAdminService, jcrSecurityModel); - WizardDialog dialog = new WizardDialog(addBtn.getShell(), - newUserWizard); - dialog.open(); - // TODO refresh list if user has been created - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - } - }); // Create the composite that displays the list and a filter - UsersTable userTableCmp = new UsersTable(parent, SWT.NO_FOCUS, session); + final UsersTable userTableCmp = new UsersTable(parent, SWT.NO_FOCUS, + session); userTableCmp.populate(true, false); userTableCmp.setLayoutData(CmsUtils.fillAll()); + + // The various listeners userTableCmp.addDisposeListener(new DisposeListener() { private static final long serialVersionUID = -8854052549807709846L; @@ -150,6 +151,77 @@ public class Users implements CmsUiProvider { } }); + 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 toDelete = new TreeMap(); + @SuppressWarnings("unchecked") + Iterator 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()); @@ -265,8 +337,8 @@ public class Users implements CmsUiProvider { userPage.setUserAdminService(userAdminService); } - public void setJcrSecurityModel(JcrSecurityModel jcrSecurityModel) { - this.jcrSecurityModel = jcrSecurityModel; - userPage.setJcrSecurityModel(jcrSecurityModel); + public void setUserDetailsManager(UserDetailsManager userDetailsManager) { + // this.userDetailsManager = userDetailsManager; + // userPage.setUserDetailsManager(userDetailsManager); } } \ No newline at end of file