class="org.argeo.security.ui.admin.commands.OpenArgeoUserEditor"
scope="prototype" />
+ <!-- USERS -->
<bean id="newUser" class="org.argeo.security.ui.admin.commands.NewUser"
scope="prototype">
<property name="session" ref="session" />
<property name="userAdminService" ref="userAdminService" />
</bean>
+ <bean id="refreshUsersList" class="org.argeo.security.ui.admin.commands.RefreshUsersList"
+ scope="prototype">
+ <property name="userAdminService" ref="userAdminService" />
+ <property name="session" ref="session" />
+ </bean>
+
+ <bean id="deleteUser" class="org.argeo.security.ui.admin.commands.DeleteUser"
+ scope="prototype">
+ <property name="userAdminService" ref="userAdminService" />
+ </bean>
+
+ <!-- ROLES -->
+ <bean id="refreshRoles" class="org.argeo.security.ui.admin.commands.RefreshRoles"
+ scope="prototype">
+ </bean>
+
<bean id="addRole" class="org.argeo.security.ui.admin.commands.AddRole"
scope="prototype">
<property name="userAdminService" ref="userAdminService" />
</bean>
- <bean id="refreshUsersList" class="org.argeo.security.ui.admin.commands.RefreshUsersList"
+ <bean id="deleteRole" class="org.argeo.security.ui.admin.commands.DeleteRole"
scope="prototype">
<property name="userAdminService" ref="userAdminService" />
- <property name="session" ref="session" />
</bean>
</beans>
name="Username">
</commandParameter>
</command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.security.ui.admin.refreshUsersList"
+ name="refreshUsersList">
+ </command>
<command
defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
id="org.argeo.security.ui.admin.newUser"
name="New User">
</command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.security.ui.admin.deleteUser"
+ name="deleteUser">
+ </command>
+ <command
+ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+ id="org.argeo.security.ui.admin.refreshRoles"
+ name="refreshRoles">
+ </command>
<command
defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
id="org.argeo.security.ui.admin.addRole"
</command>
<command
defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
- id="org.argeo.security.ui.admin.refreshUsersList"
- name="refreshUsersList">
+ id="org.argeo.security.ui.admin.deleteRole"
+ name="deleteRole">
</command>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="toolbar:org.argeo.security.ui.admin.adminRolesView">
+ <command
+ commandId="org.argeo.security.ui.admin.deleteRole"
+ icon="icons/remove.gif"
+ label="Delete Role"
+ tooltip="Delete selected roles">
+ </command>
<command
commandId="org.argeo.security.ui.admin.addRole"
icon="icons/add.gif"
label="Add Role"
tooltip="Add new role">
</command>
+ <command
+ commandId="org.argeo.security.ui.admin.refreshRoles"
+ icon="icons/refresh.png"
+ label="Refresh"
+ tooltip="Refresh roles">
+ </command>
</menuContribution>
<menuContribution
locationURI="toolbar:org.argeo.security.ui.admin.adminUsersView">
+ <command
+ commandId="org.argeo.security.ui.admin.deleteUser"
+ icon="icons/remove.gif"
+ label="Delete User"
+ tooltip="Delete selected users">
+ </command>
<command
commandId="org.argeo.security.ui.admin.newUser"
icon="icons/add.gif"
--- /dev/null
+package org.argeo.security.ui.admin.commands;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.argeo.security.UserAdminService;
+import org.argeo.security.ui.admin.views.RolesView;
+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.handlers.HandlerUtil;
+
+/** Deletes the selected roles */
+public class DeleteRole extends AbstractHandler {
+ private UserAdminService userAdminService;
+
+ @SuppressWarnings("unchecked")
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection selection = HandlerUtil.getCurrentSelection(event);
+ if (selection.isEmpty())
+ return null;
+
+ List<String> toDelete = new ArrayList<String>();
+ Iterator<String> it = ((IStructuredSelection) selection).iterator();
+ while (it.hasNext()) {
+ toDelete.add(it.next());
+ }
+
+ if (!MessageDialog
+ .openQuestion(
+ HandlerUtil.getActiveShell(event),
+ "Delete Role",
+ "Are you sure that you want to delete "
+ + toDelete
+ + "?\n"
+ + "This may lead to inconsistencies in the application."))
+ return null;
+
+ for (String role : toDelete) {
+ userAdminService.deleteRole(role);
+ }
+
+ RolesView view = (RolesView) HandlerUtil
+ .getActiveWorkbenchWindow(event).getActivePage()
+ .findView(RolesView.ID);
+ view.refresh();
+ return null;
+ }
+
+ public void setUserAdminService(UserAdminService userAdminService) {
+ this.userAdminService = userAdminService;
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.commands;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.security.UserAdminService;
+import org.argeo.security.ui.admin.views.UsersView;
+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.handlers.HandlerUtil;
+
+/** Deletes the select user nodes */
+public class DeleteUser extends AbstractHandler {
+ private final static Log log = LogFactory.getLog(DeleteUser.class);
+
+ private UserAdminService userAdminService;
+
+ @SuppressWarnings("unchecked")
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection selection = HandlerUtil.getCurrentSelection(event);
+ if (selection.isEmpty())
+ return null;
+
+ Map<String, Node> toDelete = new TreeMap<String, Node>();
+ Iterator<Node> it = ((IStructuredSelection) selection).iterator();
+ nodes: while (it.hasNext()) {
+ Node profileNode = it.next();
+ try {
+ String userName = profileNode.getProperty(
+ ArgeoNames.ARGEO_USER_ID).getString();
+ if (userName.equals(profileNode.getSession().getUserID())) {
+ log.warn("Cannot delete its own user: " + userName);
+ continue nodes;
+ }
+ toDelete.put(userName, profileNode);
+ } catch (RepositoryException e) {
+ log.warn("Cannot interpred user " + profileNode);
+ }
+ }
+
+ if (!MessageDialog
+ .openQuestion(
+ HandlerUtil.getActiveShell(event),
+ "Delete User",
+ "Are you sure that you want to delete users "
+ + toDelete.keySet()
+ + "?\n"
+ + "This may lead to inconsistencies in the application."))
+ return null;
+
+ for (String username : toDelete.keySet()) {
+ Session session = null;
+ try {
+ Node profileNode = toDelete.get(username);
+ userAdminService.deleteUser(username);
+ profileNode.getParent().remove();
+ session = profileNode.getSession();
+ session.save();
+ } catch (RepositoryException e) {
+ JcrUtils.discardQuietly(session);
+ throw new ArgeoException("Cannot list users", e);
+ }
+ }
+
+ userAdminService.synchronize();
+ UsersView view = (UsersView) HandlerUtil
+ .getActiveWorkbenchWindow(event).getActivePage()
+ .findView(UsersView.ID);
+ view.refresh();
+ return null;
+ }
+
+ public void setUserAdminService(UserAdminService userAdminService) {
+ this.userAdminService = userAdminService;
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * Refreshes the roles view.
+ */
+public class RefreshRoles extends AbstractHandler {
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ return null;
+ }
+
+}
\ No newline at end of file
viewer = new TableViewer(table);
viewer.setContentProvider(new RolesContentProvider());
viewer.setLabelProvider(new UsersLabelProvider());
+ getViewSite().setSelectionProvider(viewer);
viewer.setInput(getViewSite());
}
viewer.setContentProvider(new UsersContentProvider());
viewer.setLabelProvider(new UsersLabelProvider());
viewer.addDoubleClickListener(new ViewDoubleClickListener());
+ getViewSite().setSelectionProvider(viewer);
viewer.setInput(getViewSite());
}