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
.osgi
.useradmin
.LdifName
;
26 import org
.eclipse
.jface
.dialogs
.TrayDialog
;
27 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
28 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
29 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
30 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
31 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
32 import org
.eclipse
.jface
.viewers
.TableViewer
;
33 import org
.eclipse
.swt
.SWT
;
34 import org
.eclipse
.swt
.events
.SelectionAdapter
;
35 import org
.eclipse
.swt
.events
.SelectionEvent
;
36 import org
.eclipse
.swt
.graphics
.Point
;
37 import org
.eclipse
.swt
.layout
.FillLayout
;
38 import org
.eclipse
.swt
.layout
.GridLayout
;
39 import org
.eclipse
.swt
.widgets
.Button
;
40 import org
.eclipse
.swt
.widgets
.Composite
;
41 import org
.eclipse
.swt
.widgets
.Control
;
42 import org
.eclipse
.swt
.widgets
.Shell
;
43 import org
.osgi
.framework
.InvalidSyntaxException
;
44 import org
.osgi
.service
.useradmin
.Group
;
45 import org
.osgi
.service
.useradmin
.Role
;
46 import org
.osgi
.service
.useradmin
.User
;
47 import org
.osgi
.service
.useradmin
.UserAdmin
;
49 /** Dialog with a group list to pick up one */
50 public class PickUpGroupDialog
extends TrayDialog
{
51 private static final long serialVersionUID
= -1420106871173920369L;
54 private final UserAdmin userAdmin
;
55 private Group selectedGroup
;
57 // this page widgets and UI objects
59 private LdifUsersTable groupTableViewerCmp
;
60 private TableViewer userViewer
;
61 private List
<ColumnDefinition
> columnDefs
= new ArrayList
<ColumnDefinition
>();
63 public PickUpGroupDialog(Shell parentShell
, String title
,
64 UserAdmin userAdmin
) {
67 this.userAdmin
= userAdmin
;
69 // Define the displayed columns
70 columnDefs
.add(new ColumnDefinition(new GroupLP(GroupLP
.COL_ICON
), "",
72 columnDefs
.add(new ColumnDefinition(new GroupLP(
73 GroupLP
.COL_DISPLAY_NAME
), "Common Name", 150, 100));
74 columnDefs
.add(new ColumnDefinition(new GroupLP(GroupLP
.COL_DOMAIN
),
76 columnDefs
.add(new ColumnDefinition(new GroupLP(GroupLP
.COL_DN
),
77 "Distinguished Name", 300, 100));
80 protected Point
getInitialSize() {
81 return new Point(600, 450);
84 protected Control
createDialogArea(Composite parent
) {
85 Composite dialogArea
= (Composite
) super.createDialogArea(parent
);
86 dialogArea
.setLayout(new FillLayout());
88 Composite bodyCmp
= new Composite(dialogArea
, SWT
.NO_FOCUS
);
89 bodyCmp
.setLayout(new GridLayout());
91 // Create and configure the table
92 groupTableViewerCmp
= new MyUserTableViewer(parent
, SWT
.MULTI
93 | SWT
.H_SCROLL
| SWT
.V_SCROLL
);
95 groupTableViewerCmp
.setColumnDefinitions(columnDefs
);
96 groupTableViewerCmp
.populateWithStaticFilters(false, false);
97 groupTableViewerCmp
.setLayoutData(EclipseUiUtils
.fillAll());
98 groupTableViewerCmp
.refresh();
101 userViewer
= groupTableViewerCmp
.getTableViewer();
102 userViewer
.addDoubleClickListener(new MyDoubleClickListener());
104 .addSelectionChangedListener(new MySelectionChangedListener());
110 public String
getSelected() {
111 if (selectedGroup
== null)
114 return selectedGroup
.getName();
117 protected void configureShell(Shell shell
) {
118 super.configureShell(shell
);
119 shell
.setText(title
);
122 class MyDoubleClickListener
implements IDoubleClickListener
{
123 public void doubleClick(DoubleClickEvent evt
) {
124 if (evt
.getSelection().isEmpty())
127 Object obj
= ((IStructuredSelection
) evt
.getSelection())
129 if (obj
instanceof Group
) {
130 selectedGroup
= (Group
) obj
;
136 class MySelectionChangedListener
implements ISelectionChangedListener
{
138 public void selectionChanged(SelectionChangedEvent event
) {
139 if (event
.getSelection().isEmpty()) {
140 selectedGroup
= null;
143 Object obj
= ((IStructuredSelection
) event
.getSelection())
145 if (obj
instanceof Group
) {
146 selectedGroup
= (Group
) obj
;
151 private class MyUserTableViewer
extends LdifUsersTable
{
152 private static final long serialVersionUID
= 8467999509931900367L;
154 private final String
[] knownProps
= { LdifName
.uid
.name(),
155 LdifName
.cn
.name(), LdifName
.dn
.name() };
157 private Button showSystemRoleBtn
;
159 public MyUserTableViewer(Composite parent
, int style
) {
160 super(parent
, style
);
163 protected void populateStaticFilters(Composite staticFilterCmp
) {
164 staticFilterCmp
.setLayout(new GridLayout());
165 showSystemRoleBtn
= new Button(staticFilterCmp
, SWT
.CHECK
);
166 showSystemRoleBtn
.setText("Show system roles ");
167 showSystemRoleBtn
.addSelectionListener(new SelectionAdapter() {
168 private static final long serialVersionUID
= -7033424592697691676L;
171 public void widgetSelected(SelectionEvent e
) {
179 protected List
<User
> listFilteredElements(String filter
) {
182 StringBuilder builder
= new StringBuilder();
183 StringBuilder tmpBuilder
= new StringBuilder();
185 for (String prop
: knownProps
) {
186 tmpBuilder
.append("(");
187 tmpBuilder
.append(prop
);
188 tmpBuilder
.append("=*");
189 tmpBuilder
.append(filter
);
190 tmpBuilder
.append("*)");
192 if (tmpBuilder
.length() > 1) {
193 builder
.append("(&(objectclass=groupOfNames)");
194 if (!showSystemRoleBtn
.getSelection())
195 builder
.append("(!(").append(LdifName
.dn
.name())
196 .append("=*").append(GroupLP
.ROLES_BASEDN
)
198 builder
.append("(|");
199 builder
.append(tmpBuilder
.toString());
200 builder
.append("))");
202 if (!showSystemRoleBtn
.getSelection())
203 builder
.append("(&(objectclass=groupOfNames)(!(")
204 .append(LdifName
.dn
.name()).append("=*")
205 .append(GroupLP
.ROLES_BASEDN
).append(")))");
207 builder
.append("(objectclass=groupOfNames)");
210 roles
= userAdmin
.getRoles(builder
.toString());
211 } catch (InvalidSyntaxException e
) {
212 throw new ArgeoException("Unable to get roles with filter: "
215 List
<User
> users
= new ArrayList
<User
>();
216 for (Role role
: roles
)
217 users
.add((User
) role
);
222 private boolean notNull(String string
) {
226 return !"".equals(string
.trim());