]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/GroupsView.java
First draft of a drag and drop implementation to manage group. Implement create group...
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / views / GroupsView.java
index 1ee26a2ab160ab03e94ae0750030dadfe8953697..74d2c995dfc9da95b9ea024b467bd3cccb0e3444 100644 (file)
@@ -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;
@@ -56,7 +62,7 @@ public class GroupsView extends UsersView implements ArgeoNames {
                                150));
                columnDefs.add(new ColumnDefinition(new UserNameLP(),
                                "Distinguished Name", 300));
-               
+
                // Create and configure the table
                groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
                                | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
@@ -72,11 +78,20 @@ public class GroupsView extends UsersView implements ArgeoNames {
 
                // Really?
                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,15 +101,31 @@ public class GroupsView extends UsersView implements ArgeoNames {
                protected List<User> 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<User> users = new ArrayList<User>();
                        for (Role role : roles)
-                               if (role.getType() == Role.GROUP)
-                                       users.add((User) role);
+                               // if (role.getType() == Role.GROUP)
+                               users.add((User) role);
                        return users;
                }
        }
@@ -103,7 +134,6 @@ public class GroupsView extends UsersView implements ArgeoNames {
                groupTableViewerCmp.refresh();
        }
 
-       
        // Override generic view methods
        @Override
        public void dispose() {