import java.util.Iterator;
import java.util.List;
+import org.argeo.cms.util.useradmin.UserAdminUtils;
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.argeo.security.ui.admin.internal.parts.UserEditorInput;
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.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
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 */
+/** Delete the selected groups */
public class DeleteGroups extends AbstractHandler {
public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ ".deleteGroups";
StringBuilder builder = new StringBuilder();
while (it.hasNext()) {
Group currGroup = it.next();
- String groupName = UiAdminUtils.getUsername(currGroup);
+ String groupName = UserAdminUtils.getUsername(currGroup);
// TODO add checks
builder.append(groupName).append("; ");
groups.add(currGroup);
userAdminWrapper.beginTransactionIfNeeded();
UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
+ IWorkbenchPage iwp = HandlerUtil.getActiveWorkbenchWindow(event)
+ .getActivePage();
+ for (Group group : groups) {
+ String groupName = group.getName();
+ // TODO find a way to close the editor cleanly if opened. Cannot be
+ // done through the UserAdminListeners, it causes a
+ // java.util.ConcurrentModificationException because disposing the
+ // editor unregisters and disposes the listener
+ IEditorPart part = iwp.findEditor(new UserEditorInput(groupName));
+ if (part != null)
+ iwp.closeEditor(part, false);
+ userAdmin.removeRole(groupName);
+ }
+ userAdminWrapper.commitOrNotifyTransactionStateChange();
+
+ // Update the view
for (Group group : groups) {
- userAdmin.removeRole(group.getName());
userAdminWrapper.notifyListeners(new UserAdminEvent(null,
UserAdminEvent.ROLE_REMOVED, group));
}
+
return null;
}