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.User;
import org.osgi.service.useradmin.UserAdmin;
import org.osgi.service.useradmin.UserAdminEvent;
-/** Deletes the selected users */
+/** Delete the selected users */
public class DeleteUsers extends AbstractHandler {
public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ ".deleteUsers";
while (it.hasNext()) {
User currUser = it.next();
- String userName = UiAdminUtils.getUsername(currUser);
- if (UiAdminUtils.isCurrentUser(currUser)) {
+ String userName = UserAdminUtils.getUsername(currUser);
+ if (UserAdminUtils.isCurrentUser(currUser)) {
MessageDialog.openError(HandlerUtil.getActiveShell(event),
"Deletion forbidden",
"You cannot delete your own user this way.");
userAdminWrapper.beginTransactionIfNeeded();
UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
+ IWorkbenchPage iwp = HandlerUtil.getActiveWorkbenchWindow(event)
+ .getActivePage();
+
+ for (User user : users) {
+ String userName = user.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(userName));
+ if (part != null)
+ iwp.closeEditor(part, false);
+ userAdmin.removeRole(userName);
+ }
+ userAdminWrapper.commitOrNotifyTransactionStateChange();
+
for (User user : users) {
- userAdmin.removeRole(user.getName());
userAdminWrapper.notifyListeners(new UserAdminEvent(null,
UserAdminEvent.ROLE_REMOVED, user));
}