1 package org
.argeo
.security
.ui
.editors
;
3 import org
.apache
.commons
.logging
.Log
;
4 import org
.apache
.commons
.logging
.LogFactory
;
5 import org
.argeo
.security
.ArgeoSecurityService
;
6 import org
.argeo
.security
.ArgeoUser
;
7 import org
.argeo
.security
.nature
.SimpleUserNature
;
8 import org
.argeo
.security
.ui
.SecurityUiPlugin
;
9 import org
.eclipse
.jface
.viewers
.CellEditor
;
10 import org
.eclipse
.jface
.viewers
.CheckboxCellEditor
;
11 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
12 import org
.eclipse
.jface
.viewers
.EditingSupport
;
13 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
14 import org
.eclipse
.jface
.viewers
.TableViewer
;
15 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
16 import org
.eclipse
.jface
.viewers
.Viewer
;
17 import org
.eclipse
.swt
.SWT
;
18 import org
.eclipse
.swt
.events
.ModifyEvent
;
19 import org
.eclipse
.swt
.events
.ModifyListener
;
20 import org
.eclipse
.swt
.graphics
.Image
;
21 import org
.eclipse
.swt
.layout
.GridData
;
22 import org
.eclipse
.swt
.layout
.GridLayout
;
23 import org
.eclipse
.swt
.widgets
.Composite
;
24 import org
.eclipse
.swt
.widgets
.Table
;
25 import org
.eclipse
.swt
.widgets
.TableColumn
;
26 import org
.eclipse
.swt
.widgets
.Text
;
27 import org
.eclipse
.ui
.forms
.AbstractFormPart
;
28 import org
.eclipse
.ui
.forms
.IManagedForm
;
29 import org
.eclipse
.ui
.forms
.SectionPart
;
30 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
31 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
32 import org
.eclipse
.ui
.forms
.widgets
.ColumnLayout
;
33 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
34 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
35 import org
.eclipse
.ui
.forms
.widgets
.Section
;
38 * Display/edit the properties common to all {@link ArgeoUser} (username and
39 * roles) as well as the properties of the {@link SimpleUserNature}.
41 public class DefaultUserMainPage
extends FormPage
{
42 final static String ID
= "argeoUserEditor.mainPage";
44 private final static Image ROLE_CHECKED
= SecurityUiPlugin
45 .getImageDescriptor("icons/security.gif").createImage();
46 private final static Log log
= LogFactory
.getLog(ArgeoUserEditor
.class);
48 private ArgeoUser user
;
49 private SimpleUserNature simpleNature
;
50 private String simpleNatureType
;
51 private ArgeoSecurityService securityService
;
53 public DefaultUserMainPage(FormEditor editor
,
54 ArgeoSecurityService securityService
, ArgeoUser user
) {
55 super(editor
, ID
, "Main");
56 this.securityService
= securityService
;
58 this.simpleNature
= SecurityUiPlugin
.findSimpleUserNature(user
,
62 protected void createFormContent(final IManagedForm mf
) {
63 ScrolledForm form
= mf
.getForm();
64 form
.setText(simpleNature
.getFirstName() + " "
65 + simpleNature
.getLastName());
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
= mainLayout
.horizontalSpacing
= mainLayout
.verticalSpacing
= 10;
72 form
.getBody().setLayout(mainLayout
);
74 createGeneralPart(form
.getBody());
75 createRolesPart(form
.getBody());
78 /** Creates the general section */
79 protected void createGeneralPart(Composite parent
) {
80 FormToolkit tk
= getManagedForm().getToolkit();
81 Section section
= tk
.createSection(parent
, Section
.TITLE_BAR
);
82 section
.setText("General");
84 Composite body
= tk
.createComposite(section
, SWT
.WRAP
);
85 section
.setClient(body
);
86 GridLayout layout
= new GridLayout();
87 layout
.marginWidth
= layout
.marginHeight
= 0;
88 layout
.numColumns
= 2;
89 body
.setLayout(layout
);
92 tk
.createLabel(body
, "Username");
93 tk
.createLabel(body
, user
.getUsername());
94 final Text firstName
= createLT(body
, "First name",
95 simpleNature
.getFirstName());
96 final Text lastName
= createLT(body
, "Last name",
97 simpleNature
.getLastName());
98 final Text email
= createLT(body
, "Email", simpleNature
.getEmail());
99 final Text description
= createLT(body
, "Description",
100 simpleNature
.getDescription());
102 // create form part (controller)
103 AbstractFormPart part
= new SectionPart(section
) {
104 public void commit(boolean onSave
) {
105 simpleNature
.setFirstName(firstName
.getText());
106 simpleNature
.setLastName(lastName
.getText());
107 simpleNature
.setEmail(email
.getText());
108 simpleNature
.setDescription(description
.getText());
109 super.commit(onSave
);
110 if (log
.isDebugEnabled())
111 log
.debug("General part committed");
114 firstName
.addModifyListener(new FormPartML(part
));
115 lastName
.addModifyListener(new FormPartML(part
));
116 email
.addModifyListener(new FormPartML(part
));
117 description
.addModifyListener(new FormPartML(part
));
118 getManagedForm().addPart(part
);
121 /** Creates the role section */
122 protected void createRolesPart(Composite parent
) {
123 FormToolkit tk
= getManagedForm().getToolkit();
124 Section section
= tk
.createSection(parent
, Section
.DESCRIPTION
125 | Section
.TITLE_BAR
);
126 section
.setText("Roles");
127 section
.setDescription("Roles define "
128 + "the authorizations for this user.");
129 Table table
= new Table(section
, SWT
.MULTI
| SWT
.H_SCROLL
131 section
.setClient(table
);
133 AbstractFormPart part
= new SectionPart(section
) {
134 public void commit(boolean onSave
) {
135 // roles have already been modified in editing
136 super.commit(onSave
);
137 if (log
.isDebugEnabled())
138 log
.debug("Role part committed");
141 getManagedForm().addPart(part
);
143 GridData gridData
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true);
144 gridData
.verticalSpan
= 20;
145 table
.setLayoutData(gridData
);
146 table
.setLinesVisible(true);
147 table
.setHeaderVisible(false);
148 TableViewer viewer
= new TableViewer(table
);
151 TableViewerColumn column
= createTableViewerColumn(viewer
, "checked",
153 column
.setLabelProvider(new ColumnLabelProvider() {
154 public String
getText(Object element
) {
158 public Image
getImage(Object element
) {
159 String role
= element
.toString();
160 if (user
.getRoles().contains(role
)) {
167 column
.setEditingSupport(new RoleEditingSupport(viewer
, part
));
170 column
= createTableViewerColumn(viewer
, "Role", 200);
171 column
.setLabelProvider(new ColumnLabelProvider() {
172 public String
getText(Object element
) {
173 return element
.toString();
176 public Image
getImage(Object element
) {
180 viewer
.setContentProvider(new RolesContentProvider());
181 viewer
.setInput(getEditorSite());
184 protected TableViewerColumn
createTableViewerColumn(TableViewer viewer
,
185 String title
, int bound
) {
186 final TableViewerColumn viewerColumn
= new TableViewerColumn(viewer
,
188 final TableColumn column
= viewerColumn
.getColumn();
189 column
.setText(title
);
190 column
.setWidth(bound
);
191 column
.setResizable(true);
192 column
.setMoveable(true);
197 /** Creates label and text. */
198 protected Text
createLT(Composite body
, String label
, String value
) {
199 FormToolkit toolkit
= getManagedForm().getToolkit();
200 toolkit
.createLabel(body
, label
);
201 Text text
= toolkit
.createText(body
, value
, SWT
.BORDER
);
202 text
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
206 public void setSimpleNatureType(String simpleNatureType
) {
207 this.simpleNatureType
= simpleNatureType
;
210 private class FormPartML
implements ModifyListener
{
211 private AbstractFormPart formPart
;
213 public FormPartML(AbstractFormPart generalPart
) {
214 this.formPart
= generalPart
;
217 public void modifyText(ModifyEvent e
) {
218 formPart
.markDirty();
223 private class RolesContentProvider
implements IStructuredContentProvider
{
224 public Object
[] getElements(Object inputElement
) {
225 return securityService
.getSecurityDao().listEditableRoles()
229 public void dispose() {
232 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
236 /** Select the columns by editing the checkbox in the first column */
237 class RoleEditingSupport
extends EditingSupport
{
239 private final TableViewer viewer
;
240 private final AbstractFormPart formPart
;
242 public RoleEditingSupport(TableViewer viewer
, AbstractFormPart formPart
) {
244 this.viewer
= viewer
;
245 this.formPart
= formPart
;
249 protected CellEditor
getCellEditor(Object element
) {
250 return new CheckboxCellEditor(null, SWT
.CHECK
| SWT
.READ_ONLY
);
255 protected boolean canEdit(Object element
) {
260 protected Object
getValue(Object element
) {
261 String role
= element
.toString();
262 return user
.getRoles().contains(role
);
267 protected void setValue(Object element
, Object value
) {
268 Boolean inRole
= (Boolean
) value
;
269 String role
= element
.toString();
270 if (inRole
&& !user
.getRoles().contains(role
)) {
271 user
.getRoles().add(role
);
272 formPart
.markDirty();
273 } else if (!inRole
&& user
.getRoles().contains(role
)) {
274 user
.getRoles().remove(role
);
275 formPart
.markDirty();