*/
package org.argeo.security.ui.admin.commands;
+import java.util.ArrayList;
import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
+import java.util.List;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
import org.argeo.security.ui.admin.internal.UiAdminUtils;
+import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.handlers.HandlerUtil;
import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Deletes the selected users */
public class DeleteUsers extends AbstractHandler {
- public final static String ID = SecurityAdminPlugin.PLUGIN_ID + ".deleteUsers";
+ public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ + ".deleteUsers";
+
+ /* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
@SuppressWarnings("unchecked")
public Object execute(ExecutionEvent event) throws ExecutionException {
if (selection.isEmpty())
return null;
- Map<String, User> toDelete = new TreeMap<String, User>();
Iterator<User> it = ((IStructuredSelection) selection).iterator();
- users: while (it.hasNext()) {
+ List<User> users = new ArrayList<User>();
+ StringBuilder builder = new StringBuilder();
+
+ while (it.hasNext()) {
User currUser = it.next();
String userName = UiAdminUtils.getUsername(currUser);
- // check not deleting own user
- // if (userName.equals(profileNode.getSession().getUserID())) {
- // log.warn("Cannot delete its own user: " + userName);
- // continue nodes;
- // }
- toDelete.put(userName, currUser);
+ if (UiAdminUtils.isCurrentUser(currUser)) {
+ MessageDialog.openError(HandlerUtil.getActiveShell(event),
+ "Deletion forbidden",
+ "You cannot delete your own user this way.");
+ return null;
+ }
+ builder.append(userName).append("; ");
+ users.add(currUser);
}
- if (!MessageDialog
- .openQuestion(
- HandlerUtil.getActiveShell(event),
- "Delete Users",
- "Are you sure that you want to delete users "
- + toDelete.keySet()
- + "?\n"
- + "This might lead to inconsistencies in the application."))
+ if (!MessageDialog.openQuestion(
+ HandlerUtil.getActiveShell(event),
+ "Delete Users",
+ "Are you sure that you want to delete these users?\n"
+ + builder.substring(0, builder.length() - 2)))
return null;
- for (String username : toDelete.keySet()) {
- // TODO perform real deletion
+ userAdminWrapper.beginTransactionIfNeeded();
+ UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
+ for (User user : users) {
+ userAdmin.removeRole(user.getName());
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_REMOVED, user));
}
- MessageDialog.openInformation(HandlerUtil.getActiveShell(event),
- "Unimplemented method",
- "The effective deletion is not yet implemented");
- // TODO refresh?
- // JcrUsersView view = (JcrUsersView) HandlerUtil
- // .getActiveWorkbenchWindow(event).getActivePage()
- // .findView(JcrUsersView.ID);
- // view.refresh();
return null;
}
+
+ /* DEPENDENCY INJECTION */
+ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+ this.userAdminWrapper = userAdminWrapper;
+ }
}
\ No newline at end of file