]> git.argeo.org Git - lgpl/argeo-commons.git/blob - commands/DeleteUser.java
Prepare next development cycle
[lgpl/argeo-commons.git] / commands / DeleteUser.java
1 package org.argeo.security.ui.admin.commands;
2
3 import java.util.Iterator;
4 import java.util.Map;
5 import java.util.TreeMap;
6
7 import javax.jcr.Node;
8 import javax.jcr.RepositoryException;
9 import javax.jcr.Session;
10
11 import org.apache.commons.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.argeo.ArgeoException;
14 import org.argeo.jcr.ArgeoNames;
15 import org.argeo.jcr.JcrUtils;
16 import org.argeo.security.UserAdminService;
17 import org.argeo.security.ui.admin.views.UsersView;
18 import org.eclipse.core.commands.AbstractHandler;
19 import org.eclipse.core.commands.ExecutionEvent;
20 import org.eclipse.core.commands.ExecutionException;
21 import org.eclipse.jface.dialogs.MessageDialog;
22 import org.eclipse.jface.viewers.ISelection;
23 import org.eclipse.jface.viewers.IStructuredSelection;
24 import org.eclipse.ui.handlers.HandlerUtil;
25
26 /** Deletes the select user nodes */
27 public class DeleteUser extends AbstractHandler {
28 private final static Log log = LogFactory.getLog(DeleteUser.class);
29
30 private UserAdminService userAdminService;
31
32 @SuppressWarnings("unchecked")
33 public Object execute(ExecutionEvent event) throws ExecutionException {
34 ISelection selection = HandlerUtil.getCurrentSelection(event);
35 if (selection.isEmpty())
36 return null;
37
38 Map<String, Node> toDelete = new TreeMap<String, Node>();
39 Iterator<Node> it = ((IStructuredSelection) selection).iterator();
40 nodes: while (it.hasNext()) {
41 Node profileNode = it.next();
42 try {
43 String userName = profileNode.getProperty(
44 ArgeoNames.ARGEO_USER_ID).getString();
45 if (userName.equals(profileNode.getSession().getUserID())) {
46 log.warn("Cannot delete its own user: " + userName);
47 continue nodes;
48 }
49 toDelete.put(userName, profileNode);
50 } catch (RepositoryException e) {
51 log.warn("Cannot interpred user " + profileNode);
52 }
53 }
54
55 if (!MessageDialog
56 .openQuestion(
57 HandlerUtil.getActiveShell(event),
58 "Delete User",
59 "Are you sure that you want to delete users "
60 + toDelete.keySet()
61 + "?\n"
62 + "This may lead to inconsistencies in the application."))
63 return null;
64
65 for (String username : toDelete.keySet()) {
66 Session session = null;
67 try {
68 Node profileNode = toDelete.get(username);
69 userAdminService.deleteUser(username);
70 profileNode.getParent().remove();
71 session = profileNode.getSession();
72 session.save();
73 } catch (RepositoryException e) {
74 JcrUtils.discardQuietly(session);
75 throw new ArgeoException("Cannot list users", e);
76 }
77 }
78
79 userAdminService.synchronize();
80 UsersView view = (UsersView) HandlerUtil
81 .getActiveWorkbenchWindow(event).getActivePage()
82 .findView(UsersView.ID);
83 view.refresh();
84 return null;
85 }
86
87 public void setUserAdminService(UserAdminService userAdminService) {
88 this.userAdminService = userAdminService;
89 }
90 }