]> git.argeo.org Git - lgpl/argeo-commons.git/blob - users/PickUpGroupDialog.java
Prepare next development cycle
[lgpl/argeo-commons.git] / users / PickUpGroupDialog.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16 package org.argeo.eclipse.ui.workbench.users;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
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;
48
49 /** Dialog with a group list to pick up one */
50 public class PickUpGroupDialog extends TrayDialog {
51 private static final long serialVersionUID = -1420106871173920369L;
52
53 // Business objects
54 private final UserAdmin userAdmin;
55 private Group selectedGroup;
56
57 // this page widgets and UI objects
58 private String title;
59 private LdifUsersTable groupTableViewerCmp;
60 private TableViewer userViewer;
61 private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
62
63 public PickUpGroupDialog(Shell parentShell, String title,
64 UserAdmin userAdmin) {
65 super(parentShell);
66 this.title = title;
67 this.userAdmin = userAdmin;
68
69 // Define the displayed columns
70 columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_ICON), "",
71 26, 0));
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),
75 "Domain", 100, 120));
76 columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_DN),
77 "Distinguished Name", 300, 100));
78 }
79
80 protected Point getInitialSize() {
81 return new Point(600, 450);
82 }
83
84 protected Control createDialogArea(Composite parent) {
85 Composite dialogArea = (Composite) super.createDialogArea(parent);
86 dialogArea.setLayout(new FillLayout());
87
88 Composite bodyCmp = new Composite(dialogArea, SWT.NO_FOCUS);
89 bodyCmp.setLayout(new GridLayout());
90
91 // Create and configure the table
92 groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
93 | SWT.H_SCROLL | SWT.V_SCROLL);
94
95 groupTableViewerCmp.setColumnDefinitions(columnDefs);
96 groupTableViewerCmp.populateWithStaticFilters(false, false);
97 groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
98 groupTableViewerCmp.refresh();
99
100 // Controllers
101 userViewer = groupTableViewerCmp.getTableViewer();
102 userViewer.addDoubleClickListener(new MyDoubleClickListener());
103 userViewer
104 .addSelectionChangedListener(new MySelectionChangedListener());
105
106 parent.pack();
107 return dialogArea;
108 }
109
110 public String getSelected() {
111 if (selectedGroup == null)
112 return null;
113 else
114 return selectedGroup.getName();
115 }
116
117 protected void configureShell(Shell shell) {
118 super.configureShell(shell);
119 shell.setText(title);
120 }
121
122 class MyDoubleClickListener implements IDoubleClickListener {
123 public void doubleClick(DoubleClickEvent evt) {
124 if (evt.getSelection().isEmpty())
125 return;
126
127 Object obj = ((IStructuredSelection) evt.getSelection())
128 .getFirstElement();
129 if (obj instanceof Group) {
130 selectedGroup = (Group) obj;
131 okPressed();
132 }
133 }
134 }
135
136 class MySelectionChangedListener implements ISelectionChangedListener {
137 @Override
138 public void selectionChanged(SelectionChangedEvent event) {
139 if (event.getSelection().isEmpty()) {
140 selectedGroup = null;
141 return;
142 }
143 Object obj = ((IStructuredSelection) event.getSelection())
144 .getFirstElement();
145 if (obj instanceof Group) {
146 selectedGroup = (Group) obj;
147 }
148 }
149 }
150
151 private class MyUserTableViewer extends LdifUsersTable {
152 private static final long serialVersionUID = 8467999509931900367L;
153
154 private final String[] knownProps = { LdifName.uid.name(),
155 LdifName.cn.name(), LdifName.dn.name() };
156
157 private Button showSystemRoleBtn;
158
159 public MyUserTableViewer(Composite parent, int style) {
160 super(parent, style);
161 }
162
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;
169
170 @Override
171 public void widgetSelected(SelectionEvent e) {
172 refresh();
173 }
174
175 });
176 }
177
178 @Override
179 protected List<User> listFilteredElements(String filter) {
180 Role[] roles;
181 try {
182 StringBuilder builder = new StringBuilder();
183 StringBuilder tmpBuilder = new StringBuilder();
184 if (notNull(filter))
185 for (String prop : knownProps) {
186 tmpBuilder.append("(");
187 tmpBuilder.append(prop);
188 tmpBuilder.append("=*");
189 tmpBuilder.append(filter);
190 tmpBuilder.append("*)");
191 }
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)
197 .append("))");
198 builder.append("(|");
199 builder.append(tmpBuilder.toString());
200 builder.append("))");
201 } else {
202 if (!showSystemRoleBtn.getSelection())
203 builder.append("(&(objectclass=groupOfNames)(!(")
204 .append(LdifName.dn.name()).append("=*")
205 .append(GroupLP.ROLES_BASEDN).append(")))");
206 else
207 builder.append("(objectclass=groupOfNames)");
208
209 }
210 roles = userAdmin.getRoles(builder.toString());
211 } catch (InvalidSyntaxException e) {
212 throw new ArgeoException("Unable to get roles with filter: "
213 + filter, e);
214 }
215 List<User> users = new ArrayList<User>();
216 for (Role role : roles)
217 users.add((User) role);
218 return users;
219 }
220 }
221
222 private boolean notNull(String string) {
223 if (string == null)
224 return false;
225 else
226 return !"".equals(string.trim());
227 }
228 }