1 package org
.argeo
.cms
.ui
.useradmin
;
3 import java
.util
.ArrayList
;
6 import org
.argeo
.api
.NodeConstants
;
7 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
8 import org
.argeo
.eclipse
.ui
.EclipseUiException
;
9 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
10 import org
.argeo
.eclipse
.ui
.parts
.LdifUsersTable
;
11 import org
.argeo
.naming
.LdapAttrs
;
12 import org
.argeo
.naming
.LdapObjs
;
13 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
14 import org
.eclipse
.jface
.dialogs
.TrayDialog
;
15 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
16 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
17 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
18 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
19 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
20 import org
.eclipse
.jface
.viewers
.TableViewer
;
21 import org
.eclipse
.swt
.SWT
;
22 import org
.eclipse
.swt
.events
.SelectionAdapter
;
23 import org
.eclipse
.swt
.events
.SelectionEvent
;
24 import org
.eclipse
.swt
.events
.SelectionListener
;
25 import org
.eclipse
.swt
.layout
.FillLayout
;
26 import org
.eclipse
.swt
.layout
.GridData
;
27 import org
.eclipse
.swt
.layout
.GridLayout
;
28 import org
.eclipse
.swt
.widgets
.Button
;
29 import org
.eclipse
.swt
.widgets
.Composite
;
30 import org
.eclipse
.swt
.widgets
.Control
;
31 import org
.eclipse
.swt
.widgets
.Shell
;
32 import org
.osgi
.framework
.InvalidSyntaxException
;
33 import org
.osgi
.service
.useradmin
.Group
;
34 import org
.osgi
.service
.useradmin
.Role
;
35 import org
.osgi
.service
.useradmin
.User
;
36 import org
.osgi
.service
.useradmin
.UserAdmin
;
38 /** Dialog with a user (or group) list to pick up one */
39 public class PickUpUserDialog
extends TrayDialog
{
40 private static final long serialVersionUID
= -1420106871173920369L;
43 private final UserAdmin userAdmin
;
44 private User selectedUser
;
46 // this page widgets and UI objects
48 private LdifUsersTable userTableViewerCmp
;
49 private TableViewer userViewer
;
50 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
53 * A dialog to pick up a group or a user, showing a table with default
56 public PickUpUserDialog(Shell parentShell
, String title
, UserAdmin userAdmin
) {
59 this.userAdmin
= userAdmin
;
61 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_ICON
), "",
63 columnDefs
.add(new ColumnDefinition(
64 new UserLP(UserLP
.COL_DISPLAY_NAME
), "Common Name", 150, 100));
65 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DOMAIN
),
67 columnDefs
.add(new ColumnDefinition(new UserLP(UserLP
.COL_DN
),
68 "Distinguished Name", 300, 100));
71 /** A dialog to pick up a group or a user */
72 public PickUpUserDialog(Shell parentShell
, String title
,
73 UserAdmin userAdmin
, List
<ColumnDefinition
> columnDefs
) {
76 this.userAdmin
= userAdmin
;
77 this.columnDefs
= columnDefs
;
81 protected void okPressed() {
82 if (getSelected() == null)
83 MessageDialog
.openError(getShell(), "No user chosen",
84 "Please, choose a user or press Cancel.");
89 protected Control
createDialogArea(Composite parent
) {
90 Composite dialogArea
= (Composite
) super.createDialogArea(parent
);
91 dialogArea
.setLayout(new FillLayout());
93 Composite bodyCmp
= new Composite(dialogArea
, SWT
.NO_FOCUS
);
94 bodyCmp
.setLayout(new GridLayout());
96 // Create and configure the table
97 userTableViewerCmp
= new MyUserTableViewer(bodyCmp
, SWT
.MULTI
98 | SWT
.H_SCROLL
| SWT
.V_SCROLL
);
100 userTableViewerCmp
.setColumnDefinitions(columnDefs
);
101 userTableViewerCmp
.populateWithStaticFilters(false, false);
102 GridData gd
= EclipseUiUtils
.fillAll();
103 gd
.minimumHeight
= 300;
104 userTableViewerCmp
.setLayoutData(gd
);
105 userTableViewerCmp
.refresh();
108 userViewer
= userTableViewerCmp
.getTableViewer();
109 userViewer
.addDoubleClickListener(new MyDoubleClickListener());
111 .addSelectionChangedListener(new MySelectionChangedListener());
117 public User
getSelected() {
118 if (selectedUser
== null)
124 protected void configureShell(Shell shell
) {
125 super.configureShell(shell
);
126 shell
.setText(title
);
129 class MyDoubleClickListener
implements IDoubleClickListener
{
130 public void doubleClick(DoubleClickEvent evt
) {
131 if (evt
.getSelection().isEmpty())
134 Object obj
= ((IStructuredSelection
) evt
.getSelection())
136 if (obj
instanceof User
) {
137 selectedUser
= (User
) obj
;
143 class MySelectionChangedListener
implements ISelectionChangedListener
{
145 public void selectionChanged(SelectionChangedEvent event
) {
146 if (event
.getSelection().isEmpty()) {
150 Object obj
= ((IStructuredSelection
) event
.getSelection())
152 if (obj
instanceof Group
) {
153 selectedUser
= (Group
) obj
;
158 private class MyUserTableViewer
extends LdifUsersTable
{
159 private static final long serialVersionUID
= 8467999509931900367L;
161 private final String
[] knownProps
= { LdapAttrs
.uid
.name(),
162 LdapAttrs
.cn
.name(), LdapAttrs
.DN
};
164 private Button showSystemRoleBtn
;
165 private Button showUserBtn
;
167 public MyUserTableViewer(Composite parent
, int style
) {
168 super(parent
, style
);
171 protected void populateStaticFilters(Composite staticFilterCmp
) {
172 staticFilterCmp
.setLayout(new GridLayout());
173 showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
174 showSystemRoleBtn
.setText("Show system roles ");
176 showUserBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
177 showUserBtn
.setText("Show users ");
179 SelectionListener sl
= new SelectionAdapter() {
180 private static final long serialVersionUID
= -7033424592697691676L;
183 public void widgetSelected(SelectionEvent e
) {
188 showSystemRoleBtn
.addSelectionListener(sl
);
189 showUserBtn
.addSelectionListener(sl
);
193 protected List
<User
> listFilteredElements(String filter
) {
196 StringBuilder builder
= new StringBuilder();
198 StringBuilder filterBuilder
= new StringBuilder();
200 for (String prop
: knownProps
) {
201 filterBuilder
.append("(");
202 filterBuilder
.append(prop
);
203 filterBuilder
.append("=*");
204 filterBuilder
.append(filter
);
205 filterBuilder
.append("*)");
208 String typeStr
= "(" + LdapAttrs
.objectClass
.name() + "="
209 + LdapObjs
.groupOfNames
.name() + ")";
210 if ((showUserBtn
.getSelection()))
211 typeStr
= "(|(" + LdapAttrs
.objectClass
.name() + "="
212 + LdapObjs
.inetOrgPerson
.name() + ")" + typeStr
215 if (!showSystemRoleBtn
.getSelection())
216 typeStr
= "(& " + typeStr
+ "(!(" + LdapAttrs
.DN
+ "=*"
217 + NodeConstants
.ROLES_BASEDN
+ ")))";
219 if (filterBuilder
.length() > 1) {
220 builder
.append("(&" + typeStr
);
221 builder
.append("(|");
222 builder
.append(filterBuilder
.toString());
223 builder
.append("))");
225 builder
.append(typeStr
);
227 roles
= userAdmin
.getRoles(builder
.toString());
228 } catch (InvalidSyntaxException e
) {
229 throw new EclipseUiException(
230 "Unable to get roles with filter: " + filter
, e
);
232 List
<User
> users
= new ArrayList
<User
>();
233 for (Role role
: roles
)
234 if (!users
.contains(role
))
235 users
.add((User
) role
);
240 private boolean notNull(String string
) {
244 return !"".equals(string
.trim());