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
.security
.ui
.admin
.editors
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
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
;
49 * Display/edit the roles of a user.
51 public class UserRolesPage
extends FormPage
implements ArgeoNames
{
52 final static String ID
= "argeoUserEditor.rolesPage";
54 private final static Log log
= LogFactory
.getLog(UserRolesPage
.class);
55 private final static Image ROLE_CHECKED
= SecurityAdminPlugin
56 .getImageDescriptor("icons/security.gif").createImage();
58 private TableViewer rolesViewer
;
59 private UserAdminService userAdminService
;
60 private List
<String
> roles
;
62 public UserRolesPage(FormEditor editor
, UserDetails userDetails
,
63 UserAdminService userAdminService
) {
64 super(editor
, ID
, "Roles");
65 setUserDetails(userDetails
);
66 this.userAdminService
= userAdminService
;
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();
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());
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
);
96 AbstractFormPart part
= new AbstractFormPart() {
97 public void commit(boolean onSave
) {
98 // roles have already been modified in editing
100 if (log
.isTraceEnabled())
101 log
.trace("Role part committed");
104 getManagedForm().addPart(part
);
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
);
114 TableViewerColumn column
= createTableViewerColumn(rolesViewer
,
116 column
.setLabelProvider(new ColumnLabelProvider() {
117 private static final long serialVersionUID
= -1354458151271666525L;
119 public String
getText(Object element
) {
123 public Image
getImage(Object element
) {
124 String role
= element
.toString();
125 if (roles
.contains(role
)) {
132 column
.setEditingSupport(new RoleEditingSupport(rolesViewer
, part
));
135 column
= createTableViewerColumn(rolesViewer
, "Role", 200);
136 column
.setLabelProvider(new ColumnLabelProvider() {
137 private static final long serialVersionUID
= 2968056181744306838L;
139 public String
getText(Object element
) {
140 return element
.toString();
143 public Image
getImage(Object element
) {
147 rolesViewer
.setContentProvider(new RolesContentProvider());
148 rolesViewer
.setInput(getEditorSite());
151 protected TableViewerColumn
createTableViewerColumn(TableViewer viewer
,
152 String title
, int bound
) {
153 final TableViewerColumn viewerColumn
= new TableViewerColumn(viewer
,
155 final TableColumn column
= viewerColumn
.getColumn();
156 column
.setText(title
);
157 column
.setWidth(bound
);
158 column
.setResizable(true);
159 column
.setMoveable(true);
164 public List
<String
> getRoles() {
168 public void refresh() {
169 rolesViewer
.refresh();
172 private class RolesContentProvider
implements IStructuredContentProvider
{
173 private static final long serialVersionUID
= -1882254608698512781L;
175 public Object
[] getElements(Object inputElement
) {
176 return userAdminService
.listEditableRoles().toArray();
179 public void dispose() {
182 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
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
;
192 public RoleEditingSupport(TableViewer viewer
, AbstractFormPart formPart
) {
194 this.viewer
= viewer
;
195 this.formPart
= formPart
;
199 protected CellEditor
getCellEditor(Object element
) {
200 return new CheckboxCellEditor(null, SWT
.CHECK
| SWT
.READ_ONLY
);
205 protected boolean canEdit(Object element
) {
210 protected Object
getValue(Object element
) {
211 String role
= element
.toString();
212 return roles
.contains(role
);
217 protected void setValue(Object element
, Object value
) {
218 Boolean inRole
= (Boolean
) value
;
219 String role
= element
.toString();
220 if (inRole
&& !roles
.contains(role
)) {
222 formPart
.markDirty();
223 } else if (!inRole
&& roles
.contains(role
)) {
225 formPart
.markDirty();