*/
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.UserAdminConstants;
+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.Group;
+import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Deletes the selected groups */
public class DeleteGroups extends AbstractHandler {
- public final static String ID = SecurityAdminPlugin.PLUGIN_ID + ".deleteGroups";
+ public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ + ".deleteGroups";
+
+ /* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
-
@SuppressWarnings("unchecked")
public Object execute(ExecutionEvent event) throws ExecutionException {
ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection.isEmpty())
return null;
- Map<String, Group> toDelete = new TreeMap<String, Group>();
+ List<Group> groups = new ArrayList<Group>();
Iterator<Group> it = ((IStructuredSelection) selection).iterator();
- groups: while (it.hasNext()) {
+ StringBuilder builder = new StringBuilder();
+ while (it.hasNext()) {
Group currGroup = it.next();
- String groupName = UiAdminUtils.getProperty(currGroup,
- UserAdminConstants.KEY_CN);
-
+ String groupName = UiAdminUtils.getUsername(currGroup);
// TODO add checks
- // if (userName.equals(profileNode.getSession().getUserID())) {
- // log.warn("Cannot delete its own user: " + userName);
- // continue groups;
- // }
- toDelete.put(groupName, currGroup);
+ builder.append(groupName).append("; ");
+ groups.add(currGroup);
}
- if (!MessageDialog
- .openQuestion(
- HandlerUtil.getActiveShell(event),
- "Delete Groups",
- "Are you sure that you want to delete groups "
- + toDelete.keySet()
- + "?\n"
- + "This might lead to inconsistencies in the application."))
+ if (!MessageDialog.openQuestion(HandlerUtil.getActiveShell(event),
+ "Delete Groups",
+ "Are you sure that you " + "want to delete these groups?\n"
+ + builder.substring(0, builder.length() - 2)))
return null;
- for (String groupName : toDelete.keySet()) {
+ userAdminWrapper.beginTransactionIfNeeded();
+ UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
+ for (Group group : groups) {
+ userAdmin.removeRole(group.getName());
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_REMOVED, group));
}
- 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;
}
- // public void setUserAdmin(UserAdmin userAdmin) {
- // this.userAdmin = userAdmin;
- // }
+ /* DEPENDENCY INJECTION */
+ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+ this.userAdminWrapper = userAdminWrapper;
+ }
}
\ No newline at end of file