*/
package org.argeo.security.ui.admin.commands;
+import java.util.ArrayList;
import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.transaction.UserTransaction;
+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.views.GroupsView;
+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.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
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 {
+ ".deleteGroups";
/* DEPENDENCY INJECTION */
- private UserAdmin userAdmin;
- private UserTransaction userTransaction;
+ private UserAdminWrapper userAdminWrapper;
@SuppressWarnings("unchecked")
public Object execute(ExecutionEvent event) throws ExecutionException {
if (selection.isEmpty())
return null;
- Map<String, String> toDelete = new TreeMap<String, String>();
- // List<String> names = new ArrayList<String>();
+ List<Group> groups = new ArrayList<Group>();
Iterator<Group> it = ((IStructuredSelection) selection).iterator();
+ 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
- toDelete.put(groupName, currGroup.getName());
+ 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;
- UiAdminUtils.beginTransactionIfNeeded(userTransaction);
- for (String name : toDelete.values())
- userAdmin.removeRole(name);
-
- // TODO rather notify the update listener
- forceRefresh(event);
+ userAdminWrapper.beginTransactionIfNeeded();
+ UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
+ for (Group group : groups) {
+ userAdmin.removeRole(group.getName());
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_REMOVED, group));
+ }
return null;
}
- private void forceRefresh(ExecutionEvent event) {
- IWorkbenchWindow iww = HandlerUtil.getActiveWorkbenchWindow(event);
- if (iww == null)
- return;
- IWorkbenchPage activePage = iww.getActivePage();
- IWorkbenchPart part = activePage.getActivePart();
- if (part instanceof GroupsView)
- ((GroupsView) part).refresh();
- }
-
/* DEPENDENCY INJECTION */
- public void setUserAdmin(UserAdmin userAdmin) {
- this.userAdmin = userAdmin;
- }
-
- public void setUserTransaction(UserTransaction userTransaction) {
- this.userTransaction = userTransaction;
+ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+ this.userAdminWrapper = userAdminWrapper;
}
}
\ No newline at end of file