]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserRolesPage.java
Plug password management
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / editors / UserRolesPage.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.security.ui.admin.editors;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.argeo.jcr.ArgeoNames;
24 import org.argeo.security.UserAdminService;
25 import org.argeo.security.ui.admin.SecurityAdminPlugin;
26 import org.eclipse.jface.viewers.CellEditor;
27 import org.eclipse.jface.viewers.CheckboxCellEditor;
28 import org.eclipse.jface.viewers.ColumnLabelProvider;
29 import org.eclipse.jface.viewers.EditingSupport;
30 import org.eclipse.jface.viewers.IStructuredContentProvider;
31 import org.eclipse.jface.viewers.TableViewer;
32 import org.eclipse.jface.viewers.TableViewerColumn;
33 import org.eclipse.jface.viewers.Viewer;
34 import org.eclipse.swt.SWT;
35 import org.eclipse.swt.graphics.Image;
36 import org.eclipse.swt.layout.FillLayout;
37 import org.eclipse.swt.widgets.Composite;
38 import org.eclipse.swt.widgets.Table;
39 import org.eclipse.swt.widgets.TableColumn;
40 import org.eclipse.ui.forms.AbstractFormPart;
41 import org.eclipse.ui.forms.IManagedForm;
42 import org.eclipse.ui.forms.editor.FormEditor;
43 import org.eclipse.ui.forms.editor.FormPage;
44 import org.eclipse.ui.forms.widgets.ScrolledForm;
45 import org.springframework.security.core.GrantedAuthority;
46 import org.springframework.security.core.userdetails.UserDetails;
47
48 /**
49 * Display/edit the roles of a user.
50 */
51 public class UserRolesPage extends FormPage implements ArgeoNames {
52 final static String ID = "argeoUserEditor.rolesPage";
53
54 private final static Log log = LogFactory.getLog(UserRolesPage.class);
55 private final static Image ROLE_CHECKED = SecurityAdminPlugin
56 .getImageDescriptor("icons/security.gif").createImage();
57
58 private TableViewer rolesViewer;
59 private UserAdminService userAdminService;
60 private List<String> roles;
61
62 public UserRolesPage(FormEditor editor, UserDetails userDetails,
63 UserAdminService userAdminService) {
64 super(editor, ID, "Roles");
65 setUserDetails(userDetails);
66 this.userAdminService = userAdminService;
67 }
68
69 public void setUserDetails(UserDetails userDetails) {
70 this.roles = new ArrayList<String>();
71 for (GrantedAuthority ga : userDetails.getAuthorities())
72 roles.add(ga.getAuthority());
73 if (rolesViewer != null)
74 rolesViewer.refresh();
75 }
76
77 protected void createFormContent(final IManagedForm mf) {
78 ScrolledForm form = mf.getForm();
79 form.setText("Roles");
80 FillLayout mainLayout = new FillLayout();
81 // ColumnLayout mainLayout = new ColumnLayout();
82 // mainLayout.minNumColumns = 1;
83 // mainLayout.maxNumColumns = 4;
84 // mainLayout.topMargin = 0;
85 // mainLayout.bottomMargin = 5;
86 // mainLayout.leftMargin = mainLayout.rightMargin =
87 // mainLayout.horizontalSpacing = mainLayout.verticalSpacing = 10;
88 form.getBody().setLayout(mainLayout);
89 createRolesPart(form.getBody());
90 }
91
92 /** Creates the role section */
93 protected void createRolesPart(Composite parent) {
94 Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
95
96 AbstractFormPart part = new AbstractFormPart() {
97 public void commit(boolean onSave) {
98 // roles have already been modified in editing
99 super.commit(onSave);
100 if (log.isTraceEnabled())
101 log.trace("Role part committed");
102 }
103 };
104 getManagedForm().addPart(part);
105
106 // GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
107 // gridData.verticalSpan = 20;
108 // table.setLayoutData(gridData);
109 table.setLinesVisible(true);
110 table.setHeaderVisible(false);
111 rolesViewer = new TableViewer(table);
112
113 // check column
114 TableViewerColumn column = createTableViewerColumn(rolesViewer,
115 "checked", 20);
116 column.setLabelProvider(new ColumnLabelProvider() {
117 private static final long serialVersionUID = -1354458151271666525L;
118
119 public String getText(Object element) {
120 return null;
121 }
122
123 public Image getImage(Object element) {
124 String role = element.toString();
125 if (roles.contains(role)) {
126 return ROLE_CHECKED;
127 } else {
128 return null;
129 }
130 }
131 });
132 column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
133
134 // role column
135 column = createTableViewerColumn(rolesViewer, "Role", 200);
136 column.setLabelProvider(new ColumnLabelProvider() {
137 private static final long serialVersionUID = 2968056181744306838L;
138
139 public String getText(Object element) {
140 return element.toString();
141 }
142
143 public Image getImage(Object element) {
144 return null;
145 }
146 });
147 rolesViewer.setContentProvider(new RolesContentProvider());
148 rolesViewer.setInput(getEditorSite());
149 }
150
151 protected TableViewerColumn createTableViewerColumn(TableViewer viewer,
152 String title, int bound) {
153 final TableViewerColumn viewerColumn = new TableViewerColumn(viewer,
154 SWT.NONE);
155 final TableColumn column = viewerColumn.getColumn();
156 column.setText(title);
157 column.setWidth(bound);
158 column.setResizable(true);
159 column.setMoveable(true);
160 return viewerColumn;
161
162 }
163
164 public List<String> getRoles() {
165 return roles;
166 }
167
168 public void refresh() {
169 rolesViewer.refresh();
170 }
171
172 private class RolesContentProvider implements IStructuredContentProvider {
173 private static final long serialVersionUID = -1882254608698512781L;
174
175 public Object[] getElements(Object inputElement) {
176 return userAdminService.listEditableRoles().toArray();
177 }
178
179 public void dispose() {
180 }
181
182 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
183 }
184 }
185
186 /** Select the columns by editing the checkbox in the first column */
187 class RoleEditingSupport extends EditingSupport {
188 private static final long serialVersionUID = 4041402007711754376L;
189 private final TableViewer viewer;
190 private final AbstractFormPart formPart;
191
192 public RoleEditingSupport(TableViewer viewer, AbstractFormPart formPart) {
193 super(viewer);
194 this.viewer = viewer;
195 this.formPart = formPart;
196 }
197
198 @Override
199 protected CellEditor getCellEditor(Object element) {
200 return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
201
202 }
203
204 @Override
205 protected boolean canEdit(Object element) {
206 return true;
207 }
208
209 @Override
210 protected Object getValue(Object element) {
211 String role = element.toString();
212 return roles.contains(role);
213
214 }
215
216 @Override
217 protected void setValue(Object element, Object value) {
218 Boolean inRole = (Boolean) value;
219 String role = element.toString();
220 if (inRole && !roles.contains(role)) {
221 roles.add(role);
222 formPart.markDirty();
223 } else if (!inRole && roles.contains(role)) {
224 roles.remove(role);
225 formPart.markDirty();
226 }
227 viewer.refresh();
228 }
229 }
230
231 }