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
.eclipse
.ui
.workbench
.users
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
21 import org
.argeo
.ArgeoException
;
22 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
23 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
24 import org
.argeo
.eclipse
.ui
.parts
.LdifUsersTable
;
25 import org
.argeo
.eclipse
.ui
.workbench
.internal
.users
.UsersUtils
;
26 import org
.argeo
.osgi
.useradmin
.LdifName
;
27 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
28 import org
.eclipse
.jface
.dialogs
.TrayDialog
;
29 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
30 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
31 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
32 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
33 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
34 import org
.eclipse
.jface
.viewers
.TableViewer
;
35 import org
.eclipse
.swt
.SWT
;
36 import org
.eclipse
.swt
.events
.SelectionAdapter
;
37 import org
.eclipse
.swt
.events
.SelectionEvent
;
38 import org
.eclipse
.swt
.events
.SelectionListener
;
39 import org
.eclipse
.swt
.layout
.FillLayout
;
40 import org
.eclipse
.swt
.layout
.GridData
;
41 import org
.eclipse
.swt
.layout
.GridLayout
;
42 import org
.eclipse
.swt
.widgets
.Button
;
43 import org
.eclipse
.swt
.widgets
.Composite
;
44 import org
.eclipse
.swt
.widgets
.Control
;
45 import org
.eclipse
.swt
.widgets
.Shell
;
46 import org
.osgi
.framework
.InvalidSyntaxException
;
47 import org
.osgi
.service
.useradmin
.Group
;
48 import org
.osgi
.service
.useradmin
.Role
;
49 import org
.osgi
.service
.useradmin
.User
;
50 import org
.osgi
.service
.useradmin
.UserAdmin
;
52 /** Dialog with a user (or group) list to pick up one */
53 public class PickUpUserDialog
extends TrayDialog
{
54 private static final long serialVersionUID
= -1420106871173920369L;
57 private final UserAdmin userAdmin
;
58 private User selectedUser
;
60 // this page widgets and UI objects
62 private LdifUsersTable userTableViewerCmp
;
63 private TableViewer userViewer
;
64 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
67 * A dialog to pick up a group or a user, showing a table with default
70 public PickUpUserDialog(Shell parentShell
, String title
, UserAdmin userAdmin
) {
73 this.userAdmin
= userAdmin
;
75 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_ICON
), "",
77 columnDefs
.add(new ColumnDefinition(
78 new UserLP(UserLP
.COL_DISPLAY_NAME
), "Common Name", 150, 100));
79 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DOMAIN
),
81 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DN
),
82 "Distinguished Name", 300, 100));
85 /** A dialog to pick up a group or a user */
86 public PickUpUserDialog(Shell parentShell
, String title
,
87 UserAdmin userAdmin
, List
<ColumnDefinition
> columnDefs
) {
90 this.userAdmin
= userAdmin
;
91 this.columnDefs
= columnDefs
;
95 protected void okPressed() {
96 if (getSelected() == null)
97 MessageDialog
.openError(getShell(), "No user chosen",
98 "Please, choose a user or press Cancel.");
103 protected Control
createDialogArea(Composite parent
) {
104 Composite dialogArea
= (Composite
) super.createDialogArea(parent
);
105 dialogArea
.setLayout(new FillLayout());
107 Composite bodyCmp
= new Composite(dialogArea
, SWT
.NO_FOCUS
);
108 bodyCmp
.setLayout(new GridLayout());
110 // Create and configure the table
111 userTableViewerCmp
= new MyUserTableViewer(bodyCmp
, SWT
.MULTI
112 | SWT
.H_SCROLL
| SWT
.V_SCROLL
);
114 userTableViewerCmp
.setColumnDefinitions(columnDefs
);
115 userTableViewerCmp
.populateWithStaticFilters(false, false);
116 GridData gd
= EclipseUiUtils
.fillAll();
117 gd
.minimumHeight
= 300;
118 userTableViewerCmp
.setLayoutData(gd
);
119 userTableViewerCmp
.refresh();
122 userViewer
= userTableViewerCmp
.getTableViewer();
123 userViewer
.addDoubleClickListener(new MyDoubleClickListener());
125 .addSelectionChangedListener(new MySelectionChangedListener());
131 public User
getSelected() {
132 if (selectedUser
== null)
138 protected void configureShell(Shell shell
) {
139 super.configureShell(shell
);
140 shell
.setText(title
);
143 class MyDoubleClickListener
implements IDoubleClickListener
{
144 public void doubleClick(DoubleClickEvent evt
) {
145 if (evt
.getSelection().isEmpty())
148 Object obj
= ((IStructuredSelection
) evt
.getSelection())
150 if (obj
instanceof User
) {
151 selectedUser
= (User
) obj
;
157 class MySelectionChangedListener
implements ISelectionChangedListener
{
159 public void selectionChanged(SelectionChangedEvent event
) {
160 if (event
.getSelection().isEmpty()) {
164 Object obj
= ((IStructuredSelection
) event
.getSelection())
166 if (obj
instanceof Group
) {
167 selectedUser
= (Group
) obj
;
172 private class MyUserTableViewer
extends LdifUsersTable
{
173 private static final long serialVersionUID
= 8467999509931900367L;
175 private final String
[] knownProps
= { LdifName
.uid
.name(),
176 LdifName
.cn
.name(), LdifName
.dn
.name() };
178 private Button showSystemRoleBtn
;
179 private Button showUserBtn
;
181 public MyUserTableViewer(Composite parent
, int style
) {
182 super(parent
, style
);
185 protected void populateStaticFilters(Composite staticFilterCmp
) {
186 staticFilterCmp
.setLayout(new GridLayout());
187 showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
188 showSystemRoleBtn
.setText("Show system roles ");
190 showUserBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
191 showUserBtn
.setText("Show users ");
193 SelectionListener sl
= new SelectionAdapter() {
194 private static final long serialVersionUID
= -7033424592697691676L;
197 public void widgetSelected(SelectionEvent e
) {
202 showSystemRoleBtn
.addSelectionListener(sl
);
203 showUserBtn
.addSelectionListener(sl
);
207 protected List
<User
> listFilteredElements(String filter
) {
210 StringBuilder builder
= new StringBuilder();
212 StringBuilder filterBuilder
= new StringBuilder();
214 for (String prop
: knownProps
) {
215 filterBuilder
.append("(");
216 filterBuilder
.append(prop
);
217 filterBuilder
.append("=*");
218 filterBuilder
.append(filter
);
219 filterBuilder
.append("*)");
222 String typeStr
= "(" + LdifName
.objectClass
.name() + "="
223 + LdifName
.groupOfNames
.name() + ")";
224 if ((showUserBtn
.getSelection()))
225 typeStr
= "(|(" + LdifName
.objectClass
.name() + "="
226 + LdifName
.inetOrgPerson
.name() + ")" + typeStr
229 if (!showSystemRoleBtn
.getSelection())
230 typeStr
= "(& " + typeStr
+ "(!(" + LdifName
.dn
.name()
231 + "=*" + UsersUtils
.ROLES_BASEDN
+ ")))";
233 if (filterBuilder
.length() > 1) {
234 builder
.append("(&" + typeStr
);
235 builder
.append("(|");
236 builder
.append(filterBuilder
.toString());
237 builder
.append("))");
239 builder
.append(typeStr
);
241 roles
= userAdmin
.getRoles(builder
.toString());
242 } catch (InvalidSyntaxException e
) {
243 throw new ArgeoException("Unable to get roles with filter: "
246 List
<User
> users
= new ArrayList
<User
>();
247 for (Role role
: roles
)
248 if (!users
.contains(role
))
249 users
.add((User
) role
);
254 private boolean notNull(String string
) {
258 return !"".equals(string
.trim());