X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Feditors%2FGroupMainPage.java;h=f56f1cf670ee995fb80899a7a7892e9bfdc910ca;hb=f090d55a56532e0e6c2cde5760a451e56ef25f1c;hp=3d75b56fd1e6cf7739f6a81badf25de88c4e75c2;hpb=dd3d0d60b62c99810eca8619a376b66dbca5e44d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java index 3d75b56fd..f56f1cf67 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java @@ -22,27 +22,21 @@ import javax.jcr.RepositoryException; 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; @@ -52,18 +46,21 @@ import org.eclipse.ui.forms.editor.FormPage; 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"; private final UserEditor editor; - private UserAdmin userAdmin; + // Local configuration + private final int PRE_TITLE_INDENT = 10; + public GroupMainPage(FormEditor editor, UserAdmin userAdmin) { super(editor, ID, "Main"); this.editor = (UserEditor) editor; @@ -73,316 +70,165 @@ public class GroupMainPage extends FormPage implements ArgeoNames { protected void createFormContent(final IManagedForm mf) { try { ScrolledForm form = mf.getForm(); - refreshFormTitle(form); - GridLayout mainLayout = new GridLayout(1, true); - form.getBody().setLayout(mainLayout); - - createGeneralPart(form.getBody()); + refreshFormTitle(); + + // Body + Composite body = form.getBody(); + GridLayout mainLayout = new GridLayout(); + body.setLayout(mainLayout); + appendOverviewPart(body); + appendMembersPart(body); } catch (RepositoryException e) { throw new ArgeoException("Cannot create form content", e); } } /** Creates the general section */ - protected void createGeneralPart(Composite parent) - throws RepositoryException { + protected void appendOverviewPart(Composite parent) { FormToolkit tk = getManagedForm().getToolkit(); - Section section = tk.createSection(parent, Section.TITLE_BAR); - section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - section.setText("Members of " - + editor.getProperty(UserAdminConstants.KEY_CN)); - Composite body = tk.createComposite(section, SWT.WRAP); - section.setClient(body); - body.setLayoutData(EclipseUiUtils.fillAll()); + Composite body = addSection(tk, parent, "Main information"); + GridLayout layout = new GridLayout(2, false); + body.setLayout(layout); - body.setLayout(new GridLayout()); - new Label(body, SWT.NONE) - .setText("Display a table with members for this group"); + Text distinguishedName = createLT(body, "Group Name", + editor.getProperty(UserAdminConstants.KEY_UID)); + distinguishedName.setEnabled(false); - // 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)); + final Text commonName = createLT(body, "Common Name", + editor.getProperty(UserAdminConstants.KEY_CN)); + commonName.setEnabled(false); // create form part (controller) - AbstractFormPart part = new SectionPart(section) { + AbstractFormPart part = new SectionPart((Section) body.getParent()) { 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() : ""; - // } + /** Filtered table with members. Has drag & drop ability */ + protected void appendMembersPart(Composite parent) + throws RepositoryException { - /** 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; - } + FormToolkit tk = getManagedForm().getToolkit(); + Section section = tk.createSection(parent, Section.TITLE_BAR); + section.setLayoutData(EclipseUiUtils.fillAll()); + section.setText("Members of group " + + editor.getProperty(UserAdminConstants.KEY_CN)); - /** 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; - } + // Composite body = tk.createComposite(section, SWT.NONE); + Composite body = new Composite(section, SWT.NO_FOCUS); + section.setClient(body); + body.setLayoutData(EclipseUiUtils.fillAll()); - private class FormPartML implements ModifyListener { - private static final long serialVersionUID = 6299808129505381333L; - private AbstractFormPart formPart; + createMemberPart(body); - public FormPartML(AbstractFormPart generalPart) { - this.formPart = generalPart; - } + // create form part (controller) + AbstractFormPart part = new SectionPart(section) { + public void commit(boolean onSave) { + super.commit(onSave); + } + }; - public void modifyText(ModifyEvent e) { - formPart.markDirty(); - } + getManagedForm().addPart(part); } - // Manage the user table - public List getColumnsDef() { - List columnDefs = new ArrayList(); + // UI Objects + private UserTableViewer userTableViewerCmp; + private TableViewer userViewer; + private List columnDefs = new ArrayList(); + + 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()); - // 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 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 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); - // } + userTableViewerCmp.refresh(); } - // Local helpers - - private abstract class UseradminAbstractLP extends ColumnLabelProvider { - private static final long serialVersionUID = 137336765024922368L; + private class MyUserTableViewer extends UserTableViewer { + private static final long serialVersionUID = 8467999509931900367L; - @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); + public MyUserTableViewer(Composite parent, int style, + UserAdmin userAdmin) { + super(parent, style, userAdmin, true); } @Override - public String getText(Object element) { - User user = (User) element; - return getText(user); + protected List listFilteredElements(String filter) { + Group group = (Group) editor.getDisplayedUser(); + Role[] roles = group.getMembers(); + List users = new ArrayList(); + for (Role role : roles) + // if (role.getType() == Role.GROUP) + users.add((User) role); + return users; } - - public abstract String getText(User user); } - private class IconLP 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; - } + private void refreshFormTitle() throws RepositoryException { + getManagedForm().getForm().setText( + editor.getProperty(UserAdminConstants.KEY_CN)); } - private class UserNameLP extends UseradminAbstractLP { - private static final long serialVersionUID = 6550449442061090388L; - - @Override - public String getText(User user) { - return user.getName(); - } + private Composite addSection(FormToolkit tk, Composite parent, String title) { + Section section = tk.createSection(parent, Section.TITLE_BAR); + GridData gd = EclipseUiUtils.fillWidth(); + gd.verticalAlignment = PRE_TITLE_INDENT; + section.setLayoutData(gd); + section.setText(title); + Composite body = tk.createComposite(section, SWT.WRAP); + body.setLayoutData(EclipseUiUtils.fillAll()); + section.setClient(body); + return body; } - 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 ""; - } + /** 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; } - 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