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
.users
.internal
.UsersUtils
;
26 import org
.argeo
.osgi
.useradmin
.LdifName
;
27 import org
.eclipse
.jface
.dialogs
.TrayDialog
;
28 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
29 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
30 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
31 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
32 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
33 import org
.eclipse
.jface
.viewers
.TableViewer
;
34 import org
.eclipse
.swt
.SWT
;
35 import org
.eclipse
.swt
.events
.SelectionAdapter
;
36 import org
.eclipse
.swt
.events
.SelectionEvent
;
37 import org
.eclipse
.swt
.events
.SelectionListener
;
38 import org
.eclipse
.swt
.graphics
.Point
;
39 import org
.eclipse
.swt
.layout
.FillLayout
;
40 import org
.eclipse
.swt
.layout
.GridLayout
;
41 import org
.eclipse
.swt
.widgets
.Button
;
42 import org
.eclipse
.swt
.widgets
.Composite
;
43 import org
.eclipse
.swt
.widgets
.Control
;
44 import org
.eclipse
.swt
.widgets
.Shell
;
45 import org
.osgi
.framework
.InvalidSyntaxException
;
46 import org
.osgi
.service
.useradmin
.Group
;
47 import org
.osgi
.service
.useradmin
.Role
;
48 import org
.osgi
.service
.useradmin
.User
;
49 import org
.osgi
.service
.useradmin
.UserAdmin
;
51 /** Dialog with a group list to pick up one */
52 public class PickUpUserDialog
extends TrayDialog
{
53 private static final long serialVersionUID
= -1420106871173920369L;
56 private final UserAdmin userAdmin
;
57 private User selectedUser
;
59 // this page widgets and UI objects
61 private LdifUsersTable userTableViewerCmp
;
62 private TableViewer userViewer
;
63 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
65 public PickUpUserDialog(Shell parentShell
, String title
, UserAdmin userAdmin
) {
68 this.userAdmin
= userAdmin
;
70 // Define the displayed columns
71 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_ICON
), "",
73 columnDefs
.add(new ColumnDefinition(
74 new UserLP(UserLP
.COL_DISPLAY_NAME
), "Common Name", 150, 100));
75 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DOMAIN
),
77 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DN
),
78 "Distinguished Name", 300, 100));
81 protected Point
getInitialSize() {
82 return new Point(700, 450);
85 protected Control
createDialogArea(Composite parent
) {
86 Composite dialogArea
= (Composite
) super.createDialogArea(parent
);
87 dialogArea
.setLayout(new FillLayout());
89 Composite bodyCmp
= new Composite(dialogArea
, SWT
.NO_FOCUS
);
90 bodyCmp
.setLayout(new GridLayout());
92 // Create and configure the table
93 userTableViewerCmp
= new MyUserTableViewer(bodyCmp
, SWT
.MULTI
94 | SWT
.H_SCROLL
| SWT
.V_SCROLL
);
96 userTableViewerCmp
.setColumnDefinitions(columnDefs
);
97 userTableViewerCmp
.populateWithStaticFilters(false, false);
98 userTableViewerCmp
.setLayoutData(EclipseUiUtils
.fillAll());
99 userTableViewerCmp
.refresh();
102 userViewer
= userTableViewerCmp
.getTableViewer();
103 userViewer
.addDoubleClickListener(new MyDoubleClickListener());
105 .addSelectionChangedListener(new MySelectionChangedListener());
111 public User
getSelected() {
112 if (selectedUser
== null)
118 protected void configureShell(Shell shell
) {
119 super.configureShell(shell
);
120 shell
.setText(title
);
123 class MyDoubleClickListener
implements IDoubleClickListener
{
124 public void doubleClick(DoubleClickEvent evt
) {
125 if (evt
.getSelection().isEmpty())
128 Object obj
= ((IStructuredSelection
) evt
.getSelection())
130 if (obj
instanceof User
) {
131 selectedUser
= (User
) obj
;
137 class MySelectionChangedListener
implements ISelectionChangedListener
{
139 public void selectionChanged(SelectionChangedEvent event
) {
140 if (event
.getSelection().isEmpty()) {
144 Object obj
= ((IStructuredSelection
) event
.getSelection())
146 if (obj
instanceof Group
) {
147 selectedUser
= (Group
) obj
;
152 private class MyUserTableViewer
extends LdifUsersTable
{
153 private static final long serialVersionUID
= 8467999509931900367L;
155 private final String
[] knownProps
= { LdifName
.uid
.name(),
156 LdifName
.cn
.name(), LdifName
.dn
.name() };
158 private Button showSystemRoleBtn
;
159 private Button showUserBtn
;
161 public MyUserTableViewer(Composite parent
, int style
) {
162 super(parent
, style
);
165 protected void populateStaticFilters(Composite staticFilterCmp
) {
166 staticFilterCmp
.setLayout(new GridLayout());
167 showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
168 showSystemRoleBtn
.setText("Show system roles ");
170 showUserBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
171 showUserBtn
.setText("Show users ");
173 SelectionListener sl
= new SelectionAdapter() {
174 private static final long serialVersionUID
= -7033424592697691676L;
177 public void widgetSelected(SelectionEvent e
) {
182 showSystemRoleBtn
.addSelectionListener(sl
);
183 showUserBtn
.addSelectionListener(sl
);
187 protected List
<User
> listFilteredElements(String filter
) {
190 StringBuilder builder
= new StringBuilder();
192 StringBuilder filterBuilder
= new StringBuilder();
194 for (String prop
: knownProps
) {
195 filterBuilder
.append("(");
196 filterBuilder
.append(prop
);
197 filterBuilder
.append("=*");
198 filterBuilder
.append(filter
);
199 filterBuilder
.append("*)");
202 String typeStr
= "(" + LdifName
.objectClass
.name() + "="
203 + LdifName
.groupOfNames
.name() + ")";
204 if ((showUserBtn
.getSelection()))
205 typeStr
= "(|(" + LdifName
.objectClass
.name() + "="
206 + LdifName
.inetOrgPerson
.name() + ")" + typeStr
209 if (!showSystemRoleBtn
.getSelection())
210 typeStr
= "(& " + typeStr
+ "(!(" + LdifName
.dn
.name()
211 + "=*" + UsersUtils
.ROLES_BASEDN
+ ")))";
213 if (filterBuilder
.length() > 1) {
214 builder
.append("(&" + typeStr
);
215 builder
.append("(|");
216 builder
.append(filterBuilder
.toString());
217 builder
.append("))");
219 builder
.append(typeStr
);
221 roles
= userAdmin
.getRoles(builder
.toString());
222 } catch (InvalidSyntaxException e
) {
223 throw new ArgeoException("Unable to get roles with filter: "
226 List
<User
> users
= new ArrayList
<User
>();
227 for (Role role
: roles
)
228 if (!users
.contains(role
))
229 users
.add((User
) role
);
234 private boolean notNull(String string
) {
238 return !"".equals(string
.trim());