X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.admin%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Fviews%2FGroupsView.java;h=74d2c995dfc9da95b9ea024b467bd3cccb0e3444;hb=28f2a8c1668ce2e9d2bb2a6601a659c2bcc2676b;hp=dd9456c8c2d2b58d95d1a4e2e60e178c5b9f7707;hpb=15c69c8b17d393d554f95d7945e379133d6488fd;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java index dd9456c8c..74d2c995d 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java @@ -24,11 +24,17 @@ 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; @@ -44,7 +50,7 @@ public class GroupsView extends UsersView implements ArgeoNames { private UserAdmin userAdmin; // UI Objects - private UserTableViewer userTableViewerCmp; + private UserTableViewer groupTableViewerCmp; private TableViewer userViewer; private List columnDefs = new ArrayList(); @@ -56,27 +62,36 @@ public class GroupsView extends UsersView implements ArgeoNames { 150)); columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); - + // Create and configure the table - userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI + groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin); - userTableViewerCmp.setColumnDefinitions(columnDefs); - userTableViewerCmp.populate(true, false); - userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll()); + groupTableViewerCmp.setColumnDefinitions(columnDefs); + groupTableViewerCmp.populate(true, false); + groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll()); // Links - userViewer = userTableViewerCmp.getTableViewer(); + userViewer = groupTableViewerCmp.getTableViewer(); userViewer.addDoubleClickListener(new UserTableDefaultDClickListener()); getViewSite().setSelectionProvider(userViewer); // Really? - userTableViewerCmp.refresh(); + 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); @@ -86,19 +101,39 @@ public class GroupsView extends UsersView implements ArgeoNames { protected List listFilteredElements(String filter) { Role[] roles; try { - roles = userAdmin.getRoles(filter); + 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 users = new ArrayList(); for (Role role : roles) - if (role.getType() == Role.GROUP) - users.add((User) role); + // if (role.getType() == Role.GROUP) + users.add((User) role); return users; } } + public void refresh() { + groupTableViewerCmp.refresh(); + } + // Override generic view methods @Override public void dispose() { @@ -107,7 +142,7 @@ public class GroupsView extends UsersView implements ArgeoNames { @Override public void setFocus() { - userTableViewerCmp.setFocus(); + groupTableViewerCmp.setFocus(); } /* DEPENDENCY INJECTION */