X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Fviews%2FUsersView.java;h=31586085bddbd62969e627d2b6c39f11e52055f2;hb=94c54deff25c97eb8143594c15c2a3dea06c5811;hp=73f6a19d6f1417315ef98da5fbc1105e4ae5fd9f;hpb=08fac35eeedb151c2fd1cc85ed4a36adf66e02fc;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java index 73f6a19d6..31586085b 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java @@ -20,30 +20,17 @@ import java.util.List; 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; @@ -59,267 +46,71 @@ public class UsersView extends ViewPart implements ArgeoNames { 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 columnDefs = new ArrayList(); - // The displayed columns - /** Overwrite to display other columns */ - public List getColumnsDef() { - List columnDefs = new ArrayList(); - - // 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 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 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 users = new ArrayList(); 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 */