From: Mathieu Baudier Date: Tue, 31 May 2011 16:47:55 +0000 (+0000) Subject: Introduce delete roles and users X-Git-Tag: argeo-commons-2.1.30~1238 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=ffa37ce4afa9b5e7e40420b1837a203bca832cf4;p=lgpl%2Fargeo-commons.git Introduce delete roles and users git-svn-id: https://svn.argeo.org/commons/trunk@4551 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/security/plugins/org.argeo.security.ui.admin/META-INF/spring/commands.xml b/security/plugins/org.argeo.security.ui.admin/META-INF/spring/commands.xml index 7f6781cc1..94a222d0f 100644 --- a/security/plugins/org.argeo.security.ui.admin/META-INF/spring/commands.xml +++ b/security/plugins/org.argeo.security.ui.admin/META-INF/spring/commands.xml @@ -8,20 +8,36 @@ class="org.argeo.security.ui.admin.commands.OpenArgeoUserEditor" scope="prototype" /> + + + + + + + + + + + + + + - - diff --git a/security/plugins/org.argeo.security.ui.admin/plugin.xml b/security/plugins/org.argeo.security.ui.admin/plugin.xml index 67f4092c0..1ad3c079f 100644 --- a/security/plugins/org.argeo.security.ui.admin/plugin.xml +++ b/security/plugins/org.argeo.security.ui.admin/plugin.xml @@ -48,11 +48,26 @@ name="Username"> + + + + + + + id="org.argeo.security.ui.admin.deleteRole" + name="deleteRole"> + + + + + + toDelete = new ArrayList(); + Iterator it = ((IStructuredSelection) selection).iterator(); + while (it.hasNext()) { + toDelete.add(it.next()); + } + + if (!MessageDialog + .openQuestion( + HandlerUtil.getActiveShell(event), + "Delete Role", + "Are you sure that you want to delete " + + toDelete + + "?\n" + + "This may lead to inconsistencies in the application.")) + return null; + + for (String role : toDelete) { + userAdminService.deleteRole(role); + } + + RolesView view = (RolesView) HandlerUtil + .getActiveWorkbenchWindow(event).getActivePage() + .findView(RolesView.ID); + view.refresh(); + return null; + } + + public void setUserAdminService(UserAdminService userAdminService) { + this.userAdminService = userAdminService; + } +} \ No newline at end of file diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteUser.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteUser.java new file mode 100644 index 000000000..63a987289 --- /dev/null +++ b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/DeleteUser.java @@ -0,0 +1,90 @@ +package org.argeo.security.ui.admin.commands; + +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.jcr.ArgeoNames; +import org.argeo.jcr.JcrUtils; +import org.argeo.security.UserAdminService; +import org.argeo.security.ui.admin.views.UsersView; +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.handlers.HandlerUtil; + +/** Deletes the select user nodes */ +public class DeleteUser extends AbstractHandler { + private final static Log log = LogFactory.getLog(DeleteUser.class); + + private UserAdminService userAdminService; + + @SuppressWarnings("unchecked") + public Object execute(ExecutionEvent event) throws ExecutionException { + ISelection selection = HandlerUtil.getCurrentSelection(event); + if (selection.isEmpty()) + return null; + + Map toDelete = new TreeMap(); + 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 e) { + log.warn("Cannot interpred user " + profileNode); + } + } + + if (!MessageDialog + .openQuestion( + HandlerUtil.getActiveShell(event), + "Delete User", + "Are you sure that you want to delete users " + + toDelete.keySet() + + "?\n" + + "This may lead to inconsistencies in the application.")) + return null; + + 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 e) { + JcrUtils.discardQuietly(session); + throw new ArgeoException("Cannot list users", e); + } + } + + userAdminService.synchronize(); + UsersView view = (UsersView) HandlerUtil + .getActiveWorkbenchWindow(event).getActivePage() + .findView(UsersView.ID); + view.refresh(); + return null; + } + + public void setUserAdminService(UserAdminService userAdminService) { + this.userAdminService = userAdminService; + } +} \ No newline at end of file diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/RefreshRoles.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/RefreshRoles.java new file mode 100644 index 000000000..eb30bb4ec --- /dev/null +++ b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/commands/RefreshRoles.java @@ -0,0 +1,16 @@ +package org.argeo.security.ui.admin.commands; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +/** + * Refreshes the roles view. + */ +public class RefreshRoles extends AbstractHandler { + public Object execute(ExecutionEvent event) throws ExecutionException { + + return null; + } + +} \ No newline at end of file diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/RolesView.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/RolesView.java index 491647a8d..50adb658a 100644 --- a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/RolesView.java +++ b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/RolesView.java @@ -70,6 +70,7 @@ public class RolesView extends ViewPart { viewer = new TableViewer(table); viewer.setContentProvider(new RolesContentProvider()); viewer.setLabelProvider(new UsersLabelProvider()); + getViewSite().setSelectionProvider(viewer); viewer.setInput(getViewSite()); } diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java index 77b718e12..4242436d4 100644 --- a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java +++ b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java @@ -53,6 +53,7 @@ public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes, viewer.setContentProvider(new UsersContentProvider()); viewer.setLabelProvider(new UsersLabelProvider()); viewer.addDoubleClickListener(new ViewDoubleClickListener()); + getViewSite().setSelectionProvider(viewer); viewer.setInput(getViewSite()); }