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
.ui
.useradmin
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
21 import org
.argeo
.api
.NodeConstants
;
22 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
23 import org
.argeo
.eclipse
.ui
.EclipseUiException
;
24 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
25 import org
.argeo
.eclipse
.ui
.parts
.LdifUsersTable
;
26 import org
.argeo
.naming
.LdapAttrs
;
27 import org
.argeo
.naming
.LdapObjs
;
28 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
29 import org
.eclipse
.jface
.dialogs
.TrayDialog
;
30 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
31 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
32 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
33 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
34 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
35 import org
.eclipse
.jface
.viewers
.TableViewer
;
36 import org
.eclipse
.swt
.SWT
;
37 import org
.eclipse
.swt
.events
.SelectionAdapter
;
38 import org
.eclipse
.swt
.events
.SelectionEvent
;
39 import org
.eclipse
.swt
.events
.SelectionListener
;
40 import org
.eclipse
.swt
.layout
.FillLayout
;
41 import org
.eclipse
.swt
.layout
.GridData
;
42 import org
.eclipse
.swt
.layout
.GridLayout
;
43 import org
.eclipse
.swt
.widgets
.Button
;
44 import org
.eclipse
.swt
.widgets
.Composite
;
45 import org
.eclipse
.swt
.widgets
.Control
;
46 import org
.eclipse
.swt
.widgets
.Shell
;
47 import org
.osgi
.framework
.InvalidSyntaxException
;
48 import org
.osgi
.service
.useradmin
.Group
;
49 import org
.osgi
.service
.useradmin
.Role
;
50 import org
.osgi
.service
.useradmin
.User
;
51 import org
.osgi
.service
.useradmin
.UserAdmin
;
53 /** Dialog with a user (or group) list to pick up one */
54 public class PickUpUserDialog
extends TrayDialog
{
55 private static final long serialVersionUID
= -1420106871173920369L;
58 private final UserAdmin userAdmin
;
59 private User selectedUser
;
61 // this page widgets and UI objects
63 private LdifUsersTable userTableViewerCmp
;
64 private TableViewer userViewer
;
65 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
68 * A dialog to pick up a group or a user, showing a table with default
71 public PickUpUserDialog(Shell parentShell
, String title
, UserAdmin userAdmin
) {
74 this.userAdmin
= userAdmin
;
76 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_ICON
), "",
78 columnDefs
.add(new ColumnDefinition(
79 new UserLP(UserLP
.COL_DISPLAY_NAME
), "Common Name", 150, 100));
80 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DOMAIN
),
82 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DN
),
83 "Distinguished Name", 300, 100));
86 /** A dialog to pick up a group or a user */
87 public PickUpUserDialog(Shell parentShell
, String title
,
88 UserAdmin userAdmin
, List
<ColumnDefinition
> columnDefs
) {
91 this.userAdmin
= userAdmin
;
92 this.columnDefs
= columnDefs
;
96 protected void okPressed() {
97 if (getSelected() == null)
98 MessageDialog
.openError(getShell(), "No user chosen",
99 "Please, choose a user or press Cancel.");
104 protected Control
createDialogArea(Composite parent
) {
105 Composite dialogArea
= (Composite
) super.createDialogArea(parent
);
106 dialogArea
.setLayout(new FillLayout());
108 Composite bodyCmp
= new Composite(dialogArea
, SWT
.NO_FOCUS
);
109 bodyCmp
.setLayout(new GridLayout());
111 // Create and configure the table
112 userTableViewerCmp
= new MyUserTableViewer(bodyCmp
, SWT
.MULTI
113 | SWT
.H_SCROLL
| SWT
.V_SCROLL
);
115 userTableViewerCmp
.setColumnDefinitions(columnDefs
);
116 userTableViewerCmp
.populateWithStaticFilters(false, false);
117 GridData gd
= EclipseUiUtils
.fillAll();
118 gd
.minimumHeight
= 300;
119 userTableViewerCmp
.setLayoutData(gd
);
120 userTableViewerCmp
.refresh();
123 userViewer
= userTableViewerCmp
.getTableViewer();
124 userViewer
.addDoubleClickListener(new MyDoubleClickListener());
126 .addSelectionChangedListener(new MySelectionChangedListener());
132 public User
getSelected() {
133 if (selectedUser
== null)
139 protected void configureShell(Shell shell
) {
140 super.configureShell(shell
);
141 shell
.setText(title
);
144 class MyDoubleClickListener
implements IDoubleClickListener
{
145 public void doubleClick(DoubleClickEvent evt
) {
146 if (evt
.getSelection().isEmpty())
149 Object obj
= ((IStructuredSelection
) evt
.getSelection())
151 if (obj
instanceof User
) {
152 selectedUser
= (User
) obj
;
158 class MySelectionChangedListener
implements ISelectionChangedListener
{
160 public void selectionChanged(SelectionChangedEvent event
) {
161 if (event
.getSelection().isEmpty()) {
165 Object obj
= ((IStructuredSelection
) event
.getSelection())
167 if (obj
instanceof Group
) {
168 selectedUser
= (Group
) obj
;
173 private class MyUserTableViewer
extends LdifUsersTable
{
174 private static final long serialVersionUID
= 8467999509931900367L;
176 private final String
[] knownProps
= { LdapAttrs
.uid
.name(),
177 LdapAttrs
.cn
.name(), LdapAttrs
.DN
};
179 private Button showSystemRoleBtn
;
180 private Button showUserBtn
;
182 public MyUserTableViewer(Composite parent
, int style
) {
183 super(parent
, style
);
186 protected void populateStaticFilters(Composite staticFilterCmp
) {
187 staticFilterCmp
.setLayout(new GridLayout());
188 showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
189 showSystemRoleBtn
.setText("Show system roles ");
191 showUserBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
192 showUserBtn
.setText("Show users ");
194 SelectionListener sl
= new SelectionAdapter() {
195 private static final long serialVersionUID
= -7033424592697691676L;
198 public void widgetSelected(SelectionEvent e
) {
203 showSystemRoleBtn
.addSelectionListener(sl
);
204 showUserBtn
.addSelectionListener(sl
);
208 protected List
<User
> listFilteredElements(String filter
) {
211 StringBuilder builder
= new StringBuilder();
213 StringBuilder filterBuilder
= new StringBuilder();
215 for (String prop
: knownProps
) {
216 filterBuilder
.append("(");
217 filterBuilder
.append(prop
);
218 filterBuilder
.append("=*");
219 filterBuilder
.append(filter
);
220 filterBuilder
.append("*)");
223 String typeStr
= "(" + LdapAttrs
.objectClass
.name() + "="
224 + LdapObjs
.groupOfNames
.name() + ")";
225 if ((showUserBtn
.getSelection()))
226 typeStr
= "(|(" + LdapAttrs
.objectClass
.name() + "="
227 + LdapObjs
.inetOrgPerson
.name() + ")" + typeStr
230 if (!showSystemRoleBtn
.getSelection())
231 typeStr
= "(& " + typeStr
+ "(!(" + LdapAttrs
.DN
+ "=*"
232 + NodeConstants
.ROLES_BASEDN
+ ")))";
234 if (filterBuilder
.length() > 1) {
235 builder
.append("(&" + typeStr
);
236 builder
.append("(|");
237 builder
.append(filterBuilder
.toString());
238 builder
.append("))");
240 builder
.append(typeStr
);
242 roles
= userAdmin
.getRoles(builder
.toString());
243 } catch (InvalidSyntaxException e
) {
244 throw new EclipseUiException(
245 "Unable to get roles with filter: " + filter
, e
);
247 List
<User
> users
= new ArrayList
<User
>();
248 for (Role role
: roles
)
249 if (!users
.contains(role
))
250 users
.add((User
) role
);
255 private boolean notNull(String string
) {
259 return !"".equals(string
.trim());