1 package org
.argeo
.cms
.swt
.useradmin
;
3 import java
.util
.ArrayList
;
6 import org
.argeo
.api
.acr
.ldap
.LdapAttr
;
7 import org
.argeo
.api
.acr
.ldap
.LdapObj
;
8 import org
.argeo
.api
.cms
.CmsConstants
;
9 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
10 import org
.argeo
.eclipse
.ui
.EclipseUiException
;
11 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
12 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
13 import org
.eclipse
.jface
.dialogs
.TrayDialog
;
14 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
15 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
16 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
17 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
18 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
19 import org
.eclipse
.jface
.viewers
.TableViewer
;
20 import org
.eclipse
.swt
.SWT
;
21 import org
.eclipse
.swt
.events
.SelectionAdapter
;
22 import org
.eclipse
.swt
.events
.SelectionEvent
;
23 import org
.eclipse
.swt
.events
.SelectionListener
;
24 import org
.eclipse
.swt
.layout
.FillLayout
;
25 import org
.eclipse
.swt
.layout
.GridData
;
26 import org
.eclipse
.swt
.layout
.GridLayout
;
27 import org
.eclipse
.swt
.widgets
.Button
;
28 import org
.eclipse
.swt
.widgets
.Composite
;
29 import org
.eclipse
.swt
.widgets
.Control
;
30 import org
.eclipse
.swt
.widgets
.Shell
;
31 import org
.osgi
.framework
.InvalidSyntaxException
;
32 import org
.osgi
.service
.useradmin
.Group
;
33 import org
.osgi
.service
.useradmin
.Role
;
34 import org
.osgi
.service
.useradmin
.User
;
35 import org
.osgi
.service
.useradmin
.UserAdmin
;
37 /** Dialog with a user (or group) list to pick up one */
38 public class PickUpUserDialog
extends TrayDialog
{
39 private static final long serialVersionUID
= -1420106871173920369L;
42 private final UserAdmin userAdmin
;
43 private User selectedUser
;
45 // this page widgets and UI objects
47 private LdifUsersTable userTableViewerCmp
;
48 private TableViewer userViewer
;
49 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
52 * A dialog to pick up a group or a user, showing a table with default
55 public PickUpUserDialog(Shell parentShell
, String title
, UserAdmin userAdmin
) {
58 this.userAdmin
= userAdmin
;
60 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_ICON
), "",
62 columnDefs
.add(new ColumnDefinition(
63 new UserLP(UserLP
.COL_DISPLAY_NAME
), "Common Name", 150, 100));
64 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DOMAIN
),
66 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DN
),
67 "Distinguished Name", 300, 100));
70 /** A dialog to pick up a group or a user */
71 public PickUpUserDialog(Shell parentShell
, String title
,
72 UserAdmin userAdmin
, List
<ColumnDefinition
> columnDefs
) {
75 this.userAdmin
= userAdmin
;
76 this.columnDefs
= columnDefs
;
80 protected void okPressed() {
81 if (getSelected() == null)
82 MessageDialog
.openError(getShell(), "No user chosen",
83 "Please, choose a user or press Cancel.");
88 protected Control
createDialogArea(Composite parent
) {
89 Composite dialogArea
= (Composite
) super.createDialogArea(parent
);
90 dialogArea
.setLayout(new FillLayout());
92 Composite bodyCmp
= new Composite(dialogArea
, SWT
.NO_FOCUS
);
93 bodyCmp
.setLayout(new GridLayout());
95 // Create and configure the table
96 userTableViewerCmp
= new MyUserTableViewer(bodyCmp
, SWT
.MULTI
97 | SWT
.H_SCROLL
| SWT
.V_SCROLL
);
99 userTableViewerCmp
.setColumnDefinitions(columnDefs
);
100 userTableViewerCmp
.populateWithStaticFilters(false, false);
101 GridData gd
= EclipseUiUtils
.fillAll();
102 gd
.minimumHeight
= 300;
103 userTableViewerCmp
.setLayoutData(gd
);
104 userTableViewerCmp
.refresh();
107 userViewer
= userTableViewerCmp
.getTableViewer();
108 userViewer
.addDoubleClickListener(new MyDoubleClickListener());
110 .addSelectionChangedListener(new MySelectionChangedListener());
116 public User
getSelected() {
117 if (selectedUser
== null)
123 protected void configureShell(Shell shell
) {
124 super.configureShell(shell
);
125 shell
.setText(title
);
128 class MyDoubleClickListener
implements IDoubleClickListener
{
129 public void doubleClick(DoubleClickEvent evt
) {
130 if (evt
.getSelection().isEmpty())
133 Object obj
= ((IStructuredSelection
) evt
.getSelection())
135 if (obj
instanceof User
) {
136 selectedUser
= (User
) obj
;
142 class MySelectionChangedListener
implements ISelectionChangedListener
{
144 public void selectionChanged(SelectionChangedEvent event
) {
145 if (event
.getSelection().isEmpty()) {
149 Object obj
= ((IStructuredSelection
) event
.getSelection())
151 if (obj
instanceof Group
) {
152 selectedUser
= (Group
) obj
;
157 private class MyUserTableViewer
extends LdifUsersTable
{
158 private static final long serialVersionUID
= 8467999509931900367L;
160 private final String
[] knownProps
= { LdapAttr
.uid
.name(),
161 LdapAttr
.cn
.name(), LdapAttr
.DN
};
163 private Button showSystemRoleBtn
;
164 private Button showUserBtn
;
166 public MyUserTableViewer(Composite parent
, int style
) {
167 super(parent
, style
);
170 protected void populateStaticFilters(Composite staticFilterCmp
) {
171 staticFilterCmp
.setLayout(new GridLayout());
172 showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
173 showSystemRoleBtn
.setText("Show system roles ");
175 showUserBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
176 showUserBtn
.setText("Show users ");
178 SelectionListener sl
= new SelectionAdapter() {
179 private static final long serialVersionUID
= -7033424592697691676L;
182 public void widgetSelected(SelectionEvent e
) {
187 showSystemRoleBtn
.addSelectionListener(sl
);
188 showUserBtn
.addSelectionListener(sl
);
192 protected List
<User
> listFilteredElements(String filter
) {
195 StringBuilder builder
= new StringBuilder();
197 StringBuilder filterBuilder
= new StringBuilder();
199 for (String prop
: knownProps
) {
200 filterBuilder
.append("(");
201 filterBuilder
.append(prop
);
202 filterBuilder
.append("=*");
203 filterBuilder
.append(filter
);
204 filterBuilder
.append("*)");
207 String typeStr
= "(" + LdapAttr
.objectClass
.name() + "="
208 + LdapObj
.groupOfNames
.name() + ")";
209 if ((showUserBtn
.getSelection()))
210 typeStr
= "(|(" + LdapAttr
.objectClass
.name() + "="
211 + LdapObj
.inetOrgPerson
.name() + ")" + typeStr
214 if (!showSystemRoleBtn
.getSelection())
215 typeStr
= "(& " + typeStr
+ "(!(" + LdapAttr
.DN
+ "=*"
216 + CmsConstants
.SYSTEM_ROLES_BASEDN
+ ")))";
218 if (filterBuilder
.length() > 1) {
219 builder
.append("(&" + typeStr
);
220 builder
.append("(|");
221 builder
.append(filterBuilder
.toString());
222 builder
.append("))");
224 builder
.append(typeStr
);
226 roles
= userAdmin
.getRoles(builder
.toString());
227 } catch (InvalidSyntaxException e
) {
228 throw new EclipseUiException(
229 "Unable to get roles with filter: " + filter
, e
);
231 List
<User
> users
= new ArrayList
<User
>();
232 for (Role role
: roles
)
233 if (!users
.contains(role
))
234 users
.add((User
) role
);
239 private boolean notNull(String string
) {
243 return !"".equals(string
.trim());