<!-- USERS & GROUPS CRUDS -->
<bean id="newUser" class="org.argeo.security.ui.admin.commands.NewUser"
scope="prototype">
- <property name="userAdmin" ref="userAdmin" />
- <property name="userTransaction" ref="userTransaction" />
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
</bean>
<bean id="newGroup" class="org.argeo.security.ui.admin.commands.NewGroup"
scope="prototype">
- <property name="userAdmin" ref="userAdmin" />
- <property name="userTransaction" ref="userTransaction" />
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
</bean>
<bean id="deleteUsers" class="org.argeo.security.ui.admin.commands.DeleteUsers"
scope="prototype">
- <property name="userAdmin" ref="userAdmin" />
- <property name="userTransaction" ref="userTransaction" />
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
</bean>
<bean id="deleteGroups" class="org.argeo.security.ui.admin.commands.DeleteGroups"
scope="prototype">
- <property name="userAdmin" ref="userAdmin" />
- <property name="userTransaction" ref="userTransaction" />
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
</bean>
<!-- <bean id="userBatchUpdate" class="org.argeo.security.ui.admin.commands.UserBatchUpdate"
scope="prototype"> <property name="repository" ref="nodeRepository" /> <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="deleteRole" class="org.argeo.security.ui.admin.commands.DeleteRole"
- scope="prototype"> <property name="userAdminService" ref="userAdminService"
- /> </bean> -->
<!-- TRANSACTIONS -->
<bean id="userTransactionHandler"
class="org.argeo.security.ui.admin.commands.UserTransactionHandler"
scope="prototype">
- <property name="userTransaction" ref="userTransaction" />
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
</bean>
</beans>
<property name="userTransaction" ref="userTransaction" />\r
</bean>\r
\r
+ <bean id="userAdminWrapper"\r
+ class="org.argeo.security.ui.admin.internal.UserAdminWrapper"\r
+ scope="singleton" lazy-init="false">\r
+ <property name="userTransaction" ref="userTransaction" />\r
+ <property name="userAdmin" ref="userAdmin" />\r
+ </bean>\r
+\r
<bean\r
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">\r
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-
- <!-- Editors -->
- <bean id="userEditor" class="org.argeo.security.ui.admin.editors.UserEditor"
- scope="prototype">
- <property name="userAdmin" ref="userAdmin" />
- <property name="userTransaction" ref="userTransaction" />
- </bean>
-
- <!-- <bean id="groupEditor" class="org.argeo.security.ui.admin.editors.GroupEditor"
- scope="prototype"> <property name="userAdmin" ref="userAdmin" /> </bean> -->
- <!-- LEGACY -->
-</beans>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+
+ <!-- Editors -->
+ <bean id="userEditor" class="org.argeo.security.ui.admin.editors.UserEditor"
+ scope="prototype">
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
+ </bean>
+
+ <!-- Views -->
+ <bean id="usersView" class="org.argeo.security.ui.admin.internal.parts.UsersView"
+ scope="prototype">
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
+ </bean>
+ <bean id="groupsView" class="org.argeo.security.ui.admin.internal.parts.GroupsView"
+ scope="prototype">
+ <property name="userAdminWrapper" ref="userAdminWrapper" />
+ </bean>
+
+</beans>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
-
- <bean id="usersView" class="org.argeo.security.ui.admin.views.UsersView"
- scope="prototype">
- <property name="userAdmin" ref="userAdmin" />
- </bean>
-
- <bean id="groupsView" class="org.argeo.security.ui.admin.views.GroupsView"
- scope="prototype">
- <property name="userAdmin" ref="userAdmin" />
- </bean>
-</beans>
*/
package org.argeo.security.ui.admin;
-import org.argeo.security.ui.admin.views.GroupsView;
-import org.argeo.security.ui.admin.views.UsersView;
+import org.argeo.security.ui.admin.internal.parts.GroupsView;
+import org.argeo.security.ui.admin.internal.parts.UsersView;
import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
*/
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
*/
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.views.UsersView;
+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.handlers.HandlerUtil;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Deletes the selected users */
public class DeleteUsers extends AbstractHandler {
+ ".deleteUsers";
/* 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>();
- // Map<String, User> toDelete = new TreeMap<String, User>();
Iterator<User> it = ((IStructuredSelection) selection).iterator();
- users: while (it.hasNext()) {
+ List<User> users = new ArrayList<User>();
+ StringBuilder builder = new StringBuilder();
+
+ while (it.hasNext()) {
User currUser = it.next();
String userName = UiAdminUtils.getUsername(currUser);
- // TODO check not deleting own user
- // if (userName.equals(profileNode.getSession().getUserID())) {
- // log.warn("Cannot delete its own user: " + userName);
- // continue nodes;
- // }
- toDelete.put(userName, currUser.getName());
+ if (UiAdminUtils.isCurrentUser(currUser)) {
+ MessageDialog.openError(HandlerUtil.getActiveShell(event),
+ "Deletion forbidden",
+ "You cannot delete your own user this way.");
+ return null;
+ }
+ builder.append(userName).append("; ");
+ users.add(currUser);
}
- if (!MessageDialog
- .openQuestion(
- HandlerUtil.getActiveShell(event),
- "Delete Users",
- "Are you sure that you want to delete users "
- + toDelete.keySet()
- + "?\n"
- + "This might lead to inconsistencies in the application."))
+ if (!MessageDialog.openQuestion(
+ HandlerUtil.getActiveShell(event),
+ "Delete Users",
+ "Are you sure that you want to delete these users?\n"
+ + builder.substring(0, builder.length() - 2)))
return null;
- UiAdminUtils.beginTransactionIfNeeded(userTransaction);
- for (String name : toDelete.values()) {
- userAdmin.removeRole(name);
+ userAdminWrapper.beginTransactionIfNeeded();
+ UserAdmin userAdmin = userAdminWrapper.getUserAdmin();
+ for (User user : users) {
+ userAdmin.removeRole(user.getName());
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_REMOVED, user));
}
-
- // TODO rather notify the update listener
- forceRefresh(event);
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 UsersView)
- ((UsersView) 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
*/
package org.argeo.security.ui.admin.commands;
-import org.argeo.security.ui.admin.views.GroupsView;
-import org.argeo.security.ui.admin.views.UsersView;
+import org.argeo.security.ui.admin.internal.parts.GroupsView;
+import org.argeo.security.ui.admin.internal.parts.UsersView;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import java.util.Dictionary;
-import javax.transaction.UserTransaction;
-
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
import org.argeo.jcr.ArgeoNames;
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.window.Window;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.osgi.service.useradmin.Group;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Create a new group. */
public class NewGroup extends AbstractHandler {
public final static String ID = SecurityAdminPlugin.PLUGIN_ID + ".newGroup";
+ /* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
private UserAdmin userAdmin;
- private UserTransaction userTransaction;
// TODO implement a dynamic choice of the base dn
private String getDn(String cn) {
WizardDialog dialog = new WizardDialog(
HandlerUtil.getActiveShell(event), newGroupWizard);
dialog.setTitle("Create a new group");
-
- // Force refresh until the listener are implemented
- if (Window.OK == dialog.open())
- forceRefresh(event);
+ dialog.open();
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();
- }
-
private class NewGroupWizard extends Wizard {
// pages
return false;
String commonName = commonNameTxt.getText();
try {
- UiAdminUtils.beginTransactionIfNeeded(userTransaction);
- Group user = (Group) userAdmin.createRole(getDn(commonName),
+ userAdminWrapper.beginTransactionIfNeeded();
+ Group group = (Group) userAdmin.createRole(getDn(commonName),
Role.GROUP);
- Dictionary props = user.getProperties();
+ Dictionary props = group.getProperties();
String descStr = descriptionTxt.getText();
if (UiAdminUtils.notNull(descStr))
props.put(UserAdminConstants.KEY_DESC, descStr);
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_CREATED, group));
return true;
} catch (Exception e) {
ErrorFeedback.show("Cannot create new group " + commonName, e);
}
/* 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;
+ this.userAdmin = userAdminWrapper.getUserAdmin();
}
}
\ No newline at end of file
import java.util.Dictionary;
-import javax.transaction.UserTransaction;
-
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
import org.argeo.jcr.ArgeoNames;
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.UsersView;
+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.window.Window;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Open a wizard that enables creation of a new user. */
public class NewUser extends AbstractHandler {
public final static String ID = SecurityAdminPlugin.PLUGIN_ID + ".newUser";
/* DEPENDENCY INJECTION */
- private UserAdmin userAdmin;
- private UserTransaction userTransaction;
+ private UserAdminWrapper userAdminWrapper;
// TODO implement a dynamic choice of the base dn
private String getDn(String uid) {
WizardDialog dialog = new WizardDialog(
HandlerUtil.getActiveShell(event), newUserWizard);
- // Force refresh until the listener are implemented
- if (Window.OK == dialog.open())
- forceRefresh(event);
+ dialog.open();
+
+ // // Force refresh until the listener are implemented
+ // if (Window.OK == dialog.open())
+ // forceRefresh(event);
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 UsersView)
- ((UsersView) part).refresh();
- }
+ // 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 UsersView)
+ // ((UsersView) part).refresh();
+ // }
private class NewUserWizard extends Wizard {
return false;
String username = mainUserInfo.getUsername();
try {
- UiAdminUtils.beginTransactionIfNeeded(userTransaction);
+ userAdminWrapper.beginTransactionIfNeeded();
char[] password = mainUserInfo.getPassword();
- User user = (User) userAdmin.createRole(getDn(username),
- Role.USER);
+ User user = (User) userAdminWrapper.getUserAdmin().createRole(
+ getDn(username), Role.USER);
Dictionary props = user.getProperties();
props.put(UserAdminConstants.KEY_MAIL, mailStr);
user.getCredentials().put(null, password);
+
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_CREATED, user));
return true;
} catch (Exception e) {
ErrorFeedback.show("Cannot create new user " + username, e);
if (name.trim().equals(""))
return "User name must not be empty";
- Role role = userAdmin.getRole(getDn(name));
+ Role role = userAdminWrapper.getUserAdmin()
+ .getRole(getDn(name));
if (role != null)
return "User " + name + " already exists";
if (!primaryMailTxt.getText().matches(
}
/* 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
import org.argeo.ArgeoException;
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.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Manage the transaction that is bound to the current perspective */
public class UserTransactionHandler extends AbstractHandler {
public final static String TRANSACTION_COMMIT = "transaction.commit";
public final static String TRANSACTION_ROLLBACK = "transaction.rollback";
- private UserTransaction userTransaction;
+ /* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
public Object execute(ExecutionEvent event) throws ExecutionException {
-
String commandId = event.getParameter(PARAM_COMMAND_ID);
+ UserTransaction userTransaction = userAdminWrapper.getUserTransaction();
try {
if (TRANSACTION_BEGIN.equals(commandId)) {
if (userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
} else if (TRANSACTION_ROLLBACK.equals(commandId)) {
if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION)
throw new ArgeoException("No transaction to rollback.");
- else
+ else {
userTransaction.rollback();
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_CHANGED, null));
+ }
}
UiAdminUtils.notifyTransactionStateChange(userTransaction);
} catch (ArgeoException e) {
throw new ArgeoException("Unable to call " + commandId + " on "
+ userTransaction, e);
}
- //
- // IWorkbenchWindow iww = HandlerUtil.getActiveWorkbenchWindow(event);
- // if (iww == null)
- // return null;
- // IWorkbenchPage activePage = iww.getActivePage();
- // IWorkbenchPart part = activePage.getActivePart();
- // if (part instanceof UsersView)
- // ((UsersView) part).refresh();
- // else if (part instanceof GroupsView)
- // ((GroupsView) part).refresh();
return null;
}
- public void setUserTransaction(UserTransaction userTransaction) {
- this.userTransaction = userTransaction;
+ /* DEPENDENCY INJECTION */
+ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+ this.userAdminWrapper = userAdminWrapper;
}
}
\ No newline at end of file
import org.argeo.security.ui.admin.internal.MailLP;
import org.argeo.security.ui.admin.internal.RoleIconLP;
import org.argeo.security.ui.admin.internal.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.argeo.security.ui.admin.internal.UserNameLP;
import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener;
import org.argeo.security.ui.admin.internal.UserTableViewer;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Display/edit main properties of a given group */
public class GroupMainPage extends FormPage implements ArgeoNames {
final static String ID = "GroupEditor.mainPage";
private final UserEditor editor;
- private UserAdmin userAdmin;
+ private UserAdminWrapper userAdminWrapper;
// Local configuration
private final int PRE_TITLE_INDENT = 10;
- public GroupMainPage(FormEditor editor, UserAdmin userAdmin) {
+ public GroupMainPage(FormEditor editor, UserAdminWrapper userAdminWrapper) {
super(editor, ID, "Main");
this.editor = (UserEditor) editor;
- this.userAdmin = userAdmin;
+ this.userAdminWrapper = userAdminWrapper;
}
protected void createFormContent(final IManagedForm mf) {
// Create and configure the table
userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
- | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
+ | SWT.H_SCROLL | SWT.V_SCROLL, userAdminWrapper.getUserAdmin());
userTableViewerCmp.setColumnDefinitions(columnDefs);
userTableViewerCmp.populate(true, false);
// Drag and drop
int operations = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
- userViewer.addDropSupport(operations, tt, new GroupDropListener(
- userViewer, userAdmin, (Group) editor.getDisplayedUser()));
+ userViewer.addDropSupport(operations, tt,
+ new GroupDropListener(userViewer, userAdminWrapper,
+ (Group) editor.getDisplayedUser()));
}
private class MyUserTableViewer extends UserTableViewer {
private class GroupDropListener extends ViewerDropAdapter {
private static final long serialVersionUID = 2893468717831451621L;
- private final UserAdmin myUserAdmin;
+ private final UserAdminWrapper userAdminWrapper;
private final Group myGroup;
- public GroupDropListener(Viewer viewer, UserAdmin userAdmin, Group group) {
+ public GroupDropListener(Viewer viewer,
+ UserAdminWrapper userAdminWrapper, Group group) {
super(viewer);
- this.myUserAdmin = userAdmin;
+ this.userAdminWrapper = userAdminWrapper;
this.myGroup = group;
}
@Override
public void drop(DropTargetEvent event) {
+ // TODO Is there an opportunity to perform ceck before?
+
String newUserName = (String) event.data;
+ UserAdmin myUserAdmin = userAdminWrapper.getUserAdmin();
Role role = myUserAdmin.getRole(newUserName);
- // TODO this check should be done before.
if (role.getType() == Role.USER) {
// TODO check if the user is already member of this group
- // we expect here that there is already a begun transaction
- // TODO implement the dirty state
- editor.beginTransactionIfNeeded();
+ userAdminWrapper.beginTransactionIfNeeded();
User user = (User) role;
myGroup.addMember(user);
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_CHANGED, myGroup));
} else if (role.getType() == Role.GROUP) {
Group newGroup = (Group) role;
Shell shell = getViewer().getControl().getShell();
// Sanity checks
if (myGroup == newGroup) { // Equality
-
MessageDialog.openError(shell, "Forbidden addition ",
"A group cannot be a member of itself.");
return;
return;
}
- editor.beginTransactionIfNeeded();
+ userAdminWrapper.beginTransactionIfNeeded();
// TODO implement the dirty state
myGroup.addMember(newGroup);
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_CHANGED, myGroup));
}
super.drop(event);
}
import java.util.ArrayList;
import java.util.List;
-import javax.transaction.UserTransaction;
-
import org.argeo.ArgeoException;
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.internal.UserAdminWrapper;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Editor for a user, might be a user or a group. */
public class UserEditor extends FormEditor implements UserAdminConstants {
+ ".userEditor";
/* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
private UserAdmin userAdmin;
- private UserTransaction userTransaction;
// Context
private User user;
protected void addPages() {
try {
if (user.getType() == Role.GROUP)
- addPage(new GroupMainPage(this, userAdmin));
+ addPage(new GroupMainPage(this, userAdminWrapper));
else
- addPage(new UserMainPage(this, userAdmin));
+ addPage(new UserMainPage(this, userAdminWrapper));
} catch (Exception e) {
throw new ArgeoException("Cannot add pages", e);
}
return "";
}
- protected void beginTransactionIfNeeded() {
- UiAdminUtils.beginTransactionIfNeeded(userTransaction);
- }
-
/**
* Updates the property in the working copy. The transaction must be
* explicitly committed to persist the update.
@Override
public void doSave(IProgressMonitor monitor) {
- UiAdminUtils.beginTransactionIfNeeded(userTransaction);
+ userAdminWrapper.beginTransactionIfNeeded();
commitPages(true);
firePropertyChange(PROP_DIRTY);
- // FIXME transaction should be managed at a higher level
- // try {
- // userTransaction.commit();
- // } catch (Exception e) {
- // throw new ArgeoException("Could not save user editor", e);
- // }
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_REMOVED, user));
}
@Override
}
/* DEPENDENCY INJECTION */
- public void setUserAdmin(UserAdmin userAdmin) {
- this.userAdmin = userAdmin;
+ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+ this.userAdminWrapper = userAdminWrapper;
+ this.userAdmin = userAdminWrapper.getUserAdmin();
}
-
- public void setUserTransaction(UserTransaction userTransaction) {
- this.userTransaction = userTransaction;
- }
-
}
\ No newline at end of file
import org.argeo.security.ui.admin.internal.CommonNameLP;
import org.argeo.security.ui.admin.internal.RoleIconLP;
import org.argeo.security.ui.admin.internal.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.argeo.security.ui.admin.internal.UserNameLP;
import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener;
import org.argeo.security.ui.admin.internal.UserTableViewer;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
/** Display/edit the properties common to all users */
public class UserMainPage extends FormPage implements ArgeoNames {
// private final static Log log = LogFactory.getLog(UserMainPage.class);
private final UserEditor editor;
- private UserAdmin userAdmin;
+ private UserAdminWrapper userAdminWrapper;
private char[] newPassword;
// Local configuration
private final int PRE_TITLE_INDENT = 10;
- public UserMainPage(FormEditor editor, UserAdmin userAdmin) {
+ public UserMainPage(FormEditor editor, UserAdminWrapper userAdminWrapper) {
super(editor, ID, "Main");
this.editor = (UserEditor) editor;
- this.userAdmin = userAdmin;
+ this.userAdminWrapper = userAdminWrapper;
}
public String getNewPassword() {
// Create and configure the table
userTableViewerCmp = new MyUserTableViewer(body, SWT.MULTI
- | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
+ | SWT.H_SCROLL | SWT.V_SCROLL, userAdminWrapper.getUserAdmin());
userTableViewerCmp.setColumnDefinitions(columnDefs);
userTableViewerCmp.populate(true, false);
int operations = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
userViewer.addDropSupport(operations, tt, new GroupDropListener(
- userViewer, userAdmin, editor.getDisplayedUser()));
+ userViewer, userAdminWrapper.getUserAdmin(), editor.getDisplayedUser()));
}
// TODO this check should be done before.
if (role.getType() == Role.GROUP) {
// TODO check if the user is already member of this group
- // we expect here that there is already a begun transaction
- // TODO implement the dirty state
- editor.beginTransactionIfNeeded();
+ userAdminWrapper.beginTransactionIfNeeded();
Group group = (Group) role;
group.addMember(myUser);
+ userAdminWrapper.notifyListeners(new UserAdminEvent(null,
+ UserAdminEvent.ROLE_CHANGED, group));
}
super.drop(event);
}
package org.argeo.security.ui.admin.internal;
import java.security.AccessController;
-import java.security.Principal;
+import javax.naming.InvalidNameException;
+import javax.naming.ldap.LdapName;
import javax.security.auth.Subject;
import javax.security.auth.x500.X500Principal;
import javax.transaction.Status;
import org.eclipse.ui.services.ISourceProviderService;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
/** First effort to centralize back end methods used by the user admin UI */
public class UiAdminUtils {
- public final static String getUsername() {
+
+ /** returns the local name of the current connected user */
+ public final static String getUsername(UserAdmin userAdmin) {
+ LdapName dn = getLdapName();
+ return getUsername(getUser(userAdmin, dn));
+ }
+
+ public final static boolean isCurrentUser(User user) {
+ String userName = UiAdminUtils.getProperty(user,
+ UserAdminConstants.KEY_DN);
+ try {
+ LdapName selfUserName = UiAdminUtils.getLdapName();
+ LdapName userLdapName = new LdapName(userName);
+ if (userLdapName.equals(selfUserName))
+ return true;
+ else
+ return false;
+ } catch (InvalidNameException e) {
+ throw new ArgeoException("User " + user + " has an unvalid dn: "
+ + userName, e);
+ }
+ }
+
+ public final static LdapName getLdapName() {
Subject subject = Subject.getSubject(AccessController.getContext());
- Principal principal = subject.getPrincipals(X500Principal.class)
- .iterator().next();
- return principal.getName();
+ String name = subject.getPrincipals(X500Principal.class).iterator()
+ .next().toString();
+ LdapName dn;
+ try {
+ dn = new LdapName(name);
+ } catch (InvalidNameException e) {
+ throw new ArgeoException("Invalid user dn " + name, e);
+ }
+ return dn;
+ }
+ public final static User getUser(UserAdmin userAdmin, LdapName dn) {
+ User user = userAdmin.getUser(UserAdminConstants.KEY_DN, dn.toString());
+ return user;
}
public final static String getUsername(User user) {
package org.argeo.security.ui.admin.internal;
+import javax.naming.InvalidNameException;
+import javax.naming.ldap.LdapName;
+
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.swt.SWT;
@Override
public Font getFont(Object element) {
-
// Self as bold
- String selfUserName = UiAdminUtils.getUsername();
- String userName = ((User) element).getName();
- if (userName.equals(selfUserName))
- return bold;
+ try {
+ LdapName selfUserName = UiAdminUtils.getLdapName();
+ String userName = UiAdminUtils.getProperty((User) element,
+ UserAdminConstants.KEY_DN);
+ LdapName userLdapName = new LdapName(userName);
+ if (userLdapName.equals(selfUserName))
+ return bold;
+ } catch (InvalidNameException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
// Disabled as Italic
// Node userProfile = (Node) elem;
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.transaction.Status;
+import javax.transaction.UserTransaction;
+
+import org.argeo.ArgeoException;
+import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
+import org.osgi.service.useradmin.UserAdminListener;
+
+/** Simplifies the interaction with the UserAdmin in this bundle */
+public class UserAdminWrapper {
+
+ private UserAdmin userAdmin;
+ private UserTransaction userTransaction;
+
+ // Registered listeners
+ List<UserAdminListener> listeners = new ArrayList<UserAdminListener>();
+
+ // TODO implement safer mechanism
+ public void addListener(UserAdminListener userAdminListener) {
+ if (!listeners.contains(userAdminListener))
+ listeners.add(userAdminListener);
+ }
+
+ /** Must be called from the UI Thread. */
+ public void beginTransactionIfNeeded() {
+ try {
+ if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) {
+ userTransaction.begin();
+ UiAdminUtils.notifyTransactionStateChange(userTransaction);
+ }
+ } catch (Exception e) {
+ throw new ArgeoException("Unable to begin transaction", e);
+ }
+ }
+
+ // Expose this?
+ public void removeListener(UserAdminListener userAdminListener) {
+ if (listeners.contains(userAdminListener))
+ listeners.remove(userAdminListener);
+ }
+
+ public void notifyListeners(UserAdminEvent event) {
+ for (UserAdminListener listener : listeners)
+ listener.roleChanged(event);
+ }
+
+ public UserAdmin getUserAdmin() {
+ return userAdmin;
+ }
+
+ public UserTransaction getUserTransaction() {
+ return userTransaction;
+ }
+
+ /* DEPENDENCY INJECTION */
+ public void setUserAdmin(UserAdmin userAdmin) {
+ this.userAdmin = userAdmin;
+ }
+
+ public void setUserTransaction(UserTransaction userTransaction) {
+ this.userTransaction = userTransaction;
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.security.ui.admin.internal.parts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.security.ui.admin.SecurityAdminPlugin;
+import org.argeo.security.ui.admin.internal.ColumnDefinition;
+import org.argeo.security.ui.admin.internal.CommonNameLP;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
+import org.argeo.security.ui.admin.internal.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UserAdminWrapper;
+import org.argeo.security.ui.admin.internal.UserDragListener;
+import org.argeo.security.ui.admin.internal.UserNameLP;
+import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener;
+import org.argeo.security.ui.admin.internal.UserTableViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Composite;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
+import org.osgi.service.useradmin.UserAdminListener;
+
+/** List all groups with filter */
+public class GroupsView extends UsersView implements ArgeoNames {
+ public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ + ".groupsView";
+
+ /* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
+
+ // UI Objects
+ private UserTableViewer groupTableViewerCmp;
+ private TableViewer userViewer;
+ private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
+
+ private UserAdminListener listener;
+
+ @Override
+ public void createPartControl(Composite parent) {
+ parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+ // Define the displayed columns
+ columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
+ 150));
+ columnDefs.add(new ColumnDefinition(new UserNameLP(),
+ "Distinguished Name", 300));
+
+ // Create and configure the table
+ groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
+ | SWT.H_SCROLL | SWT.V_SCROLL, userAdminWrapper.getUserAdmin());
+
+ groupTableViewerCmp.setColumnDefinitions(columnDefs);
+ groupTableViewerCmp.populate(true, false);
+ groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
+
+ // Links
+ userViewer = groupTableViewerCmp.getTableViewer();
+ userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
+ getViewSite().setSelectionProvider(userViewer);
+
+ // Really?
+ groupTableViewerCmp.refresh();
+
+ // Drag and drop
+ int operations = DND.DROP_COPY | DND.DROP_MOVE;
+ Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
+ userViewer.addDragSupport(operations, tt, new UserDragListener(
+ userViewer));
+
+ // Register a useradmin listener
+ listener = new UserAdminListener() {
+ @Override
+ public void roleChanged(UserAdminEvent event) {
+ if (userViewer != null && !userViewer.getTable().isDisposed())
+ refresh();
+ }
+ };
+ userAdminWrapper.addListener(listener);
+ }
+
+ private class MyUserTableViewer extends UserTableViewer {
+ private static final long serialVersionUID = 8467999509931900367L;
+
+ private final String[] knownProps = { UserAdminConstants.KEY_UID,
+ UserAdminConstants.KEY_CN, UserAdminConstants.KEY_DN };
+
+ public MyUserTableViewer(Composite parent, int style,
+ UserAdmin userAdmin) {
+ super(parent, style, userAdmin);
+ }
+
+ @Override
+ protected List<User> listFilteredElements(String filter) {
+ Role[] roles;
+ try {
+ StringBuilder builder = new StringBuilder();
+ StringBuilder tmpBuilder = new StringBuilder();
+ if (UiAdminUtils.notNull(filter))
+ for (String prop : knownProps) {
+ tmpBuilder.append("(");
+ tmpBuilder.append(prop);
+ tmpBuilder.append("=*");
+ tmpBuilder.append(filter);
+ tmpBuilder.append("*)");
+ }
+ if (tmpBuilder.length() > 1) {
+ builder.append("(&(objectclass=groupOfNames)(|");
+ builder.append(tmpBuilder.toString());
+ builder.append("))");
+ } else
+ builder.append("(objectclass=groupOfNames)");
+ roles = userAdminWrapper.getUserAdmin().getRoles(
+ builder.toString());
+ } catch (InvalidSyntaxException e) {
+ throw new ArgeoException("Unable to get roles with filter: "
+ + filter, e);
+ }
+ List<User> users = new ArrayList<User>();
+ for (Role role : roles)
+ // if (role.getType() == Role.GROUP)
+ users.add((User) role);
+ return users;
+ }
+ }
+
+ public void refresh() {
+ groupTableViewerCmp.refresh();
+ }
+
+ // Override generic view methods
+ @Override
+ public void dispose() {
+ userAdminWrapper.removeListener(listener);
+ super.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ groupTableViewerCmp.setFocus();
+ }
+
+ /* DEPENDENCY INJECTION */
+ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+ this.userAdminWrapper = userAdminWrapper;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.security.ui.admin.internal.parts;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.security.ui.admin.SecurityAdminPlugin;
+import org.argeo.security.ui.admin.internal.ColumnDefinition;
+import org.argeo.security.ui.admin.internal.CommonNameLP;
+import org.argeo.security.ui.admin.internal.MailLP;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
+import org.argeo.security.ui.admin.internal.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UserAdminWrapper;
+import org.argeo.security.ui.admin.internal.UserDragListener;
+import org.argeo.security.ui.admin.internal.UserNameLP;
+import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener;
+import org.argeo.security.ui.admin.internal.UserTableViewer;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+import org.osgi.service.useradmin.UserAdminEvent;
+import org.osgi.service.useradmin.UserAdminListener;
+
+/** List all users with filter - based on Ldif userAdmin */
+public class UsersView extends ViewPart implements ArgeoNames {
+ // private final static Log log = LogFactory.getLog(UsersView.class);
+ public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ + ".usersView";
+
+ /* DEPENDENCY INJECTION */
+ private UserAdminWrapper userAdminWrapper;
+
+ private UserAdmin userAdmin;
+
+ // UI Objects
+ private UserTableViewer userTableViewerCmp;
+ private TableViewer userViewer;
+ private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
+
+ private UserAdminListener listener;
+
+ @Override
+ public void createPartControl(Composite parent) {
+
+ parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+ // Define the displayed columns
+ columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
+ 150));
+ columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150));
+ columnDefs.add(new ColumnDefinition(new UserNameLP(),
+ "Distinguished Name", 300));
+
+ // Create and configure the table
+ userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
+ | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
+ userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
+
+ userTableViewerCmp.setColumnDefinitions(columnDefs);
+ userTableViewerCmp.populate(true, false);
+
+ // Links
+ userViewer = userTableViewerCmp.getTableViewer();
+ userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
+ getViewSite().setSelectionProvider(userViewer);
+
+ // Really?
+ userTableViewerCmp.refresh();
+
+ // Drag and drop
+ int operations = DND.DROP_COPY | DND.DROP_MOVE;
+ Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
+ userViewer.addDragSupport(operations, tt, new UserDragListener(
+ userViewer));
+
+ // Register a useradmin listener
+ listener = new UserAdminListener() {
+ @Override
+ public void roleChanged(UserAdminEvent event) {
+ if (userViewer != null && !userViewer.getTable().isDisposed())
+ refresh();
+ }
+ };
+ userAdminWrapper.addListener(listener);
+ }
+
+ private class MyUserTableViewer extends UserTableViewer {
+ private static final long serialVersionUID = 8467999509931900367L;
+
+ private final String[] knownProps = { UserAdminConstants.KEY_UID,
+ UserAdminConstants.KEY_DN, UserAdminConstants.KEY_CN,
+ UserAdminConstants.KEY_FIRSTNAME,
+ UserAdminConstants.KEY_LASTNAME, UserAdminConstants.KEY_MAIL };
+
+ public MyUserTableViewer(Composite parent, int style,
+ UserAdmin userAdmin) {
+ super(parent, style, userAdmin);
+ }
+
+ @Override
+ protected List<User> listFilteredElements(String filter) {
+ Role[] roles;
+
+ try {
+ StringBuilder builder = new StringBuilder();
+
+ StringBuilder tmpBuilder = new StringBuilder();
+ if (UiAdminUtils.notNull(filter))
+ for (String prop : knownProps) {
+ tmpBuilder.append("(");
+ tmpBuilder.append(prop);
+ tmpBuilder.append("=*");
+ tmpBuilder.append(filter);
+ tmpBuilder.append("*)");
+ }
+ if (tmpBuilder.length() > 1) {
+ builder.append("(&(objectclass=inetOrgPerson)(|");
+ builder.append(tmpBuilder.toString());
+ builder.append("))");
+ } else
+ builder.append("(objectclass=inetOrgPerson)");
+ roles = userAdmin.getRoles(builder.toString());
+ } catch (InvalidSyntaxException e) {
+ throw new ArgeoException("Unable to get roles with filter: "
+ + filter, e);
+ }
+ List<User> users = new ArrayList<User>();
+ for (Role role : roles)
+ // if (role.getType() == Role.USER && role.getType() !=
+ // Role.GROUP)
+ users.add((User) role);
+ return users;
+ }
+ }
+
+ public void refresh() {
+ userTableViewerCmp.refresh();
+ }
+
+ // Override generic view methods
+ @Override
+ public void dispose() {
+ userAdminWrapper.removeListener(listener);
+ super.dispose();
+ }
+
+ @Override
+ public void setFocus() {
+ userTableViewerCmp.setFocus();
+ }
+
+ /* DEPENDENCY INJECTION */
+ public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
+ this.userAdminWrapper = userAdminWrapper;
+ this.userAdmin = userAdminWrapper.getUserAdmin();
+ }
+}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.security.ui.admin.views;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.ui.admin.SecurityAdminPlugin;
-import org.argeo.security.ui.admin.internal.ColumnDefinition;
-import org.argeo.security.ui.admin.internal.CommonNameLP;
-import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
-import org.argeo.security.ui.admin.internal.UserDragListener;
-import org.argeo.security.ui.admin.internal.UserNameLP;
-import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener;
-import org.argeo.security.ui.admin.internal.UserTableViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.widgets.Composite;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** List all groups with filter */
-public class GroupsView extends UsersView implements ArgeoNames {
- public final static String ID = SecurityAdminPlugin.PLUGIN_ID
- + ".groupsView";
-
- /* DEPENDENCY INJECTION */
- private UserAdmin userAdmin;
-
- // UI Objects
- private UserTableViewer groupTableViewerCmp;
- private TableViewer userViewer;
- private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
-
- @Override
- public void createPartControl(Composite parent) {
- parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
- // Define the displayed columns
- columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
- 150));
- columnDefs.add(new ColumnDefinition(new UserNameLP(),
- "Distinguished Name", 300));
-
- // Create and configure the table
- groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
- | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
-
- groupTableViewerCmp.setColumnDefinitions(columnDefs);
- groupTableViewerCmp.populate(true, false);
- groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
-
- // Links
- userViewer = groupTableViewerCmp.getTableViewer();
- userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
- getViewSite().setSelectionProvider(userViewer);
-
- // Really?
- groupTableViewerCmp.refresh();
-
- // Drag and drop
- int operations = DND.DROP_COPY | DND.DROP_MOVE;
- Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
- userViewer.addDragSupport(operations, tt, new UserDragListener(
- userViewer));
- }
-
- private class MyUserTableViewer extends UserTableViewer {
- private static final long serialVersionUID = 8467999509931900367L;
-
- private final String[] knownProps = { UserAdminConstants.KEY_UID,
- UserAdminConstants.KEY_CN, UserAdminConstants.KEY_DN };
-
- public MyUserTableViewer(Composite parent, int style,
- UserAdmin userAdmin) {
- super(parent, style, userAdmin);
- }
-
- @Override
- protected List<User> listFilteredElements(String filter) {
- Role[] roles;
- try {
- StringBuilder builder = new StringBuilder();
- StringBuilder tmpBuilder = new StringBuilder();
- if (UiAdminUtils.notNull(filter))
- for (String prop : knownProps) {
- tmpBuilder.append("(");
- tmpBuilder.append(prop);
- tmpBuilder.append("=*");
- tmpBuilder.append(filter);
- tmpBuilder.append("*)");
- }
- if (tmpBuilder.length() > 1) {
- builder.append("(&(objectclass=groupOfNames)(|");
- builder.append(tmpBuilder.toString());
- builder.append("))");
- } else
- builder.append("(objectclass=groupOfNames)");
- roles = userAdmin.getRoles(builder.toString());
- } catch (InvalidSyntaxException e) {
- throw new ArgeoException("Unable to get roles with filter: "
- + filter, e);
- }
- List<User> users = new ArrayList<User>();
- for (Role role : roles)
- // if (role.getType() == Role.GROUP)
- users.add((User) role);
- return users;
- }
- }
-
- public void refresh() {
- groupTableViewerCmp.refresh();
- }
-
- // Override generic view methods
- @Override
- public void dispose() {
- super.dispose();
- }
-
- @Override
- public void setFocus() {
- groupTableViewerCmp.setFocus();
- }
-
- /* DEPENDENCY INJECTION */
- public void setUserAdmin(UserAdmin userAdmin) {
- this.userAdmin = userAdmin;
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.security.ui.admin.views;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.ui.admin.SecurityAdminImages;
-import org.argeo.security.ui.admin.SecurityAdminPlugin;
-import org.argeo.security.ui.admin.internal.ColumnDefinition;
-import org.argeo.security.ui.admin.internal.CommonNameLP;
-import org.argeo.security.ui.admin.internal.MailLP;
-import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
-import org.argeo.security.ui.admin.internal.UserDragListener;
-import org.argeo.security.ui.admin.internal.UserNameLP;
-import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener;
-import org.argeo.security.ui.admin.internal.UserTableViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** List all users with filter - based on Ldif userAdmin */
-public class UsersView extends ViewPart implements ArgeoNames {
- // private final static Log log = LogFactory.getLog(UsersView.class);
- public final static String ID = SecurityAdminPlugin.PLUGIN_ID
- + ".usersView";
-
- /* DEPENDENCY INJECTION */
- private UserAdmin userAdmin;
-
- // UI Objects
- private UserTableViewer userTableViewerCmp;
- private TableViewer userViewer;
- private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
-
- @Override
- public void createPartControl(Composite parent) {
-
- parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
- // Define the displayed columns
- columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
- 150));
- columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150));
- columnDefs.add(new ColumnDefinition(new UserNameLP(),
- "Distinguished Name", 300));
-
- // Create and configure the table
- userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
- | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
- userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
-
- userTableViewerCmp.setColumnDefinitions(columnDefs);
- userTableViewerCmp.populate(true, false);
-
- // Links
- userViewer = userTableViewerCmp.getTableViewer();
- userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
- getViewSite().setSelectionProvider(userViewer);
-
- // Really?
- userTableViewerCmp.refresh();
-
- // Drag and drop
- int operations = DND.DROP_COPY | DND.DROP_MOVE;
- Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
- userViewer.addDragSupport(operations, tt, new UserDragListener(
- userViewer));
-
- // FIXME insure the group and person icons are registered before calling
- // the open editor
- @SuppressWarnings("unused")
- Image dummyImg = SecurityAdminImages.ICON_GROUP;
- dummyImg = SecurityAdminImages.ICON_USER;
- }
-
- private class MyUserTableViewer extends UserTableViewer {
- private static final long serialVersionUID = 8467999509931900367L;
-
- private final String[] knownProps = { UserAdminConstants.KEY_UID,
- UserAdminConstants.KEY_DN, UserAdminConstants.KEY_CN,
- UserAdminConstants.KEY_FIRSTNAME,
- UserAdminConstants.KEY_LASTNAME, UserAdminConstants.KEY_MAIL };
-
- public MyUserTableViewer(Composite parent, int style,
- UserAdmin userAdmin) {
- super(parent, style, userAdmin);
- }
-
- @Override
- protected List<User> listFilteredElements(String filter) {
- Role[] roles;
-
- try {
- StringBuilder builder = new StringBuilder();
-
- StringBuilder tmpBuilder = new StringBuilder();
- if (UiAdminUtils.notNull(filter))
- for (String prop : knownProps) {
- tmpBuilder.append("(");
- tmpBuilder.append(prop);
- tmpBuilder.append("=*");
- tmpBuilder.append(filter);
- tmpBuilder.append("*)");
- }
- if (tmpBuilder.length() > 1) {
- builder.append("(&(objectclass=inetOrgPerson)(|");
- builder.append(tmpBuilder.toString());
- builder.append("))");
- } else
- builder.append("(objectclass=inetOrgPerson)");
- roles = userAdmin.getRoles(builder.toString());
- } catch (InvalidSyntaxException e) {
- throw new ArgeoException("Unable to get roles with filter: "
- + filter, e);
- }
- List<User> users = new ArrayList<User>();
- for (Role role : roles)
- // if (role.getType() == Role.USER && role.getType() !=
- // Role.GROUP)
- users.add((User) role);
- return users;
- }
- }
-
- public void refresh() {
- userTableViewerCmp.refresh();
- }
-
- // Override generic view methods
- @Override
- public void dispose() {
- super.dispose();
- // try {
- // if (userTransaction != null
- // && userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
- // userTransaction.rollback();
- // } catch (Exception e) {
- // log.error("Cannot clean transaction", e);
- // }
- }
-
- @Override
- public void setFocus() {
- userTableViewerCmp.setFocus();
- }
-
- /* DEPENDENCY INJECTION */
- public void setUserAdmin(UserAdmin userAdmin) {
- this.userAdmin = userAdmin;
- }
-}
\ No newline at end of file