X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Feditors%2FUserMainPage.java;h=c657c35086650e1f01f636ffbf8c3b97f6235690;hb=eec0cd2b46a2186b4df1b1a59962c81ae2a9bcb7;hp=d4ca071270fc8db97c7e5d89939a182e96e343dc;hpb=f090d55a56532e0e6c2cde5760a451e56ef25f1c;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java index d4ca07127..c657c3508 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java @@ -30,7 +30,14 @@ 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.Viewer; +import org.eclipse.jface.viewers.ViewerDropAdapter; import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.DropTargetEvent; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.dnd.TransferData; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; @@ -46,6 +53,8 @@ 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; @@ -208,16 +217,16 @@ public class UserMainPage extends FormPage implements ArgeoNames { private UserTableViewer userTableViewerCmp; private TableViewer userViewer; - public void appendMemberOfPart(Composite parent) { + private void appendMemberOfPart(Composite parent) { FormToolkit tk = getManagedForm().getToolkit(); - Composite body = addSection(tk, parent, "Groups"); + Composite body = addSection(tk, parent, "Roles"); body.setLayout(EclipseUiUtils.noSpaceGridLayout()); // Define the displayed columns List columnDefs = new ArrayList(); columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24)); columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 240)); + "Distinguished Name", 300)); columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); @@ -236,6 +245,13 @@ public class UserMainPage extends FormPage implements ArgeoNames { userViewer.addDoubleClickListener(new UserTableDefaultDClickListener()); // Really? userTableViewerCmp.refresh(); + + // 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, editor.getDisplayedUser())); + } private class MyUserTableViewer extends UserTableViewer { @@ -248,20 +264,60 @@ public class UserMainPage extends FormPage implements ArgeoNames { @Override protected List listFilteredElements(String filter) { - List users = new ArrayList(); - - // "member of" method? - // 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; - return users; + return (List) editor.getFlatGroups(null); + } + } + + /** + * Defines this table as being a potential target to add group membership + * (roles) to this user + */ + private class GroupDropListener extends ViewerDropAdapter { + private static final long serialVersionUID = 2893468717831451621L; + + private final UserAdmin myUserAdmin; + private final User myUser; + + public GroupDropListener(Viewer viewer, UserAdmin userAdmin, User user) { + super(viewer); + this.myUserAdmin = userAdmin; + this.myUser = user; + } + + @Override + public boolean validateDrop(Object target, int operation, + TransferData transferType) { + // Target is always OK in a list only view + // TODO check if not a string + boolean validDrop = true; + return validDrop; + } + + @Override + public void drop(DropTargetEvent event) { + String name = (String) event.data; + Role role = myUserAdmin.getRole(name); + // 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(); + Group group = (Group) role; + group.addMember(myUser); + } + super.drop(event); + } + + @Override + public boolean performDrop(Object data) { + userTableViewerCmp.refresh(); + return true; } } + // LOCAL HELPERS + /** Appends a section with a title */ private Composite addSection(FormToolkit tk, Composite parent, String title) { Section section = tk.createSection(parent, Section.TITLE_BAR); GridData gd = EclipseUiUtils.fillWidth(); @@ -303,7 +359,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); return text; } - + private class FormPartML implements ModifyListener { private static final long serialVersionUID = 6299808129505381333L; private AbstractFormPart formPart;