2 * Copyright (C) 2007-2012 Argeo GmbH
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.cms
.e4
.users
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
21 import javax
.annotation
.PostConstruct
;
22 import javax
.annotation
.PreDestroy
;
23 import javax
.inject
.Inject
;
25 import org
.apache
.commons
.logging
.Log
;
26 import org
.apache
.commons
.logging
.LogFactory
;
27 import org
.argeo
.cms
.ArgeoNames
;
28 import org
.argeo
.cms
.CmsException
;
29 import org
.argeo
.cms
.auth
.CurrentUser
;
30 import org
.argeo
.cms
.e4
.users
.providers
.CommonNameLP
;
31 import org
.argeo
.cms
.e4
.users
.providers
.DomainNameLP
;
32 import org
.argeo
.cms
.e4
.users
.providers
.RoleIconLP
;
33 import org
.argeo
.cms
.e4
.users
.providers
.UserDragListener
;
34 //import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
35 //import org.argeo.cms.ui.workbench.internal.useradmin.UiUserAdminListener;
36 //import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper;
37 //import org.argeo.cms.ui.workbench.internal.useradmin.providers.CommonNameLP;
38 //import org.argeo.cms.ui.workbench.internal.useradmin.providers.DomainNameLP;
39 //import org.argeo.cms.ui.workbench.internal.useradmin.providers.RoleIconLP;
40 //import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserDragListener;
41 //import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener;
42 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
43 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
44 import org
.argeo
.eclipse
.ui
.parts
.LdifUsersTable
;
45 import org
.argeo
.naming
.LdapAttrs
;
46 import org
.argeo
.naming
.LdapObjs
;
47 import org
.argeo
.node
.NodeConstants
;
48 import org
.eclipse
.e4
.ui
.di
.Focus
;
49 import org
.eclipse
.e4
.ui
.workbench
.modeling
.EPartService
;
50 import org
.eclipse
.jface
.viewers
.TableViewer
;
51 import org
.eclipse
.swt
.SWT
;
52 import org
.eclipse
.swt
.dnd
.DND
;
53 import org
.eclipse
.swt
.dnd
.TextTransfer
;
54 import org
.eclipse
.swt
.dnd
.Transfer
;
55 import org
.eclipse
.swt
.events
.SelectionAdapter
;
56 import org
.eclipse
.swt
.events
.SelectionEvent
;
57 import org
.eclipse
.swt
.layout
.GridData
;
58 import org
.eclipse
.swt
.layout
.GridLayout
;
59 import org
.eclipse
.swt
.widgets
.Button
;
60 import org
.eclipse
.swt
.widgets
.Composite
;
61 import org
.eclipse
.swt
.widgets
.Display
;
62 //import org.eclipse.ui.part.ViewPart;
63 import org
.osgi
.framework
.InvalidSyntaxException
;
64 import org
.osgi
.service
.useradmin
.Role
;
65 import org
.osgi
.service
.useradmin
.User
;
66 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
67 import org
.osgi
.service
.useradmin
.UserAdminListener
;
69 /** List all groups with filter */
70 public class GroupsView
implements ArgeoNames
{
71 private final static Log log
= LogFactory
.getLog(GroupsView
.class);
72 // public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".groupsView";
75 private EPartService partService
;
77 private UserAdminWrapper userAdminWrapper
;
80 private LdifUsersTable groupTableViewerCmp
;
81 private TableViewer userViewer
;
82 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
84 private UserAdminListener listener
;
87 public void createPartControl(Composite parent
) {
88 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
90 // boolean isAdmin = CurrentUser.isInRole(NodeConstants.ROLE_ADMIN);
92 // Define the displayed columns
93 columnDefs
.add(new ColumnDefinition(new RoleIconLP(), "", 19));
94 columnDefs
.add(new ColumnDefinition(new CommonNameLP(), "Name", 150));
95 columnDefs
.add(new ColumnDefinition(new DomainNameLP(), "Domain", 100));
96 // Only show technical DN to admin
98 // columnDefs.add(new ColumnDefinition(new UserNameLP(),
99 // "Distinguished Name", 300));
101 // Create and configure the table
102 groupTableViewerCmp
= new MyUserTableViewer(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
104 groupTableViewerCmp
.setColumnDefinitions(columnDefs
);
106 // groupTableViewerCmp.populateWithStaticFilters(false, false);
108 groupTableViewerCmp
.populate(true, false);
110 groupTableViewerCmp
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
113 userViewer
= groupTableViewerCmp
.getTableViewer();
114 userViewer
.addDoubleClickListener(new UserTableDefaultDClickListener(partService
));
115 // getViewSite().setSelectionProvider(userViewer);
118 groupTableViewerCmp
.refresh();
121 int operations
= DND
.DROP_COPY
| DND
.DROP_MOVE
;
122 Transfer
[] tt
= new Transfer
[] { TextTransfer
.getInstance() };
123 userViewer
.addDragSupport(operations
, tt
, new UserDragListener(userViewer
));
125 // // Register a useradmin listener
126 // listener = new UserAdminListener() {
128 // public void roleChanged(UserAdminEvent event) {
129 // if (userViewer != null && !userViewer.getTable().isDisposed())
133 // userAdminWrapper.addListener(listener);
136 // Register a useradmin listener
137 listener
= new MyUiUAListener(parent
.getDisplay());
138 userAdminWrapper
.addListener(listener
);
141 private class MyUiUAListener
extends UiUserAdminListener
{
142 public MyUiUAListener(Display display
) {
147 public void roleChangedToUiThread(UserAdminEvent event
) {
148 if (userViewer
!= null && !userViewer
.getTable().isDisposed())
153 private class MyUserTableViewer
extends LdifUsersTable
{
154 private static final long serialVersionUID
= 8467999509931900367L;
156 private boolean showSystemRoles
= true;
158 private final String
[] knownProps
= { LdapAttrs
.uid
.name(), LdapAttrs
.cn
.name(), LdapAttrs
.DN
};
160 public MyUserTableViewer(Composite parent
, int style
) {
161 super(parent
, style
);
162 showSystemRoles
= CurrentUser
.isInRole(NodeConstants
.ROLE_ADMIN
);
165 protected void populateStaticFilters(Composite staticFilterCmp
) {
166 staticFilterCmp
.setLayout(new GridLayout());
167 final Button showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
168 showSystemRoleBtn
.setText("Show system roles");
169 showSystemRoles
= CurrentUser
.isInRole(NodeConstants
.ROLE_ADMIN
);
170 showSystemRoleBtn
.setSelection(showSystemRoles
);
172 showSystemRoleBtn
.addSelectionListener(new SelectionAdapter() {
173 private static final long serialVersionUID
= -7033424592697691676L;
176 public void widgetSelected(SelectionEvent e
) {
177 showSystemRoles
= showSystemRoleBtn
.getSelection();
185 protected List
<User
> listFilteredElements(String filter
) {
188 StringBuilder builder
= new StringBuilder();
189 StringBuilder tmpBuilder
= new StringBuilder();
190 if (EclipseUiUtils
.notEmpty(filter
))
191 for (String prop
: knownProps
) {
192 tmpBuilder
.append("(");
193 tmpBuilder
.append(prop
);
194 tmpBuilder
.append("=*");
195 tmpBuilder
.append(filter
);
196 tmpBuilder
.append("*)");
198 if (tmpBuilder
.length() > 1) {
199 builder
.append("(&(").append(LdapAttrs
.objectClass
.name()).append("=")
200 .append(LdapObjs
.groupOfNames
.name()).append(")");
201 if (!showSystemRoles
)
202 builder
.append("(!(").append(LdapAttrs
.DN
).append("=*").append(NodeConstants
.ROLES_BASEDN
)
204 builder
.append("(|");
205 builder
.append(tmpBuilder
.toString());
206 builder
.append("))");
208 if (!showSystemRoles
)
209 builder
.append("(&(").append(LdapAttrs
.objectClass
.name()).append("=")
210 .append(LdapObjs
.groupOfNames
.name()).append(")(!(").append(LdapAttrs
.DN
).append("=*")
211 .append(NodeConstants
.ROLES_BASEDN
).append(")))");
213 builder
.append("(").append(LdapAttrs
.objectClass
.name()).append("=")
214 .append(LdapObjs
.groupOfNames
.name()).append(")");
217 roles
= userAdminWrapper
.getUserAdmin().getRoles(builder
.toString());
218 } catch (InvalidSyntaxException e
) {
219 throw new CmsException("Unable to get roles with filter: " + filter
, e
);
221 List
<User
> users
= new ArrayList
<User
>();
222 for (Role role
: roles
)
223 if (!users
.contains(role
))
224 users
.add((User
) role
);
226 log
.warn("Duplicated role: " + role
);
232 public void refresh() {
233 groupTableViewerCmp
.refresh();
237 public void dispose() {
238 userAdminWrapper
.removeListener(listener
);
242 public void setFocus() {
243 groupTableViewerCmp
.setFocus();
246 /* DEPENDENCY INJECTION */
247 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper
) {
248 this.userAdminWrapper
= userAdminWrapper
;