1 package org
.argeo
.security
.ui
.admin
.editors
;
3 import java
.util
.ArrayList
;
6 import org
.apache
.commons
.logging
.Log
;
7 import org
.apache
.commons
.logging
.LogFactory
;
8 import org
.argeo
.jcr
.ArgeoNames
;
9 import org
.argeo
.security
.UserAdminService
;
10 import org
.argeo
.security
.ui
.admin
.SecurityAdminPlugin
;
11 import org
.eclipse
.jface
.viewers
.CellEditor
;
12 import org
.eclipse
.jface
.viewers
.CheckboxCellEditor
;
13 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
14 import org
.eclipse
.jface
.viewers
.EditingSupport
;
15 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
16 import org
.eclipse
.jface
.viewers
.TableViewer
;
17 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
18 import org
.eclipse
.jface
.viewers
.Viewer
;
19 import org
.eclipse
.swt
.SWT
;
20 import org
.eclipse
.swt
.graphics
.Image
;
21 import org
.eclipse
.swt
.layout
.FillLayout
;
22 import org
.eclipse
.swt
.widgets
.Composite
;
23 import org
.eclipse
.swt
.widgets
.Table
;
24 import org
.eclipse
.swt
.widgets
.TableColumn
;
25 import org
.eclipse
.ui
.forms
.AbstractFormPart
;
26 import org
.eclipse
.ui
.forms
.IManagedForm
;
27 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
28 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
29 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
30 import org
.springframework
.security
.GrantedAuthority
;
31 import org
.springframework
.security
.userdetails
.UserDetails
;
34 * Display/edit the roles of a user.
36 public class UserRolesPage
extends FormPage
implements ArgeoNames
{
37 final static String ID
= "argeoUserEditor.rolesPage";
39 private final static Log log
= LogFactory
.getLog(UserRolesPage
.class);
40 private final static Image ROLE_CHECKED
= SecurityAdminPlugin
41 .getImageDescriptor("icons/security.gif").createImage();
43 private TableViewer rolesViewer
;
44 private UserAdminService userAdminService
;
45 private List
<String
> roles
;
47 public UserRolesPage(FormEditor editor
, UserDetails userDetails
,
48 UserAdminService userAdminService
) {
49 super(editor
, ID
, "Roles");
50 setUserDetails(userDetails
);
51 this.userAdminService
= userAdminService
;
54 public void setUserDetails(UserDetails userDetails
) {
55 this.roles
= new ArrayList
<String
>();
56 for (GrantedAuthority ga
: userDetails
.getAuthorities())
57 roles
.add(ga
.getAuthority());
58 if (rolesViewer
!= null)
59 rolesViewer
.refresh();
62 protected void createFormContent(final IManagedForm mf
) {
63 ScrolledForm form
= mf
.getForm();
64 form
.setText("Roles");
65 FillLayout mainLayout
= new FillLayout();
66 // ColumnLayout mainLayout = new ColumnLayout();
67 // mainLayout.minNumColumns = 1;
68 // mainLayout.maxNumColumns = 4;
69 // mainLayout.topMargin = 0;
70 // mainLayout.bottomMargin = 5;
71 // mainLayout.leftMargin = mainLayout.rightMargin =
72 // mainLayout.horizontalSpacing = mainLayout.verticalSpacing = 10;
73 form
.getBody().setLayout(mainLayout
);
74 createRolesPart(form
.getBody());
77 /** Creates the role section */
78 protected void createRolesPart(Composite parent
) {
79 Table table
= new Table(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
81 AbstractFormPart part
= new AbstractFormPart() {
82 public void commit(boolean onSave
) {
83 // roles have already been modified in editing
85 if (log
.isTraceEnabled())
86 log
.trace("Role part committed");
89 getManagedForm().addPart(part
);
91 // GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
92 // gridData.verticalSpan = 20;
93 // table.setLayoutData(gridData);
94 table
.setLinesVisible(true);
95 table
.setHeaderVisible(false);
96 rolesViewer
= new TableViewer(table
);
99 TableViewerColumn column
= createTableViewerColumn(rolesViewer
,
101 column
.setLabelProvider(new ColumnLabelProvider() {
102 public String
getText(Object element
) {
106 public Image
getImage(Object element
) {
107 String role
= element
.toString();
108 if (roles
.contains(role
)) {
115 column
.setEditingSupport(new RoleEditingSupport(rolesViewer
, part
));
118 column
= createTableViewerColumn(rolesViewer
, "Role", 200);
119 column
.setLabelProvider(new ColumnLabelProvider() {
120 public String
getText(Object element
) {
121 return element
.toString();
124 public Image
getImage(Object element
) {
128 rolesViewer
.setContentProvider(new RolesContentProvider());
129 rolesViewer
.setInput(getEditorSite());
132 protected TableViewerColumn
createTableViewerColumn(TableViewer viewer
,
133 String title
, int bound
) {
134 final TableViewerColumn viewerColumn
= new TableViewerColumn(viewer
,
136 final TableColumn column
= viewerColumn
.getColumn();
137 column
.setText(title
);
138 column
.setWidth(bound
);
139 column
.setResizable(true);
140 column
.setMoveable(true);
145 public List
<String
> getRoles() {
149 public void refresh() {
150 rolesViewer
.refresh();
153 private class RolesContentProvider
implements IStructuredContentProvider
{
154 public Object
[] getElements(Object inputElement
) {
155 return userAdminService
.listEditableRoles().toArray();
158 public void dispose() {
161 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
165 /** Select the columns by editing the checkbox in the first column */
166 class RoleEditingSupport
extends EditingSupport
{
168 private final TableViewer viewer
;
169 private final AbstractFormPart formPart
;
171 public RoleEditingSupport(TableViewer viewer
, AbstractFormPart formPart
) {
173 this.viewer
= viewer
;
174 this.formPart
= formPart
;
178 protected CellEditor
getCellEditor(Object element
) {
179 return new CheckboxCellEditor(null, SWT
.CHECK
| SWT
.READ_ONLY
);
184 protected boolean canEdit(Object element
) {
189 protected Object
getValue(Object element
) {
190 String role
= element
.toString();
191 return roles
.contains(role
);
196 protected void setValue(Object element
, Object value
) {
197 Boolean inRole
= (Boolean
) value
;
198 String role
= element
.toString();
199 if (inRole
&& !roles
.contains(role
)) {
201 formPart
.markDirty();
202 } else if (!inRole
&& roles
.contains(role
)) {
204 formPart
.markDirty();