+ deleteBtn.addSelectionListener(new SelectionAdapter() {
+ private static final long serialVersionUID = -7340611909297995666L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+
+ TableViewer viewer = userTableCmp.getTableViewer();
+ ISelection selection = viewer.getSelection();
+ if (selection.isEmpty())
+ return;
+
+ Map<String, Node> toDelete = new TreeMap<String, Node>();
+ @SuppressWarnings("unchecked")
+ 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 re) {
+ log.warn("Cannot interpred user " + profileNode);
+ }
+ }
+
+ if (!MessageDialog.openQuestion(
+ userTableCmp.getShell(),
+ "Delete User",
+ "Are you sure that you want to delete users "
+ + toDelete.keySet()
+ + "?\n"
+ + "This may lead to inconsistencies in the application."))
+ return;
+
+ 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 re) {
+ JcrUtils.discardQuietly(session);
+ throw new ArgeoException("Cannot list users", re);
+ }
+ }
+ userTableCmp.refresh();
+ }
+ });
+
+ addBtn.addSelectionListener(new SelectionAdapter() {
+ private static final long serialVersionUID = 9214984636836267786L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ NewUserWizard newUserWizard = new NewUserWizard(session,
+ userAdminService);
+ WizardDialog dialog = new WizardDialog(addBtn.getShell(),
+ newUserWizard);
+ if (dialog.open() == Dialog.OK)
+ userTableCmp.refresh();
+ }
+ });
+