]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/UserRolesPage.java
Introduce delete roles and users
[lgpl/argeo-commons.git] / security / plugins / org.argeo.security.ui.admin / src / main / java / org / argeo / security / ui / admin / editors / UserRolesPage.java
1 package org.argeo.security.ui.admin.editors;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
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;
32
33 /**
34 * Display/edit the roles of a user.
35 */
36 public class UserRolesPage extends FormPage implements ArgeoNames {
37 final static String ID = "argeoUserEditor.rolesPage";
38
39 private final static Log log = LogFactory.getLog(UserRolesPage.class);
40 private final static Image ROLE_CHECKED = SecurityAdminPlugin
41 .getImageDescriptor("icons/security.gif").createImage();
42
43 private TableViewer rolesViewer;
44 private UserAdminService userAdminService;
45 private List<String> roles;
46
47 public UserRolesPage(FormEditor editor, UserDetails userDetails,
48 UserAdminService userAdminService) {
49 super(editor, ID, "Roles");
50 setUserDetails(userDetails);
51 this.userAdminService = userAdminService;
52 }
53
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();
60 }
61
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());
75 }
76
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);
80
81 AbstractFormPart part = new AbstractFormPart() {
82 public void commit(boolean onSave) {
83 // roles have already been modified in editing
84 super.commit(onSave);
85 if (log.isTraceEnabled())
86 log.trace("Role part committed");
87 }
88 };
89 getManagedForm().addPart(part);
90
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);
97
98 // check column
99 TableViewerColumn column = createTableViewerColumn(rolesViewer,
100 "checked", 20);
101 column.setLabelProvider(new ColumnLabelProvider() {
102 public String getText(Object element) {
103 return null;
104 }
105
106 public Image getImage(Object element) {
107 String role = element.toString();
108 if (roles.contains(role)) {
109 return ROLE_CHECKED;
110 } else {
111 return null;
112 }
113 }
114 });
115 column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
116
117 // role column
118 column = createTableViewerColumn(rolesViewer, "Role", 200);
119 column.setLabelProvider(new ColumnLabelProvider() {
120 public String getText(Object element) {
121 return element.toString();
122 }
123
124 public Image getImage(Object element) {
125 return null;
126 }
127 });
128 rolesViewer.setContentProvider(new RolesContentProvider());
129 rolesViewer.setInput(getEditorSite());
130 }
131
132 protected TableViewerColumn createTableViewerColumn(TableViewer viewer,
133 String title, int bound) {
134 final TableViewerColumn viewerColumn = new TableViewerColumn(viewer,
135 SWT.NONE);
136 final TableColumn column = viewerColumn.getColumn();
137 column.setText(title);
138 column.setWidth(bound);
139 column.setResizable(true);
140 column.setMoveable(true);
141 return viewerColumn;
142
143 }
144
145 public List<String> getRoles() {
146 return roles;
147 }
148
149 public void refresh() {
150 rolesViewer.refresh();
151 }
152
153 private class RolesContentProvider implements IStructuredContentProvider {
154 public Object[] getElements(Object inputElement) {
155 return userAdminService.listEditableRoles().toArray();
156 }
157
158 public void dispose() {
159 }
160
161 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
162 }
163 }
164
165 /** Select the columns by editing the checkbox in the first column */
166 class RoleEditingSupport extends EditingSupport {
167
168 private final TableViewer viewer;
169 private final AbstractFormPart formPart;
170
171 public RoleEditingSupport(TableViewer viewer, AbstractFormPart formPart) {
172 super(viewer);
173 this.viewer = viewer;
174 this.formPart = formPart;
175 }
176
177 @Override
178 protected CellEditor getCellEditor(Object element) {
179 return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
180
181 }
182
183 @Override
184 protected boolean canEdit(Object element) {
185 return true;
186 }
187
188 @Override
189 protected Object getValue(Object element) {
190 String role = element.toString();
191 return roles.contains(role);
192
193 }
194
195 @Override
196 protected void setValue(Object element, Object value) {
197 Boolean inRole = (Boolean) value;
198 String role = element.toString();
199 if (inRole && !roles.contains(role)) {
200 roles.add(role);
201 formPart.markDirty();
202 } else if (!inRole && roles.contains(role)) {
203 roles.remove(role);
204 formPart.markDirty();
205 }
206 viewer.refresh();
207 }
208 }
209
210 }