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
.Label
;
33 import org
.eclipse
.swt
.widgets
.Table
;
34 import org
.eclipse
.swt
.widgets
.TableColumn
;
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
{
40 private static final long serialVersionUID
= -6013980335975055846L;
42 private CheckboxTableViewer rolesViewer
;
45 private JcrUserDetails userDetails
;
46 private UserAdminService userAdminService
;
47 private List
<String
> roles
;
50 // private final Image checked;
52 // TODO implement to provide user creation ability for anonymous user?
53 // public UserPart(Composite parent, int swtStyle) {
54 // super(parent, swtStyle);
57 public UserRolesPart(Composite parent
, int style
, Item item
,
58 UserAdminService userAdminService
, JcrSecurityModel jcrSecurityModel
)
59 throws RepositoryException
{
60 this(parent
, style
, item
, true);
63 public UserRolesPart(Composite parent
, int style
, Item item
,
64 boolean cacheImmediately
) throws RepositoryException
{
65 super(parent
, style
, item
, cacheImmediately
);
66 // checked = new Image(parent, imageData);
70 public Item
getItem() throws RepositoryException
{
74 public void setMouseListener(MouseListener mouseListener
) {
75 super.setMouseListener(mouseListener
);
76 table
.addMouseListener(mouseListener
);
80 protected Control
createControl(Composite box
, String style
) {
81 box
.setLayout(CmsUtils
.noSpaceGridLayout());
83 Label header
= new Label(box
, SWT
.NONE
);
84 header
.setText(" Groups");
85 CmsUtils
.style(header
, UserStyles
.USER_FORM_TITLE
);
86 header
.setLayoutData(CmsUtils
.fillWidth());
88 int swtStyle
= SWT
.CHECK
| SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
;
90 swtStyle
|= SWT
.READ_ONLY
;
92 table
= new Table(box
, swtStyle
);
93 table
.setLinesVisible(true);
94 table
.setHeaderVisible(false);
95 CmsUtils
.style(table
, style
);
97 rolesViewer
= new CheckboxTableViewer(table
);
99 TableViewerColumn column
;
102 // TableViewerColumn column = createTableViewerColumn(rolesViewer,
104 // column.setLabelProvider(new ColumnLabelProvider() {
105 // public String getText(Object element) {
109 // public Image getImage(Object element) {
110 // String role = element.toString();
111 // if (roles.contains(role)) {
113 // return ROLE_CHECKED;
120 // column.setEditingSupport(new RoleEditingSupport(rolesViewer, part));
123 column
= createTableViewerColumn(rolesViewer
, "Role", 400);
124 column
.setLabelProvider(new ColumnLabelProvider() {
125 private static final long serialVersionUID
= -7334412925967366255L;
127 public String
getText(Object element
) {
128 return element
.toString();
131 rolesViewer
.setContentProvider(new RolesContentProvider());
132 rolesViewer
.setInput(userAdminService
.listEditableRoles().toArray());
134 // try to prevent edition on read only nodes. Does not work.
135 // rolesViewer.setAllGrayed(!isEditing());
137 rolesViewer
.addCheckStateListener(new ICheckStateListener() {
140 public void checkStateChanged(CheckStateChangedEvent event
) {
141 String name
= (String
) event
.getElement();
142 boolean contained
= roles
.contains(name
);
143 boolean checked
= event
.getChecked();
144 if (checked
!= contained
) {
149 userDetails
= userDetails
.cloneWithNewRoles(roles
);
150 userAdminService
.updateUser(userDetails
);
159 public void focusGained(FocusEvent e
) {
164 public void focusLost(FocusEvent e
) {
165 // Save change if needed
166 // Text text = (Text) e.getSource();
169 // private final static Image ROLE_CHECKED = SecurityAdminPlugin
170 // .getImageDescriptor("icons/security.gif").createImage();
172 public void setUserAdminService(UserAdminService userAdminService
) {
173 this.userAdminService
= userAdminService
;
176 String username
= getNode().getProperty(ArgeoNames
.ARGEO_USER_ID
)
180 if (userAdminService
.userExists(username
)) {
181 JcrUserDetails userDetails
= (JcrUserDetails
) userAdminService
182 .loadUserByUsername(username
);
183 setUserDetails(userDetails
);
185 } catch (Exception e
) {
186 throw new ArgeoException("Cannot retrieve userDetails for "// +
193 public void setUserDetails(JcrUserDetails userDetails
) {
194 this.userDetails
= userDetails
;
196 this.roles
= new ArrayList
<String
>();
197 for (GrantedAuthority ga
: userDetails
.getAuthorities())
198 roles
.add(ga
.getAuthority());
199 if (rolesViewer
!= null)
200 rolesViewer
.refresh();
203 protected TableViewerColumn
createTableViewerColumn(TableViewer viewer
,
204 String title
, int bound
) {
205 final TableViewerColumn viewerColumn
= new TableViewerColumn(viewer
,
207 final TableColumn column
= viewerColumn
.getColumn();
208 column
.setText(title
);
209 column
.setWidth(bound
);
210 column
.setResizable(true);
211 column
.setMoveable(true);
216 public List
<String
> getRoles() {
220 public void refresh() {
222 // return roles.toArray();
223 rolesViewer
.setCheckedElements(roles
.toArray()); // setSelection(1);
224 // rolesViewer.setInput(roles);
225 rolesViewer
.refresh();
228 private class RolesContentProvider
implements IStructuredContentProvider
{
229 private static final long serialVersionUID
= 4119915828862214310L;
231 public Object
[] getElements(Object inputElement
) {
232 return userAdminService
.listEditableRoles().toArray();
235 public void dispose() {
238 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
243 // /** Select the columns by editing the checkbox in the first column */
244 // class RoleEditingSupport extends EditingSupport {
246 // private final TableViewer viewer;
248 // public RoleEditingSupport(TableViewer viewer) {
250 // this.viewer = viewer;
254 // protected CellEditor getCellEditor(Object element) {
255 // return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
260 // protected boolean canEdit(Object element) {
265 // protected Object getValue(Object element) {
266 // String role = element.toString();
267 // return roles.contains(role);
272 // protected void setValue(Object element, Object value) {
273 // Boolean inRole = (Boolean) value;
274 // String role = element.toString();
275 // if (inRole && !roles.contains(role)) {
277 // } else if (!inRole && roles.contains(role)) {
278 // roles.remove(role);