1 package org
.argeo
.cms
.users
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.RepositoryException
;
9 import org
.argeo
.ArgeoException
;
10 import org
.argeo
.cms
.CmsUtils
;
11 import org
.argeo
.cms
.viewers
.EditablePart
;
12 import org
.argeo
.cms
.viewers
.NodePart
;
13 import org
.argeo
.cms
.widgets
.StyledControl
;
14 import org
.argeo
.jcr
.ArgeoNames
;
15 import org
.argeo
.security
.UserAdminService
;
16 import org
.argeo
.security
.jcr
.JcrSecurityModel
;
17 import org
.argeo
.security
.jcr
.JcrUserDetails
;
18 import org
.eclipse
.jface
.viewers
.CheckStateChangedEvent
;
19 import org
.eclipse
.jface
.viewers
.CheckboxTableViewer
;
20 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
21 import org
.eclipse
.jface
.viewers
.ICheckStateListener
;
22 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
23 import org
.eclipse
.jface
.viewers
.TableViewer
;
24 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
25 import org
.eclipse
.jface
.viewers
.Viewer
;
26 import org
.eclipse
.swt
.SWT
;
27 import org
.eclipse
.swt
.events
.FocusEvent
;
28 import org
.eclipse
.swt
.events
.FocusListener
;
29 import org
.eclipse
.swt
.events
.MouseListener
;
30 import org
.eclipse
.swt
.widgets
.Composite
;
31 import org
.eclipse
.swt
.widgets
.Control
;
32 import org
.eclipse
.swt
.widgets
.Table
;
33 import org
.eclipse
.swt
.widgets
.TableColumn
;
34 import org
.eclipse
.swt
.widgets
.Text
;
35 import org
.springframework
.security
.GrantedAuthority
;
37 /** Display a single user main info once it has been created. */
38 public class UserRolesPart
extends StyledControl
implements EditablePart
,
39 NodePart
, FocusListener
{
41 // A static list of supported properties.
42 private List
<Text
> texts
;
43 private final static String KEY_PROP_NAME
= "jcr:propertyName";
45 private CheckboxTableViewer rolesViewer
;
46 private JcrUserDetails userDetails
;
47 private UserAdminService userAdminService
;
48 private List
<String
> roles
;
51 // private final Image checked;
53 // TODO implement to provide user creation ability for anonymous user?
54 // public UserPart(Composite parent, int swtStyle) {
55 // super(parent, swtStyle);
58 public UserRolesPart(Composite parent
, int style
, Item item
,
59 UserAdminService userAdminService
, JcrSecurityModel jcrSecurityModel
)
60 throws RepositoryException
{
61 this(parent
, style
, item
, true);
64 public UserRolesPart(Composite parent
, int style
, Item item
,
65 boolean cacheImmediately
) throws RepositoryException
{
66 super(parent
, style
, item
, cacheImmediately
);
68 // checked = new Image(parent, imageData);
73 public Item
getItem() throws RepositoryException
{
77 // Experimental, remove
78 public void setMouseListener(MouseListener mouseListener
) {
79 super.setMouseListener(mouseListener
);
81 for (Text txt
: texts
)
82 txt
.addMouseListener(mouseListener
);
87 protected Control
createControl(Composite box
, String style
) {
88 Table table
= new Table(box
, SWT
.CHECK
| SWT
.MULTI
| SWT
.H_SCROLL
90 table
.setLinesVisible(true);
91 table
.setHeaderVisible(false);
92 CmsUtils
.style(table
, style
);
94 rolesViewer
= new CheckboxTableViewer(table
);
96 TableViewerColumn column
;
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)) {
110 // return ROLE_CHECKED;
117 // column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
120 column
= createTableViewerColumn(rolesViewer
, "Role", 400);
121 column
.setLabelProvider(new ColumnLabelProvider() {
122 private static final long serialVersionUID
= -7334412925967366255L;
124 public String
getText(Object element
) {
125 return element
.toString();
128 rolesViewer
.setContentProvider(new RolesContentProvider());
129 rolesViewer
.setInput(userAdminService
.listEditableRoles().toArray());
131 rolesViewer
.addCheckStateListener(new ICheckStateListener() {
134 public void checkStateChanged(CheckStateChangedEvent event
) {
135 String name
= (String
) event
.getElement();
136 boolean contained
= roles
.contains(name
);
137 boolean checked
= event
.getChecked();
138 if (checked
!= contained
) {
143 userDetails
= userDetails
.cloneWithNewRoles(roles
);
144 userAdminService
.updateUser(userDetails
);
152 // for (Text txt : texts) {
158 public void focusGained(FocusEvent e
) {
163 public void focusLost(FocusEvent e
) {
164 // Save change if needed
165 // Text text = (Text) e.getSource();
168 // private final static Image ROLE_CHECKED = SecurityAdminPlugin
169 // .getImageDescriptor("icons/security.gif").createImage();
171 public void setUserAdminService(UserAdminService userAdminService
) {
172 this.userAdminService
= userAdminService
;
175 String username
= getNode().getProperty(ArgeoNames
.ARGEO_USER_ID
)
179 if (userAdminService
.userExists(username
)) {
180 JcrUserDetails userDetails
= (JcrUserDetails
) userAdminService
181 .loadUserByUsername(username
);
182 setUserDetails(userDetails
);
184 } catch (Exception e
) {
185 throw new ArgeoException("Cannot retrieve userDetails for "// +
192 public void setUserDetails(JcrUserDetails userDetails
) {
193 this.userDetails
= userDetails
;
195 this.roles
= new ArrayList
<String
>();
196 for (GrantedAuthority ga
: userDetails
.getAuthorities())
197 roles
.add(ga
.getAuthority());
198 if (rolesViewer
!= null)
199 rolesViewer
.refresh();
202 protected TableViewerColumn
createTableViewerColumn(TableViewer viewer
,
203 String title
, int bound
) {
204 final TableViewerColumn viewerColumn
= new TableViewerColumn(viewer
,
206 final TableColumn column
= viewerColumn
.getColumn();
207 column
.setText(title
);
208 column
.setWidth(bound
);
209 column
.setResizable(true);
210 column
.setMoveable(true);
215 public List
<String
> getRoles() {
219 public void refresh() {
221 // return roles.toArray();
222 rolesViewer
.setCheckedElements(roles
.toArray()); // setSelection(1);
223 // rolesViewer.setInput(roles);
224 rolesViewer
.refresh();
227 private class RolesContentProvider
implements IStructuredContentProvider
{
228 private static final long serialVersionUID
= 4119915828862214310L;
230 public Object
[] getElements(Object inputElement
) {
231 return userAdminService
.listEditableRoles().toArray();
234 public void dispose() {
237 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
242 // /** Select the columns by editing the checkbox in the first column */
243 // class RoleEditingSupport extends EditingSupport {
245 // private final TableViewer viewer;
247 // public RoleEditingSupport(TableViewer viewer) {
249 // this.viewer = viewer;
253 // protected CellEditor getCellEditor(Object element) {
254 // return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
259 // protected boolean canEdit(Object element) {
264 // protected Object getValue(Object element) {
265 // String role = element.toString();
266 // return roles.contains(role);
271 // protected void setValue(Object element, Object value) {
272 // Boolean inRole = (Boolean) value;
273 // String role = element.toString();
274 // if (inRole && !roles.contains(role)) {
276 // } else if (!inRole && roles.contains(role)) {
277 // roles.remove(role);