+++ /dev/null
-package org.argeo.security.ui.admin;
-
-/** Temporary centralization of the user admin constants */
-public interface UserAdminConstants {
-
- public final static String KEY_UID = "uid";
- public final static String KEY_CN = "cn";
- public final static String KEY_MAIL = "mail";
-
-}
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.utils.ViewerUtils;
import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.ui.admin.SecurityAdminImages;
-import org.argeo.security.ui.admin.UserAdminConstants;
-import org.eclipse.jface.layout.TableColumnLayout;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
+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.RoleIconLP;
+import org.argeo.security.ui.admin.internal.UserAdminConstants;
+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.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.AbstractFormPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
+import org.osgi.service.useradmin.Group;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdmin;
-/** Display/edit the properties of the groups */
+/** Display/edit main properties of a given group */
public class GroupMainPage extends FormPage implements ArgeoNames {
final static String ID = "GroupEditor.mainPage";
protected void createFormContent(final IManagedForm mf) {
try {
ScrolledForm form = mf.getForm();
+ form.getBody().getParent().setLayoutData(EclipseUiUtils.fillAll());
+ form.setExpandHorizontal(true);
refreshFormTitle(form);
- GridLayout mainLayout = new GridLayout(1, true);
- form.getBody().setLayout(mainLayout);
-
+ // GridLayout mainLayout = new GridLayout(1, true);
createGeneralPart(form.getBody());
} catch (RepositoryException e) {
throw new ArgeoException("Cannot create form content", e);
/** Creates the general section */
protected void createGeneralPart(Composite parent)
throws RepositoryException {
+ parent.setLayout(new GridLayout());
+
FormToolkit tk = getManagedForm().getToolkit();
Section section = tk.createSection(parent, Section.TITLE_BAR);
- section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ section.setLayoutData(EclipseUiUtils.fillAll());
section.setText("Members of "
+ editor.getProperty(UserAdminConstants.KEY_CN));
- Composite body = tk.createComposite(section, SWT.WRAP);
+
+ // Composite body = tk.createComposite(section, SWT.NONE);
+ Composite body = new Composite(section, SWT.NO_FOCUS);
section.setClient(body);
body.setLayoutData(EclipseUiUtils.fillAll());
- body.setLayout(new GridLayout());
- new Label(body, SWT.NONE)
- .setText("Display a table with members for this group");
-
- // final Text firstName = createLT(body, "First name",
- // getProperty(ARGEO_FIRST_NAME));
- // final Text lastName = createLT(body, "Last name",
- // getProperty(ARGEO_LAST_NAME));
- // final Text email = createLT(body, "Email",
- // editor.getProperty(UserAdminConstants.KEY_MAIL));
- // // final Text description = createLMT(body, "Description",
- // getProperty(Property.JCR_DESCRIPTION));
+ createMemberPart(body);
// create form part (controller)
AbstractFormPart part = new SectionPart(section) {
public void commit(boolean onSave) {
- // TODO check mail validity
- // editor.setProperty(UserAdminConstants.KEY_MAIL,
- // email.getText());
-
- // userProfile.getSession().getWorkspace().getVersionManager()
- // .checkout(userProfile.getPath());
- // userProfile.setProperty(Property.JCR_TITLE,
- // commonName.getText());
- // userProfile.setProperty(ARGEO_FIRST_NAME,
- // firstName.getText());
- // userProfile
- // .setProperty(ARGEO_LAST_NAME, lastName.getText());
- // userProfile.setProperty(ARGEO_PRIMARY_EMAIL,
- // email.getText());
- // userProfile.setProperty(Property.JCR_DESCRIPTION,
- // description.getText());
- // userProfile.getSession().save();
- // userProfile.getSession().getWorkspace().getVersionManager()
- // .checkin(userProfile.getPath());
super.commit(onSave);
}
};
- // if (username != null)
- // username.addModifyListener(new FormPartML(part));
- // commonName.addModifyListener(new FormPartML(part));
- // firstName.addModifyListener(new FormPartML(part));
- // lastName.addModifyListener(new FormPartML(part));
- // email.addModifyListener(new FormPartML(part));
getManagedForm().addPart(part);
}
- private void refreshFormTitle(ScrolledForm form) throws RepositoryException {
- // form.setText(getProperty(Property.JCR_TITLE)
- // + (userProfile.getProperty(ARGEO_ENABLED).getBoolean() ? ""
- // : " [DISABLED]"));
- }
-
- // /** @return the property, or the empty string if not set */
- // protected String getProperty(String name) throws RepositoryException {
- // return userProfile.hasProperty(name) ? userProfile.getProperty(name)
- // .getString() : "";
- // }
-
- /** Creates label and text. */
- protected Text createLT(Composite body, String label, String value) {
- FormToolkit toolkit = getManagedForm().getToolkit();
- Label lbl = toolkit.createLabel(body, label);
- lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
- Text text = toolkit.createText(body, value, SWT.BORDER);
- text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- return text;
- }
-
- /** Creates label and multiline text. */
- protected Text createLMT(Composite body, String label, String value) {
- FormToolkit toolkit = getManagedForm().getToolkit();
- Label lbl = toolkit.createLabel(body, label);
- lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
- Text text = toolkit.createText(body, value, SWT.BORDER | SWT.MULTI);
- text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
- return text;
- }
-
- private class FormPartML implements ModifyListener {
- private static final long serialVersionUID = 6299808129505381333L;
- private AbstractFormPart formPart;
+ // UI Objects
+ private UserTableViewer userTableViewerCmp;
+ private TableViewer userViewer;
+ private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
- public FormPartML(AbstractFormPart generalPart) {
- this.formPart = generalPart;
- }
+ public void createMemberPart(Composite parent) {
+ // parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+ // parent2.setLayoutData(EclipseUiUtils.fillAll());
+ // Composite parent = new Composite(parent2, SWT.NO_FOCUS);
+ // parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
+ // parent.setLayoutData(EclipseUiUtils.fillAll());
- public void modifyText(ModifyEvent e) {
- formPart.markDirty();
- }
- }
-
- // Manage the user table
- public List<ColumnDefinition> getColumnsDef() {
- List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
-
- // Icon
- columnDefs.add(new ColumnDefinition(new UserNameLP(), "", 0, 26));
- // Distinguished Name
- columnDefs.add(new ColumnDefinition(new CommonNameLP(),
- "Distinguished Name", 150));
- // Displayed name
+ parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+ // Define the displayed columns
+ columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24));
+ columnDefs.add(new ColumnDefinition(new UserNameLP(),
+ "Distinguished Name", 240));
columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
150));
- return columnDefs;
- }
+ columnDefs.add(new ColumnDefinition(new MailLP(), "Primary Mail", 150));
- private void createUserTable(Composite parent) {
+ // Create and configure the table
+ userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
+ | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
- // Main Layout
- GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
- layout.verticalSpacing = 5;
- parent.setLayout(layout);
-
- // usersViewer = createTableViewer(parent);
- // usersViewer.setContentProvider(new UsersContentProvider());
+ userTableViewerCmp.setColumnDefinitions(columnDefs);
+ userTableViewerCmp.populate(true, false);
+ // userTableViewerCmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+ // false, false));
+ userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
+ // Links
+ userViewer = userTableViewerCmp.getTableViewer();
+ userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
// Really?
- refreshFilteredList(null);
-
- // Configure
- // usersViewer.addDoubleClickListener(new ViewDoubleClickListener());
- // getViewSite().setSelectionProvider(usersViewer);
- }
-
- private TableViewer createTableViewer(final Composite parent) {
- int style = SWT.H_SCROLL | SWT.V_SCROLL;
-
- Composite tableCmp = new Composite(parent, SWT.NO_FOCUS);
- tableCmp.setLayoutData(EclipseUiUtils.fillAll());
-
- Table table = new Table(tableCmp, style);
- TableViewer viewer = new TableViewer(table);
- table.setLinesVisible(true);
- table.setHeaderVisible(true);
-
- TableColumnLayout tableColumnLayout = new TableColumnLayout();
- TableViewerColumn column;
-
- // Create other columns
- List<ColumnDefinition> colDefs = getColumnsDef();
- for (ColumnDefinition colDef : colDefs) {
- column = ViewerUtils.createTableViewerColumn(viewer, colDef.label,
- SWT.NONE, colDef.weight);
- column.setLabelProvider(colDef.provider);
- tableColumnLayout.setColumnData(column.getColumn(),
- new ColumnWeightData(colDef.weight, colDef.minWidth, true));
- }
-
- tableCmp.setLayout(tableColumnLayout);
- return viewer;
- }
-
- @Override
- public void dispose() {
- super.dispose();
- }
-
- private class UsersContentProvider implements IStructuredContentProvider {
- private static final long serialVersionUID = 1L;
-
- public Object[] getElements(Object inputElement) {
- return (Object[]) inputElement;
- }
-
- public void dispose() {
- }
-
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
- }
-
- /**
- * Refresh the user list: caller might overwrite in order to display a
- * subset of all users, typically to remove current user from the list
- */
- protected void refreshFilteredList(String filter) {
- // try {
- // // Role[] roles = userAdmin.getRoles(filter);
- // // List<User> users = new ArrayList<User>();
- // // for (Role role : roles)
- // // if (role.getType() == Role.USER && role.getType() != Role.GROUP)
- // // users.add((User) role);
- // // usersViewer.setInput(users.toArray());
- // } catch (InvalidSyntaxException e) {
- // throw new ArgeoException("Unable to get roles with filter: "
- // + filter, e);
- // }
- }
-
- // Local helpers
-
- private abstract class UseradminAbstractLP extends ColumnLabelProvider {
- private static final long serialVersionUID = 137336765024922368L;
-
- @Override
- public Font getFont(Object element) {
- // TODO manage fonts
- // // self
- // String username = getProperty(elem, ARGEO_USER_ID);
- // if (username.equals(session.getUserID()))
- // return bold;
- // // disabled
- // try {
- // Node userProfile = (Node) elem;
- // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
- // return italic;
- // else
- // return null;
- // } catch (RepositoryException e) {
- // throw new ArgeoException("Cannot get font for " + username, e);
- // }
- // }
-
- return super.getFont(element);
- }
-
- @Override
- public String getText(Object element) {
- User user = (User) element;
- return getText(user);
- }
-
- public abstract String getText(User user);
+ userTableViewerCmp.refresh();
}
- private class IconLP extends UseradminAbstractLP {
- private static final long serialVersionUID = 6550449442061090388L;
+ private class MyUserTableViewer extends UserTableViewer {
+ private static final long serialVersionUID = 8467999509931900367L;
- @Override
- public String getText(User user) {
- return "";
+ public MyUserTableViewer(Composite parent, int style,
+ UserAdmin userAdmin) {
+ super(parent, style, userAdmin, true);
}
@Override
- public Image getImage(Object element) {
- User user = (User) element;
- if (user.getType() == Role.GROUP)
- return SecurityAdminImages.ICON_GROUP;
- else
- return SecurityAdminImages.ICON_USER;
+ protected List<User> listFilteredElements(String filter) {
+ Group group = (Group) editor.getDisplayedUser();
+ Role[] roles = group.getMembers();
+ List<User> users = new ArrayList<User>();
+ for (Role role : roles)
+ // if (role.getType() == Role.GROUP)
+ users.add((User) role);
+ return users;
}
}
- private class UserNameLP extends UseradminAbstractLP {
- private static final long serialVersionUID = 6550449442061090388L;
-
- @Override
- public String getText(User user) {
- return user.getName();
- }
- }
-
- private class CommonNameLP extends UseradminAbstractLP {
- private static final long serialVersionUID = 5256703081044911941L;
-
- @Override
- public String getText(User user) {
- Object obj = user.getProperties().get(UserAdminConstants.KEY_CN);
- if (obj != null)
- return (String) obj;
- else
- return "";
- }
+ private void refreshFormTitle(ScrolledForm form) throws RepositoryException {
+ // form.setText(getProperty(Property.JCR_TITLE)
+ // + (userProfile.getProperty(ARGEO_ENABLED).getBoolean() ? ""
+ // : " [DISABLED]"));
}
- protected class ColumnDefinition {
- protected ColumnLabelProvider provider;
- protected String label;
- protected int weight;
- protected int minWidth;
-
- public ColumnDefinition(ColumnLabelProvider provider, String label,
- int weight) {
- this.provider = provider;
- this.label = label;
- this.weight = weight;
- this.minWidth = weight;
- }
-
- public ColumnDefinition(ColumnLabelProvider provider, String label,
- int weight, int minWidth) {
- this.provider = provider;
- this.label = label;
- this.weight = weight;
- this.minWidth = minWidth;
-
- }
- }
+ // private class FormPartML implements ModifyListener {
+ // private static final long serialVersionUID = 6299808129505381333L;
+ // private AbstractFormPart formPart;
+ //
+ // public FormPartML(AbstractFormPart generalPart) {
+ // this.formPart = generalPart;
+ // }
+ //
+ // public void modifyText(ModifyEvent e) {
+ // formPart.markDirty();
+ // }
+ // }
}
\ No newline at end of file
package org.argeo.security.ui.admin.editors;
import org.argeo.ArgeoException;
-import org.argeo.security.ui.admin.SecurityAdminImages;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
-import org.argeo.security.ui.admin.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdmin;
-/** Editor for an Argeo user. */
+/** Editor for a user, might be a user or a group. */
public class UserEditor extends FormEditor implements UserAdminConstants {
private static final long serialVersionUID = 8357851520380820241L;
setPartName(commonName != null ? commonName : "username");
}
+ /** Exposes the user (or group) that is displayed by the current editor */
+ protected User getDisplayedUser() {
+ return user;
+ }
+
protected void addPages() {
try {
-
+
if (user.getType() == Role.GROUP)
addPage(new GroupMainPage(this, userAdmin));
else
addPage(new UserMainPage(this));
-
-
-
+
} catch (Exception e) {
throw new ArgeoException("Cannot add pages", e);
}
import org.argeo.ArgeoException;
import org.argeo.jcr.ArgeoNames;
-import org.argeo.security.ui.admin.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+
+/** Centralize the colum definition for the various tables of the useradmin UI */
+public class ColumnDefinition {
+ private ColumnLabelProvider labelProvider;
+ private String label;
+ private int weight;
+ private int minWidth;
+
+ public ColumnDefinition(ColumnLabelProvider labelProvider, String label,
+ int weight, int minimumWidth) {
+ this.labelProvider = labelProvider;
+ this.label = label;
+ this.weight = weight;
+ this.minWidth = minimumWidth;
+ }
+
+ public ColumnDefinition(ColumnLabelProvider labelProvider, String label,
+ int weight) {
+ this.labelProvider = labelProvider;
+ this.label = label;
+ this.weight = weight;
+ this.minWidth = weight;
+ }
+
+ public ColumnLabelProvider getLabelProvider() {
+ return labelProvider;
+ }
+
+ public void setLabelProvider(ColumnLabelProvider labelProvider) {
+ this.labelProvider = labelProvider;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+ public int getWeight() {
+ return weight;
+ }
+
+ public void setWeight(int weight) {
+ this.weight = weight;
+ }
+
+ public int getMinWidth() {
+ return minWidth;
+ }
+
+ public void setMinWidth(int minWidth) {
+ this.minWidth = minWidth;
+ }
+}
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import org.osgi.service.useradmin.User;
+
+/** Simply declare a label provider that returns the common name of a user */
+public class CommonNameLP extends UserAdminAbstractLP {
+ private static final long serialVersionUID = 5256703081044911941L;
+
+ @Override
+ public String getText(User user) {
+ Object obj = user.getProperties().get(KEY_CN);
+ if (obj != null)
+ return (String) obj;
+ else
+ return "";
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import org.osgi.service.useradmin.User;
+
+/** Simply declare a label provider that returns the Primary Mail for a user */
+public class MailLP extends UserAdminAbstractLP {
+ private static final long serialVersionUID = 8329764452141982707L;
+
+ @Override
+ public String getText(User user) {
+ Object obj = user.getProperties().get(KEY_MAIL);
+ if (obj != null)
+ return (String) obj;
+ else
+ return "";
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import org.argeo.security.ui.admin.SecurityAdminImages;
+import org.eclipse.swt.graphics.Image;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+
+public class RoleIconLP extends UserAdminAbstractLP {
+ private static final long serialVersionUID = 6550449442061090388L;
+
+ @Override
+ public String getText(User user) {
+ return "";
+ }
+
+ @Override
+ public Image getImage(Object element) {
+ User user = (User) element;
+ if (user.getType() == Role.GROUP)
+ return SecurityAdminImages.ICON_GROUP;
+ else
+ return SecurityAdminImages.ICON_USER;
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import java.security.AccessController;
+import java.security.Principal;
+
+import javax.security.auth.Subject;
+import javax.security.auth.x500.X500Principal;
+
+/** First effort to centralize back end methods used by the user admin UI */
+public class UiAdminUtils {
+ public final static String getUsername() {
+ Subject subject = Subject.getSubject(AccessController.getContext());
+ Principal principal = subject.getPrincipals(X500Principal.class)
+ .iterator().next();
+ return principal.getName();
+
+ }
+
+ /*
+ * INTERNAL METHODS: Below methods are meant to stay here and are not part
+ * of a potential generic backend to manage the useradmin
+ */
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.widgets.Display;
+import org.osgi.service.useradmin.User;
+
+/**
+ * Utility class that add font modifications to a column label provider
+ * depending on the given user properties
+ */
+public abstract class UserAdminAbstractLP extends ColumnLabelProvider implements
+ UserAdminConstants {
+ private static final long serialVersionUID = 137336765024922368L;
+
+ // private Font italic;
+ private Font bold;
+
+ @Override
+ public Font getFont(Object element) {
+
+ // Self as bold
+ String selfUserName = UiAdminUtils.getUsername();
+ String userName = ((User) element).getName();
+ if (userName.equals(selfUserName))
+ return bold;
+
+ // Disabled as Italic
+ // Node userProfile = (Node) elem;
+ // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
+ // return italic;
+
+ return null;
+ // return super.getFont(element);
+ }
+
+ @Override
+ public String getText(Object element) {
+ User user = (User) element;
+ return getText(user);
+ }
+
+ public void setDisplay(Display display) {
+ // italic = JFaceResources.getFontRegistry().defaultFontDescriptor()
+ // .setStyle(SWT.ITALIC).createFont(display);
+ bold = JFaceResources.getFontRegistry().defaultFontDescriptor()
+ .setStyle(SWT.BOLD).createFont(display);
+ }
+
+ public abstract String getText(User user);
+}
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+/** Temporary centralization of the user admin constants */
+public interface UserAdminConstants {
+
+ public final static String KEY_UID = "uid";
+ public final static String KEY_CN = "cn";
+ public final static String KEY_MAIL = "mail";
+
+}
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import org.osgi.service.useradmin.User;
+
+/** Simply declare a label provider that returns the username of a user */
+public class UserNameLP extends UserAdminAbstractLP {
+ private static final long serialVersionUID = 6550449442061090388L;
+
+ @Override
+ public String getText(User user) {
+ return user.getName();
+ }
+}
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
+import org.argeo.security.ui.admin.editors.UserEditor;
+import org.argeo.security.ui.admin.editors.UserEditorInput;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.osgi.service.useradmin.User;
+
+/**
+ * Default double click listener for the various user tables, will open the
+ * clicked item in the editor
+ */
+public class UserTableDefaultDClickListener implements IDoubleClickListener {
+ public void doubleClick(DoubleClickEvent evt) {
+ if (evt.getSelection().isEmpty())
+ return;
+ Object obj = ((IStructuredSelection) evt.getSelection())
+ .getFirstElement();
+ User user = (User) obj;
+ // IWorkbench iw =
+ IWorkbenchWindow iww = WorkbenchUiPlugin.getDefault().getWorkbench()
+ .getActiveWorkbenchWindow();
+ IWorkbenchPage iwp = iww.getActivePage();
+ UserEditorInput uei = new UserEditorInput(user.getName());
+
+ try {
+ // IEditorPart editor =
+ iwp.openEditor(uei, UserEditor.ID);
+ } catch (PartInitException pie) {
+ throw new ArgeoException("Unable to open UserEditor for " + user,
+ pie);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.eclipse.ui.utils.ViewerUtils;
+import org.eclipse.jface.layout.TableColumnLayout;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+
+/**
+ * Generic composite that display a filter and a table viewer to display users
+ * (can also be groups)
+ *
+ * Warning: this class does not extends <code>TableViewer</code>. Use the
+ * getTableViewer to acces it.
+ *
+ */
+public class UserTableViewer extends Composite {
+ private static final long serialVersionUID = -7385959046279360420L;
+
+ // Context
+ private UserAdmin userAdmin;
+
+ // Configuration
+ private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
+ private boolean hasFilter;
+ private boolean preventTableLayout = false;
+ private boolean hasSelectionColumn;
+ private int tableStyle;
+
+ // Local UI Objects
+ private TableViewer usersViewer;
+ private Text filterTxt;
+
+ /* EXPOSED METHODS */
+
+ /**
+ * @param parent
+ * @param style
+ * @param userAdmin
+ */
+ public UserTableViewer(Composite parent, int style, UserAdmin userAdmin) {
+ super(parent, SWT.NO_FOCUS);
+ this.tableStyle = style;
+ this.userAdmin = userAdmin;
+ }
+
+ // TODO workaround the bug of the table layout in the Form
+ public UserTableViewer(Composite parent, int style, UserAdmin userAdmin,
+ boolean preventTableLayout) {
+ super(parent, SWT.NO_FOCUS);
+ this.tableStyle = style;
+ this.userAdmin = userAdmin;
+ this.preventTableLayout = preventTableLayout;
+ }
+
+ /** This must be called before the call to populate method */
+ public void setColumnDefinitions(List<ColumnDefinition> columnDefinitions) {
+ this.columnDefs = columnDefinitions;
+ }
+
+ /**
+ *
+ * @param addFilter
+ * choose to add a field to filter results or not
+ * @param addSelection
+ * choose to add a column to select some of the displayed results
+ * or not
+ */
+ public void populate(boolean addFilter, boolean addSelection) {
+ // initialization
+ Composite parent = this;
+ hasFilter = addFilter;
+ hasSelectionColumn = addSelection;
+
+ // Main Layout
+ GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
+ layout.verticalSpacing = 5;
+ this.setLayout(layout);
+ if (hasFilter)
+ createFilterPart(parent);
+
+ Composite tableComp = new Composite(parent, SWT.NO_FOCUS);
+ tableComp.setLayoutData(EclipseUiUtils.fillAll());
+ usersViewer = createTableViewer(tableComp);
+
+ usersViewer.setContentProvider(new UsersContentProvider());
+ }
+
+ /** Enable access to the selected users or groups */
+ public List<User> getSelectedUsers() {
+ if (hasSelectionColumn) {
+ Object[] elements = ((CheckboxTableViewer) usersViewer)
+ .getCheckedElements();
+
+ List<User> result = new ArrayList<User>();
+ for (Object obj : elements) {
+ result.add((User) obj);
+ }
+ return result;
+ } else
+ throw new ArgeoException("Unvalid request: no selection column "
+ + "has been created for the current table");
+ }
+
+ /** Returns the User table viewer, typically to add doubleclick listener */
+ public TableViewer getTableViewer() {
+ return usersViewer;
+ }
+
+ /**
+ * Force the refresh of the underlying table using the current filter string
+ * if relevant
+ */
+ public void refresh() {
+ String filter = hasFilter ? filterTxt.getText() : null;
+ if ("".equals(filter.trim()))
+ filter = null;
+ refreshFilteredList(filter);
+ }
+
+ // /** Returns filter String or null if no filter Text widget */
+ // private String getFilterString() {
+ // return hasFilter ? filterTxt.getText() : null;
+ // }
+
+ /**
+ * Build repository request : caller might overwrite in order to display a
+ * subset of all users
+ */
+ protected List<User> listFilteredElements(String filter) {
+ List<User> users = new ArrayList<User>();
+ try {
+ Role[] roles = userAdmin.getRoles(filter);
+ // Display all users and groups
+ for (Role role : roles)
+ // if (role.getType() == Role.USER && role.getType() !=
+ // Role.GROUP)
+ users.add((User) role);
+ } catch (InvalidSyntaxException e) {
+ throw new ArgeoException("Unable to get roles with filter: "
+ + filter, e);
+ }
+ return users;
+ }
+
+ /* GENERIC COMPOSITE METHODS */
+ @Override
+ public boolean setFocus() {
+ if (hasFilter)
+ return filterTxt.setFocus();
+ else
+ return usersViewer.getTable().setFocus();
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ }
+
+ /* LOCAL CLASSES AND METHODS */
+ // Will be usefull to rather use a virtual table viewer
+ private void refreshFilteredList(String filter) {
+ List<User> users = listFilteredElements(filter);
+ usersViewer.setInput(users.toArray());
+ }
+
+ private class UsersContentProvider implements IStructuredContentProvider {
+ private static final long serialVersionUID = 1L;
+
+ public Object[] getElements(Object inputElement) {
+ return (Object[]) inputElement;
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ }
+
+ /* MANAGE FILTER */
+ private void createFilterPart(Composite parent) {
+ // Text Area for the filter
+ filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH
+ | SWT.ICON_CANCEL);
+ filterTxt.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_FILL));
+ filterTxt.addModifyListener(new ModifyListener() {
+ private static final long serialVersionUID = 1L;
+
+ public void modifyText(ModifyEvent event) {
+ refreshFilteredList(filterTxt.getText());
+ }
+ });
+ }
+
+ private TableViewer createTableViewer(final Composite parent) {
+
+ int style = tableStyle | SWT.H_SCROLL | SWT.V_SCROLL;
+ if (hasSelectionColumn)
+ style = style | SWT.CHECK;
+ Table table = new Table(parent, style);
+ TableColumnLayout layout = new TableColumnLayout();
+
+ // TODO the table layout does not works with the scrolled form
+
+ if (preventTableLayout) {
+ parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+ table.setLayoutData(EclipseUiUtils.fillAll());
+ } else
+ parent.setLayout(layout);
+
+ TableViewer viewer;
+ if (hasSelectionColumn)
+ viewer = new CheckboxTableViewer(table);
+ else
+ viewer = new TableViewer(table);
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ TableViewerColumn column;
+ int offset = 0;
+ if (hasSelectionColumn) {
+ offset = 1;
+ column = ViewerUtils.createTableViewerColumn(viewer, "", SWT.NONE,
+ 25);
+ column.setLabelProvider(new ColumnLabelProvider() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public String getText(Object element) {
+ return null;
+ }
+ });
+ SelectionAdapter selectionAdapter = new SelectionAdapter() {
+ private static final long serialVersionUID = 1L;
+
+ boolean allSelected = false;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ allSelected = !allSelected;
+ ((CheckboxTableViewer) usersViewer)
+ .setAllChecked(allSelected);
+ }
+ };
+ column.getColumn().addSelectionListener(selectionAdapter);
+ }
+
+ // NodeViewerComparator comparator = new NodeViewerComparator();
+ // TODO enable the sort by click on the header
+ int i = offset;
+ for (ColumnDefinition colDef : columnDefs)
+ createTableColumn(viewer, layout, colDef);
+
+ // column = ViewerUtils.createTableViewerColumn(viewer,
+ // colDef.getHeaderLabel(), SWT.NONE, colDef.getColumnSize());
+ // column.setLabelProvider(new CLProvider(colDef.getPropertyName()));
+ // column.getColumn().addSelectionListener(
+ // JcrUiUtils.getNodeSelectionAdapter(i,
+ // colDef.getPropertyType(), colDef.getPropertyName(),
+ // comparator, viewer));
+ // i++;
+ // }
+
+ // IMPORTANT: initialize comparator before setting it
+ // ColumnDefinition firstCol = colDefs.get(0);
+ // comparator.setColumn(firstCol.getPropertyType(),
+ // firstCol.getPropertyName());
+ // viewer.setComparator(comparator);
+
+ return viewer;
+ }
+
+ /** Default creation of a column for a user table */
+ private TableViewerColumn createTableColumn(TableViewer tableViewer,
+ TableColumnLayout layout, ColumnDefinition columnDef) {
+
+ boolean resizable = true;
+ TableViewerColumn tvc = new TableViewerColumn(tableViewer, SWT.NONE);
+ TableColumn column = tvc.getColumn();
+
+ column.setText(columnDef.getLabel());
+ column.setWidth(columnDef.getMinWidth());
+ column.setResizable(resizable);
+
+ ColumnLabelProvider lp = columnDef.getLabelProvider();
+ // add a reference to the display to enable font management
+ if (lp instanceof UserAdminAbstractLP)
+ ((UserAdminAbstractLP) lp).setDisplay(tableViewer.getTable()
+ .getDisplay());
+ tvc.setLabelProvider(lp);
+
+ layout.setColumnData(column, new ColumnWeightData(
+ columnDef.getWeight(), columnDef.getMinWidth(), resizable));
+
+ return tvc;
+ }
+}
\ No newline at end of file
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.UserAdminConstants;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.argeo.security.ui.admin.internal.ColumnDefinition;
+import org.argeo.security.ui.admin.internal.CommonNameLP;
+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.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";
- // The displayed columns
- /** Overwrite to display other columns */
- public List<ColumnDefinition> getColumnsDef() {
- List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
- // Group ID
+ /* 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 UserNameLP(),
"Distinguished Name", 200));
- // Displayed name
columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
150));
- return columnDefs;
- }
- /**
- * Refresh the user list: caller might overwrite in order to display a
- * subset of all users, typically to remove current user from the list
- */
- protected void refreshFilteredList(String filter) {
- try {
- Role[] roles = userAdmin().getRoles(filter);
- List<User> users = new ArrayList<User>();
- for (Role role : roles)
- if (role.getType() == Role.GROUP)
- users.add((User) role);
- getViewer().setInput(users.toArray());
- } catch (InvalidSyntaxException e) {
- throw new ArgeoException("Unable to get roles with filter: "
- + filter, e);
- }
- }
+ // Create and configure the table
+ userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
+ | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
- private abstract class GroupAdminAbstractLP extends ColumnLabelProvider {
- private static final long serialVersionUID = 137336765024922368L;
+ userTableViewerCmp.setColumnDefinitions(columnDefs);
+ userTableViewerCmp.populate(true, false);
+ userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
- @Override
- public String getText(Object element) {
- User user = (User) element;
- return getText(user);
- }
+ // Links
+ userViewer = userTableViewerCmp.getTableViewer();
+ userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
+ getViewSite().setSelectionProvider(userViewer);
- public abstract String getText(User user);
+ // Really?
+ userTableViewerCmp.refresh();
}
- private class UserNameLP extends GroupAdminAbstractLP {
- private static final long serialVersionUID = 6550449442061090388L;
+ private class MyUserTableViewer extends UserTableViewer {
+ private static final long serialVersionUID = 8467999509931900367L;
+
+ public MyUserTableViewer(Composite parent, int style,
+ UserAdmin userAdmin) {
+ super(parent, style, userAdmin);
+ }
@Override
- public String getText(User user) {
- return user.getName();
+ protected List<User> listFilteredElements(String filter) {
+ Role[] roles;
+ try {
+ roles = userAdmin.getRoles(filter);
+ } 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;
}
}
- private class CommonNameLP extends GroupAdminAbstractLP {
- private static final long serialVersionUID = 5256703081044911941L;
+ // Override generic view methods
+ @Override
+ public void dispose() {
+ super.dispose();
+ }
- @Override
- public String getText(User user) {
- Object obj = user.getProperties().get(UserAdminConstants.KEY_CN);
- if (obj != null)
- return (String) obj;
- else
- return "";
- }
+ @Override
+ public void setFocus() {
+ userTableViewerCmp.setFocus();
}
+ /* DEPENDENCY INJECTION */
+ public void setUserAdmin(UserAdmin userAdmin) {
+ this.userAdmin = userAdmin;
+ }
}
\ No newline at end of file
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.utils.ViewerUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
-import org.argeo.security.ui.admin.editors.UserEditor;
-import org.argeo.security.ui.admin.editors.UserEditorInput;
-import org.eclipse.jface.layout.TableColumnLayout;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
+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.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.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.ViewPart;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.useradmin.Role;
private UserAdmin userAdmin;
// UI Objects
- private TableViewer usersViewer;
- private Text filterTxt;
- private Font italic;
- private Font bold;
+ private UserTableViewer userTableViewerCmp;
+ private TableViewer userViewer;
+ private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
- // The displayed columns
- /** Overwrite to display other columns */
- public List<ColumnDefinition> getColumnsDef() {
- List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
-
- // User ID
+ @Override
+ public void createPartControl(Composite parent) {
+ parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+ // Define the displayed columns
columnDefs.add(new ColumnDefinition(new UserNameLP(),
"Distinguished Name", 200));
- // Displayed name
columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
150));
- // E-mail
columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150));
- return columnDefs;
- }
- @Override
- public void setFocus() {
- // TODO Auto-generated method stub
- }
+ // Create and configure the table
+ userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
+ | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
+ userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
- protected Viewer getViewer() {
- return usersViewer;
- }
+ userTableViewerCmp.setColumnDefinitions(columnDefs);
+ userTableViewerCmp.populate(true, false);
- @Override
- public void createPartControl(Composite parent) {
- // cache UI Objects
- italic = EclipseUiUtils.getItalicFont(parent);
- bold = EclipseUiUtils.getBoldFont(parent);
-
- // Main Layout
- GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
- layout.verticalSpacing = 5;
- parent.setLayout(layout);
-
- usersViewer = createTableViewer(parent);
- usersViewer.setContentProvider(new UsersContentProvider());
+ // Links
+ userViewer = userTableViewerCmp.getTableViewer();
+ userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
+ getViewSite().setSelectionProvider(userViewer);
// Really?
- refreshFilteredList(null);
-
- // Configure
- usersViewer.addDoubleClickListener(new ViewDoubleClickListener());
- getViewSite().setSelectionProvider(usersViewer);
+ userTableViewerCmp.refresh();
}
- public void refresh() {
- this.getSite().getShell().getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- refreshFilteredList(null);
- }
- });
- }
+ private class MyUserTableViewer extends UserTableViewer {
+ private static final long serialVersionUID = 8467999509931900367L;
- class ViewDoubleClickListener implements IDoubleClickListener {
- public void doubleClick(DoubleClickEvent evt) {
- if (evt.getSelection().isEmpty())
- return;
- Object obj = ((IStructuredSelection) evt.getSelection())
- .getFirstElement();
- User user = (User) obj;
- IWorkbenchWindow iww = UsersView.this.getSite()
- .getWorkbenchWindow();
- IWorkbenchPage iwp = iww.getActivePage();
- UserEditorInput uei = new UserEditorInput(user.getName());
+ public MyUserTableViewer(Composite parent, int style,
+ UserAdmin userAdmin) {
+ super(parent, style, userAdmin);
+ }
+ @Override
+ protected List<User> listFilteredElements(String filter) {
+ Role[] roles;
try {
- // IEditorPart editor =
- iwp.openEditor(uei, UserEditor.ID);
- } catch (PartInitException pie) {
- throw new ArgeoException("Unable to open UserEditor for "
- + user, pie);
+ roles = userAdmin.getRoles(filter);
+ } catch (InvalidSyntaxException e) {
+ throw new ArgeoException("Unable to get roles with filter: "
+ + filter, e);
}
- }
- }
-
- private TableViewer createTableViewer(final Composite parent) {
- int style = SWT.H_SCROLL | SWT.V_SCROLL;
-
- Composite tableCmp = new Composite(parent, SWT.NO_FOCUS);
- tableCmp.setLayoutData(EclipseUiUtils.fillAll());
-
- Table table = new Table(tableCmp, style);
- TableViewer viewer = new TableViewer(table);
- table.setLinesVisible(true);
- table.setHeaderVisible(true);
-
- TableColumnLayout tableColumnLayout = new TableColumnLayout();
- TableViewerColumn column;
-
- // Create other columns
- List<ColumnDefinition> colDefs = getColumnsDef();
- for (ColumnDefinition colDef : colDefs) {
- column = ViewerUtils.createTableViewerColumn(viewer, colDef.label,
- SWT.NONE, colDef.weight);
- column.setLabelProvider(colDef.provider);
- tableColumnLayout.setColumnData(column.getColumn(),
- new ColumnWeightData(colDef.weight, colDef.minWidth, true));
- }
-
- tableCmp.setLayout(tableColumnLayout);
- return viewer;
- }
-
- @Override
- public void dispose() {
- super.dispose();
- }
-
- private class UsersContentProvider implements IStructuredContentProvider {
- private static final long serialVersionUID = 1L;
-
- public Object[] getElements(Object inputElement) {
- return (Object[]) inputElement;
- }
-
- public void dispose() {
- }
-
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
- }
-
- // /* MANAGE FILTER */
- // private void createFilterPart(Composite parent) {
- // // Text Area for the filter
- // filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH
- // | SWT.ICON_CANCEL);
- // filterTxt.setMessage(filterHelpMsg);
- // filterTxt.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
- // | GridData.HORIZONTAL_ALIGN_FILL));
- // filterTxt.addModifyListener(new ModifyListener() {
- // private static final long serialVersionUID = 1L;
- //
- // public void modifyText(ModifyEvent event) {
- // refreshFilteredList();
- // }
- // });
- // }
-
- /**
- * Refresh the user list: caller might overwrite in order to display a
- * subset of all users, typically to remove current user from the list
- */
- protected void refreshFilteredList(String filter) {
- try {
- Role[] roles = userAdmin.getRoles(filter);
List<User> users = new ArrayList<User>();
for (Role role : roles)
if (role.getType() == Role.USER && role.getType() != Role.GROUP)
users.add((User) role);
- usersViewer.setInput(users.toArray());
- } catch (InvalidSyntaxException e) {
- throw new ArgeoException("Unable to get roles with filter: "
- + filter, e);
- }
- }
-
- // Local helpers
-
- private abstract class UseradminAbstractLP extends ColumnLabelProvider {
- private static final long serialVersionUID = 137336765024922368L;
-
- @Override
- public Font getFont(Object element) {
- // TODO manage fonts
- // // self
- // String username = getProperty(elem, ARGEO_USER_ID);
- // if (username.equals(session.getUserID()))
- // return bold;
- // // disabled
- // try {
- // Node userProfile = (Node) elem;
- // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
- // return italic;
- // else
- // return null;
- // } catch (RepositoryException e) {
- // throw new ArgeoException("Cannot get font for " + username, e);
- // }
- // }
-
- return super.getFont(element);
- }
-
- @Override
- public String getText(Object element) {
- User user = (User) element;
- return getText(user);
- }
-
- public abstract String getText(User user);
- }
-
- private class UserNameLP extends UseradminAbstractLP {
- private static final long serialVersionUID = 6550449442061090388L;
-
- @Override
- public String getText(User user) {
- return user.getName();
- }
- }
-
- private class CommonNameLP extends UseradminAbstractLP {
- private static final long serialVersionUID = 5256703081044911941L;
-
- @Override
- public String getText(User user) {
- Object obj = user.getProperties().get("cn");
- if (obj != null)
- return (String) obj;
- else
- return "";
+ return users;
}
}
- private class MailLP extends UseradminAbstractLP {
- private static final long serialVersionUID = 8329764452141982707L;
-
- @Override
- public String getText(User user) {
- Object obj = user.getProperties().get("mail");
- if (obj != null)
- return (String) obj;
- else
- return "";
- }
- }
-
- protected class ColumnDefinition {
- protected ColumnLabelProvider provider;
- protected String label;
- protected int weight;
- protected int minWidth;
-
- // public ColumnDefinition(ColumnLabelProvider provider, String label,
- // int weight, int minimumWidth) {
- // this.provider = provider;
- // this.label = label;
- // this.weight = weight;
- // this.minWidth = minimumWidth;
- // }
-
- public ColumnDefinition(ColumnLabelProvider provider, String label,
- int weight) {
- this.provider = provider;
- this.label = label;
- this.weight = weight;
- this.minWidth = weight;
- }
+ // Override generic view methods
+ @Override
+ public void dispose() {
+ super.dispose();
}
- protected UserAdmin userAdmin() {
- return userAdmin;
+ @Override
+ public void setFocus() {
+ userTableViewerCmp.setFocus();
}
/* DEPENDENCY INJECTION */