]> git.argeo.org Git - gpl/argeo-slc.git/blob - UsersView.java
b09d59eedce8c188ee57e6b020c7f6bef963fefd
[gpl/argeo-slc.git] / UsersView.java
1 package org.argeo.cms.ui.workbench.internal.useradmin.parts;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.argeo.api.NodeConstants;
7 import org.argeo.cms.ArgeoNames;
8 import org.argeo.cms.CmsException;
9 import org.argeo.cms.auth.CurrentUser;
10 import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
11 import org.argeo.cms.ui.workbench.internal.useradmin.UiUserAdminListener;
12 import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper;
13 import org.argeo.cms.ui.workbench.internal.useradmin.providers.CommonNameLP;
14 import org.argeo.cms.ui.workbench.internal.useradmin.providers.DomainNameLP;
15 import org.argeo.cms.ui.workbench.internal.useradmin.providers.MailLP;
16 import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserDragListener;
17 import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP;
18 import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener;
19 import org.argeo.eclipse.ui.ColumnDefinition;
20 import org.argeo.eclipse.ui.EclipseUiUtils;
21 import org.argeo.eclipse.ui.parts.LdifUsersTable;
22 import org.argeo.naming.LdapAttrs;
23 import org.argeo.naming.LdapObjs;
24 import org.eclipse.jface.viewers.TableViewer;
25 import org.eclipse.swt.SWT;
26 import org.eclipse.swt.dnd.DND;
27 import org.eclipse.swt.dnd.TextTransfer;
28 import org.eclipse.swt.dnd.Transfer;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Display;
31 import org.eclipse.ui.part.ViewPart;
32 import org.osgi.framework.InvalidSyntaxException;
33 import org.osgi.service.useradmin.Role;
34 import org.osgi.service.useradmin.User;
35 import org.osgi.service.useradmin.UserAdminEvent;
36 import org.osgi.service.useradmin.UserAdminListener;
37
38 /** List all users with filter - based on Ldif userAdmin */
39 public class UsersView extends ViewPart implements ArgeoNames {
40 // private final static Log log = LogFactory.getLog(UsersView.class);
41
42 public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".usersView";
43
44 /* DEPENDENCY INJECTION */
45 private UserAdminWrapper userAdminWrapper;
46
47 // UI Objects
48 private LdifUsersTable userTableViewerCmp;
49 private TableViewer userViewer;
50 private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
51
52 private UserAdminListener listener;
53
54 @Override
55 public void createPartControl(Composite parent) {
56
57 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
58 // Define the displayed columns
59 columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
60 150));
61 columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150));
62 columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 200));
63 // Only show technical DN to admin
64 if (CurrentUser.isInRole(NodeConstants.ROLE_ADMIN))
65 columnDefs.add(new ColumnDefinition(new UserNameLP(),
66 "Distinguished Name", 300));
67
68 // Create and configure the table
69 userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
70 | SWT.H_SCROLL | SWT.V_SCROLL);
71 userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
72 userTableViewerCmp.setColumnDefinitions(columnDefs);
73 userTableViewerCmp.populate(true, false);
74
75 // Links
76 userViewer = userTableViewerCmp.getTableViewer();
77 userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
78 getViewSite().setSelectionProvider(userViewer);
79
80 // Really?
81 userTableViewerCmp.refresh();
82
83 // Drag and drop
84 int operations = DND.DROP_COPY | DND.DROP_MOVE;
85 Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
86 userViewer.addDragSupport(operations, tt, new UserDragListener(
87 userViewer));
88
89 // Register a useradmin listener
90 listener = new MyUiUAListener(parent.getDisplay());
91 userAdminWrapper.addListener(listener);
92 }
93
94 private class MyUiUAListener extends UiUserAdminListener {
95 public MyUiUAListener(Display display) {
96 super(display);
97 }
98
99 @Override
100 public void roleChangedToUiThread(UserAdminEvent event) {
101 if (userViewer != null && !userViewer.getTable().isDisposed())
102 refresh();
103 }
104 }
105
106 private class MyUserTableViewer extends LdifUsersTable {
107 private static final long serialVersionUID = 8467999509931900367L;
108
109 private final String[] knownProps = { LdapAttrs.DN,
110 LdapAttrs.uid.name(), LdapAttrs.cn.name(),
111 LdapAttrs.givenName.name(), LdapAttrs.sn.name(),
112 LdapAttrs.mail.name() };
113
114 public MyUserTableViewer(Composite parent, int style) {
115 super(parent, style);
116 }
117
118 @Override
119 protected List<User> listFilteredElements(String filter) {
120 Role[] roles;
121
122 try {
123 StringBuilder builder = new StringBuilder();
124
125 StringBuilder tmpBuilder = new StringBuilder();
126 if (EclipseUiUtils.notEmpty(filter))
127 for (String prop : knownProps) {
128 tmpBuilder.append("(");
129 tmpBuilder.append(prop);
130 tmpBuilder.append("=*");
131 tmpBuilder.append(filter);
132 tmpBuilder.append("*)");
133 }
134 if (tmpBuilder.length() > 1) {
135 builder.append("(&(").append(LdapAttrs.objectClass.name())
136 .append("=").append(LdapObjs.inetOrgPerson.name())
137 .append(")(|");
138 builder.append(tmpBuilder.toString());
139 builder.append("))");
140 } else
141 builder.append("(").append(LdapAttrs.objectClass.name())
142 .append("=").append(LdapObjs.inetOrgPerson.name())
143 .append(")");
144 roles = userAdminWrapper.getUserAdmin().getRoles(
145 builder.toString());
146 } catch (InvalidSyntaxException e) {
147 throw new CmsException("Unable to get roles with filter: "
148 + filter, e);
149 }
150 List<User> users = new ArrayList<User>();
151 for (Role role : roles)
152 // if (role.getType() == Role.USER && role.getType() !=
153 // Role.GROUP)
154 users.add((User) role);
155 return users;
156 }
157 }
158
159 public void refresh() {
160 userTableViewerCmp.refresh();
161 }
162
163 // Override generic view methods
164 @Override
165 public void dispose() {
166 userAdminWrapper.removeListener(listener);
167 super.dispose();
168 }
169
170 @Override
171 public void setFocus() {
172 userTableViewerCmp.setFocus();
173 }
174
175 /* DEPENDENCY INJECTION */
176 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper) {
177 this.userAdminWrapper = userAdminWrapper;
178 }
179 }