]> 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 dd9456c8c2d2b58d95d1a4e2e60e178c5b9f7707..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;
@@ -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<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
 
@@ -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<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;
                }
        }
 
+       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 */