1 package org
.argeo
.cms
.users
;
3 import java
.util
.ArrayList
;
8 import javax
.jcr
.RepositoryException
;
10 import org
.argeo
.ArgeoException
;
11 import org
.argeo
.cms
.internal
.auth
.JcrSecurityModel
;
12 import org
.argeo
.cms
.util
.CmsUtils
;
13 import org
.argeo
.cms
.viewers
.EditablePart
;
14 import org
.argeo
.cms
.viewers
.NodePart
;
15 import org
.argeo
.cms
.widgets
.StyledControl
;
16 import org
.argeo
.jcr
.ArgeoNames
;
17 import org
.argeo
.security
.UserAdminService
;
18 import org
.argeo
.security
.jcr
.JcrUserDetails
;
19 import org
.eclipse
.jface
.viewers
.CheckStateChangedEvent
;
20 import org
.eclipse
.jface
.viewers
.CheckboxTableViewer
;
21 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
22 import org
.eclipse
.jface
.viewers
.ICheckStateListener
;
23 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
24 import org
.eclipse
.jface
.viewers
.TableViewer
;
25 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
26 import org
.eclipse
.jface
.viewers
.Viewer
;
27 import org
.eclipse
.swt
.SWT
;
28 import org
.eclipse
.swt
.events
.FocusEvent
;
29 import org
.eclipse
.swt
.events
.FocusListener
;
30 import org
.eclipse
.swt
.events
.MouseListener
;
31 import org
.eclipse
.swt
.layout
.GridLayout
;
32 import org
.eclipse
.swt
.widgets
.Composite
;
33 import org
.eclipse
.swt
.widgets
.Control
;
34 import org
.eclipse
.swt
.widgets
.Label
;
35 import org
.eclipse
.swt
.widgets
.Table
;
36 import org
.eclipse
.swt
.widgets
.TableColumn
;
37 import org
.springframework
.security
.core
.GrantedAuthority
;
39 /** Display a single user main info once it has been created. */
40 public class UserRolesPart
extends StyledControl
implements EditablePart
,
41 NodePart
, FocusListener
{
42 private static final long serialVersionUID
= -6013980335975055846L;
44 private CheckboxTableViewer rolesViewer
;
47 private JcrUserDetails userDetails
;
48 private UserAdminService userAdminService
;
49 private List
<String
> roles
;
52 // private final Image checked;
54 // TODO implement to provide user creation ability for anonymous user?
55 // public UserPart(Composite parent, int swtStyle) {
56 // super(parent, swtStyle);
59 public UserRolesPart(Composite parent
, int style
, Item item
,
60 UserAdminService userAdminService
, JcrSecurityModel jcrSecurityModel
)
61 throws RepositoryException
{
62 this(parent
, style
, item
, true);
65 public UserRolesPart(Composite parent
, int style
, Item item
,
66 boolean cacheImmediately
) throws RepositoryException
{
67 super(parent
, style
, item
, cacheImmediately
);
68 // checked = new Image(parent, imageData);
72 public Item
getItem() throws RepositoryException
{
76 public void setMouseListener(MouseListener mouseListener
) {
77 super.setMouseListener(mouseListener
);
78 table
.addMouseListener(mouseListener
);
82 public Control
createControl(Composite box
, String style
) {
83 // box.setLayout(CmsUtils.noSpaceGridLayout());
84 box
.setLayout(new GridLayout());
86 Label header
= new Label(box
, SWT
.NONE
);
87 header
.setText(" Groups");
88 CmsUtils
.style(header
, UserStyles
.USER_FORM_TITLE
);
89 header
.setLayoutData(CmsUtils
.fillWidth());
91 int swtStyle
= SWT
.CHECK
| SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
;
93 swtStyle
|= SWT
.READ_ONLY
;
95 table
= new Table(box
, swtStyle
);
96 table
.setLinesVisible(true);
97 table
.setHeaderVisible(false);
98 CmsUtils
.style(table
, style
);
100 rolesViewer
= new CheckboxTableViewer(table
);
102 TableViewerColumn column
;
105 // TableViewerColumn column = createTableViewerColumn(rolesViewer,
107 // column.setLabelProvider(new ColumnLabelProvider() {
108 // public String getText(Object element) {
112 // public Image getImage(Object element) {
113 // String role = element.toString();
114 // if (roles.contains(role)) {
116 // return ROLE_CHECKED;
123 // column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
126 column
= createTableViewerColumn(rolesViewer
, "Role", 400);
127 column
.setLabelProvider(new ColumnLabelProvider() {
128 private static final long serialVersionUID
= -7334412925967366255L;
130 public String
getText(Object element
) {
131 return element
.toString();
134 rolesViewer
.setContentProvider(new RolesContentProvider());
135 rolesViewer
.setInput(userAdminService
.listEditableRoles().toArray());
137 // try to prevent edition on read only nodes. Does not work.
138 // rolesViewer.setAllGrayed(!isEditing());
140 rolesViewer
.addCheckStateListener(new ICheckStateListener() {
143 public void checkStateChanged(CheckStateChangedEvent event
) {
144 String name
= (String
) event
.getElement();
145 boolean contained
= roles
.contains(name
);
146 boolean checked
= event
.getChecked();
147 if (checked
!= contained
) {
152 userDetails
= userDetails
.cloneWithNewRoles(roles
);
153 userAdminService
.updateUser(userDetails
);
162 public void focusGained(FocusEvent e
) {
167 public void focusLost(FocusEvent e
) {
168 // Save change if needed
169 // Text text = (Text) e.getSource();
172 // private final static Image ROLE_CHECKED = SecurityAdminPlugin
173 // .getImageDescriptor("icons/security.gif").createImage();
175 public void setUserAdminService(UserAdminService userAdminService
) {
176 this.userAdminService
= userAdminService
;
178 Node currNode
= getNode();
179 String username
= currNode
.getProperty(ArgeoNames
.ARGEO_USER_ID
)
181 if (userAdminService
.userExists(username
)) {
182 JcrUserDetails userDetails
= (JcrUserDetails
) userAdminService
183 .loadUserByUsername(username
);
184 setUserDetails(userDetails
);
186 } catch (Exception e
) {
187 throw new ArgeoException("Cannot retrieve userDetails for "
193 public void setUserDetails(JcrUserDetails userDetails
) {
194 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);