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
.e4
.ui
.workbench
.modeling
.ESelectionService
;
51 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
52 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
53 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
54 import org
.eclipse
.jface
.viewers
.TableViewer
;
55 import org
.eclipse
.swt
.SWT
;
56 import org
.eclipse
.swt
.dnd
.DND
;
57 import org
.eclipse
.swt
.dnd
.TextTransfer
;
58 import org
.eclipse
.swt
.dnd
.Transfer
;
59 import org
.eclipse
.swt
.events
.SelectionAdapter
;
60 import org
.eclipse
.swt
.events
.SelectionEvent
;
61 import org
.eclipse
.swt
.layout
.GridData
;
62 import org
.eclipse
.swt
.layout
.GridLayout
;
63 import org
.eclipse
.swt
.widgets
.Button
;
64 import org
.eclipse
.swt
.widgets
.Composite
;
65 import org
.eclipse
.swt
.widgets
.Display
;
66 //import org.eclipse.ui.part.ViewPart;
67 import org
.osgi
.framework
.InvalidSyntaxException
;
68 import org
.osgi
.service
.useradmin
.Role
;
69 import org
.osgi
.service
.useradmin
.User
;
70 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
71 import org
.osgi
.service
.useradmin
.UserAdminListener
;
73 /** List all groups with filter */
74 public class GroupsView
implements ArgeoNames
{
75 private final static Log log
= LogFactory
.getLog(GroupsView
.class);
76 // public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".groupsView";
79 private EPartService partService
;
81 private UserAdminWrapper userAdminWrapper
;
84 private LdifUsersTable groupTableViewerCmp
;
85 private TableViewer userViewer
;
86 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
88 private UserAdminListener listener
;
91 public void createPartControl(Composite parent
, ESelectionService selectionService
) {
92 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
94 // boolean isAdmin = CurrentUser.isInRole(NodeConstants.ROLE_ADMIN);
96 // Define the displayed columns
97 columnDefs
.add(new ColumnDefinition(new RoleIconLP(), "", 19));
98 columnDefs
.add(new ColumnDefinition(new CommonNameLP(), "Name", 150));
99 columnDefs
.add(new ColumnDefinition(new DomainNameLP(), "Domain", 100));
100 // Only show technical DN to admin
102 // columnDefs.add(new ColumnDefinition(new UserNameLP(),
103 // "Distinguished Name", 300));
105 // Create and configure the table
106 groupTableViewerCmp
= new MyUserTableViewer(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
108 groupTableViewerCmp
.setColumnDefinitions(columnDefs
);
110 // groupTableViewerCmp.populateWithStaticFilters(false, false);
112 groupTableViewerCmp
.populate(true, false);
114 groupTableViewerCmp
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
117 userViewer
= groupTableViewerCmp
.getTableViewer();
118 userViewer
.addDoubleClickListener(new UserTableDefaultDClickListener(partService
));
119 // getViewSite().setSelectionProvider(userViewer);
120 userViewer
.addSelectionChangedListener(new ISelectionChangedListener() {
123 public void selectionChanged(SelectionChangedEvent event
) {
124 IStructuredSelection selection
= (IStructuredSelection
) event
.getSelection();
125 selectionService
.setSelection(selection
.toList());
130 groupTableViewerCmp
.refresh();
133 int operations
= DND
.DROP_COPY
| DND
.DROP_MOVE
;
134 Transfer
[] tt
= new Transfer
[] { TextTransfer
.getInstance() };
135 userViewer
.addDragSupport(operations
, tt
, new UserDragListener(userViewer
));
137 // // Register a useradmin listener
138 // listener = new UserAdminListener() {
140 // public void roleChanged(UserAdminEvent event) {
141 // if (userViewer != null && !userViewer.getTable().isDisposed())
145 // userAdminWrapper.addListener(listener);
148 // Register a useradmin listener
149 listener
= new MyUiUAListener(parent
.getDisplay());
150 userAdminWrapper
.addListener(listener
);
153 private class MyUiUAListener
extends UiUserAdminListener
{
154 public MyUiUAListener(Display display
) {
159 public void roleChangedToUiThread(UserAdminEvent event
) {
160 if (userViewer
!= null && !userViewer
.getTable().isDisposed())
165 private class MyUserTableViewer
extends LdifUsersTable
{
166 private static final long serialVersionUID
= 8467999509931900367L;
168 private boolean showSystemRoles
= true;
170 private final String
[] knownProps
= { LdapAttrs
.uid
.name(), LdapAttrs
.cn
.name(), LdapAttrs
.DN
};
172 public MyUserTableViewer(Composite parent
, int style
) {
173 super(parent
, style
);
174 showSystemRoles
= CurrentUser
.isInRole(NodeConstants
.ROLE_ADMIN
);
177 protected void populateStaticFilters(Composite staticFilterCmp
) {
178 staticFilterCmp
.setLayout(new GridLayout());
179 final Button showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
180 showSystemRoleBtn
.setText("Show system roles");
181 showSystemRoles
= CurrentUser
.isInRole(NodeConstants
.ROLE_ADMIN
);
182 showSystemRoleBtn
.setSelection(showSystemRoles
);
184 showSystemRoleBtn
.addSelectionListener(new SelectionAdapter() {
185 private static final long serialVersionUID
= -7033424592697691676L;
188 public void widgetSelected(SelectionEvent e
) {
189 showSystemRoles
= showSystemRoleBtn
.getSelection();
197 protected List
<User
> listFilteredElements(String filter
) {
200 StringBuilder builder
= new StringBuilder();
201 StringBuilder tmpBuilder
= new StringBuilder();
202 if (EclipseUiUtils
.notEmpty(filter
))
203 for (String prop
: knownProps
) {
204 tmpBuilder
.append("(");
205 tmpBuilder
.append(prop
);
206 tmpBuilder
.append("=*");
207 tmpBuilder
.append(filter
);
208 tmpBuilder
.append("*)");
210 if (tmpBuilder
.length() > 1) {
211 builder
.append("(&(").append(LdapAttrs
.objectClass
.name()).append("=")
212 .append(LdapObjs
.groupOfNames
.name()).append(")");
213 if (!showSystemRoles
)
214 builder
.append("(!(").append(LdapAttrs
.DN
).append("=*").append(NodeConstants
.ROLES_BASEDN
)
216 builder
.append("(|");
217 builder
.append(tmpBuilder
.toString());
218 builder
.append("))");
220 if (!showSystemRoles
)
221 builder
.append("(&(").append(LdapAttrs
.objectClass
.name()).append("=")
222 .append(LdapObjs
.groupOfNames
.name()).append(")(!(").append(LdapAttrs
.DN
).append("=*")
223 .append(NodeConstants
.ROLES_BASEDN
).append(")))");
225 builder
.append("(").append(LdapAttrs
.objectClass
.name()).append("=")
226 .append(LdapObjs
.groupOfNames
.name()).append(")");
229 roles
= userAdminWrapper
.getUserAdmin().getRoles(builder
.toString());
230 } catch (InvalidSyntaxException e
) {
231 throw new CmsException("Unable to get roles with filter: " + filter
, e
);
233 List
<User
> users
= new ArrayList
<User
>();
234 for (Role role
: roles
)
235 if (!users
.contains(role
))
236 users
.add((User
) role
);
238 log
.warn("Duplicated role: " + role
);
244 public void refresh() {
245 groupTableViewerCmp
.refresh();
249 public void dispose() {
250 userAdminWrapper
.removeListener(listener
);
254 public void setFocus() {
255 groupTableViewerCmp
.setFocus();
258 /* DEPENDENCY INJECTION */
259 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper
) {
260 this.userAdminWrapper
= userAdminWrapper
;