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
.SimpleArgeoUser
;
8 import org
.argeo
.security
.nature
.SimpleUserNature
;
9 import org
.argeo
.security
.ui
.SecurityUiPlugin
;
10 import org
.eclipse
.jface
.viewers
.CellEditor
;
11 import org
.eclipse
.jface
.viewers
.CheckboxCellEditor
;
12 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
13 import org
.eclipse
.jface
.viewers
.EditingSupport
;
14 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
15 import org
.eclipse
.jface
.viewers
.TableViewer
;
16 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
17 import org
.eclipse
.jface
.viewers
.Viewer
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.events
.ModifyEvent
;
20 import org
.eclipse
.swt
.events
.ModifyListener
;
21 import org
.eclipse
.swt
.graphics
.Image
;
22 import org
.eclipse
.swt
.layout
.GridData
;
23 import org
.eclipse
.swt
.layout
.GridLayout
;
24 import org
.eclipse
.swt
.widgets
.Composite
;
25 import org
.eclipse
.swt
.widgets
.Table
;
26 import org
.eclipse
.swt
.widgets
.TableColumn
;
27 import org
.eclipse
.swt
.widgets
.Text
;
28 import org
.eclipse
.ui
.forms
.AbstractFormPart
;
29 import org
.eclipse
.ui
.forms
.IManagedForm
;
30 import org
.eclipse
.ui
.forms
.SectionPart
;
31 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
32 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
33 import org
.eclipse
.ui
.forms
.widgets
.ColumnLayout
;
34 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
35 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
36 import org
.eclipse
.ui
.forms
.widgets
.Section
;
39 * Display/edit the properties common to all {@link ArgeoUser} (username and
40 * roles) as well as the properties of the {@link SimpleUserNature}.
42 public class DefaultUserMainPage
extends FormPage
{
43 final static String ID
= "argeoUserEditor.mainPage";
45 private final static Image ROLE_CHECKED
= SecurityUiPlugin
46 .getImageDescriptor("icons/security.gif").createImage();
47 private final static Log log
= LogFactory
.getLog(ArgeoUserEditor
.class);
49 private ArgeoUser user
;
50 private SimpleUserNature simpleNature
;
51 private String simpleNatureType
;
52 private ArgeoSecurityService securityService
;
54 public DefaultUserMainPage(FormEditor editor
,
55 ArgeoSecurityService securityService
, ArgeoUser user
) {
56 super(editor
, ID
, "Main");
57 this.securityService
= securityService
;
59 this.simpleNature
= SimpleUserNature
.findSimpleUserNature(user
,
63 protected void createFormContent(final IManagedForm mf
) {
64 ScrolledForm form
= mf
.getForm();
65 form
.setText(simpleNature
.getFirstName() + " "
66 + simpleNature
.getLastName());
67 ColumnLayout mainLayout
= new ColumnLayout();
68 mainLayout
.minNumColumns
= 1;
69 mainLayout
.maxNumColumns
= 4;
70 mainLayout
.topMargin
= 0;
71 mainLayout
.bottomMargin
= 5;
72 mainLayout
.leftMargin
= mainLayout
.rightMargin
= mainLayout
.horizontalSpacing
= mainLayout
.verticalSpacing
= 10;
73 form
.getBody().setLayout(mainLayout
);
75 createGeneralPart(form
.getBody());
76 createRolesPart(form
.getBody());
79 /** Creates the general section */
80 protected void createGeneralPart(Composite parent
) {
81 FormToolkit tk
= getManagedForm().getToolkit();
82 Section section
= tk
.createSection(parent
, Section
.TITLE_BAR
);
83 section
.setText("General");
85 Composite body
= tk
.createComposite(section
, SWT
.WRAP
);
86 section
.setClient(body
);
87 GridLayout layout
= new GridLayout();
88 layout
.marginWidth
= layout
.marginHeight
= 0;
89 layout
.numColumns
= 2;
90 body
.setLayout(layout
);
94 if (user
.getUsername() != null) {
95 tk
.createLabel(body
, "Username");
96 tk
.createLabel(body
, user
.getUsername());
99 username
= createLT(body
, "Username", "");
101 final Text firstName
= createLT(body
, "First name",
102 simpleNature
.getFirstName());
103 final Text lastName
= createLT(body
, "Last name",
104 simpleNature
.getLastName());
105 final Text email
= createLT(body
, "Email", simpleNature
.getEmail());
106 final Text description
= createLT(body
, "Description",
107 simpleNature
.getDescription());
109 // create form part (controller)
110 AbstractFormPart part
= new SectionPart(section
) {
111 public void commit(boolean onSave
) {
112 if (username
!= null) {
113 ((SimpleArgeoUser
) user
).setUsername(username
.getText());
114 username
.setEditable(false);
115 username
.setEnabled(false);
117 simpleNature
.setFirstName(firstName
.getText());
118 simpleNature
.setLastName(lastName
.getText());
119 simpleNature
.setEmail(email
.getText());
120 simpleNature
.setDescription(description
.getText());
121 super.commit(onSave
);
122 if (log
.isDebugEnabled())
123 log
.debug("General part committed");
126 firstName
.addModifyListener(new FormPartML(part
));
127 lastName
.addModifyListener(new FormPartML(part
));
128 email
.addModifyListener(new FormPartML(part
));
129 description
.addModifyListener(new FormPartML(part
));
130 getManagedForm().addPart(part
);
133 /** Creates the role section */
134 protected void createRolesPart(Composite parent
) {
135 FormToolkit tk
= getManagedForm().getToolkit();
136 Section section
= tk
.createSection(parent
, Section
.DESCRIPTION
137 | Section
.TITLE_BAR
);
138 section
.setText("Roles");
139 section
.setDescription("Roles define "
140 + "the authorizations for this user.");
141 Table table
= new Table(section
, SWT
.MULTI
| SWT
.H_SCROLL
143 section
.setClient(table
);
145 AbstractFormPart part
= new SectionPart(section
) {
146 public void commit(boolean onSave
) {
147 // roles have already been modified in editing
148 super.commit(onSave
);
149 if (log
.isDebugEnabled())
150 log
.debug("Role part committed");
153 getManagedForm().addPart(part
);
155 GridData gridData
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true);
156 gridData
.verticalSpan
= 20;
157 table
.setLayoutData(gridData
);
158 table
.setLinesVisible(true);
159 table
.setHeaderVisible(false);
160 TableViewer viewer
= new TableViewer(table
);
163 TableViewerColumn column
= createTableViewerColumn(viewer
, "checked",
165 column
.setLabelProvider(new ColumnLabelProvider() {
166 public String
getText(Object element
) {
170 public Image
getImage(Object element
) {
171 String role
= element
.toString();
172 if (user
.getRoles().contains(role
)) {
179 column
.setEditingSupport(new RoleEditingSupport(viewer
, part
));
182 column
= createTableViewerColumn(viewer
, "Role", 200);
183 column
.setLabelProvider(new ColumnLabelProvider() {
184 public String
getText(Object element
) {
185 return element
.toString();
188 public Image
getImage(Object element
) {
192 viewer
.setContentProvider(new RolesContentProvider());
193 viewer
.setInput(getEditorSite());
196 protected TableViewerColumn
createTableViewerColumn(TableViewer viewer
,
197 String title
, int bound
) {
198 final TableViewerColumn viewerColumn
= new TableViewerColumn(viewer
,
200 final TableColumn column
= viewerColumn
.getColumn();
201 column
.setText(title
);
202 column
.setWidth(bound
);
203 column
.setResizable(true);
204 column
.setMoveable(true);
209 /** Creates label and text. */
210 protected Text
createLT(Composite body
, String label
, String value
) {
211 FormToolkit toolkit
= getManagedForm().getToolkit();
212 toolkit
.createLabel(body
, label
);
213 Text text
= toolkit
.createText(body
, value
, SWT
.BORDER
);
214 text
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
218 public void setSimpleNatureType(String simpleNatureType
) {
219 this.simpleNatureType
= simpleNatureType
;
222 private class FormPartML
implements ModifyListener
{
223 private AbstractFormPart formPart
;
225 public FormPartML(AbstractFormPart generalPart
) {
226 this.formPart
= generalPart
;
229 public void modifyText(ModifyEvent e
) {
230 formPart
.markDirty();
235 private class RolesContentProvider
implements IStructuredContentProvider
{
236 public Object
[] getElements(Object inputElement
) {
237 return securityService
.getSecurityDao().listEditableRoles()
241 public void dispose() {
244 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
248 /** Select the columns by editing the checkbox in the first column */
249 class RoleEditingSupport
extends EditingSupport
{
251 private final TableViewer viewer
;
252 private final AbstractFormPart formPart
;
254 public RoleEditingSupport(TableViewer viewer
, AbstractFormPart formPart
) {
256 this.viewer
= viewer
;
257 this.formPart
= formPart
;
261 protected CellEditor
getCellEditor(Object element
) {
262 return new CheckboxCellEditor(null, SWT
.CHECK
| SWT
.READ_ONLY
);
267 protected boolean canEdit(Object element
) {
272 protected Object
getValue(Object element
) {
273 String role
= element
.toString();
274 return user
.getRoles().contains(role
);
279 protected void setValue(Object element
, Object value
) {
280 Boolean inRole
= (Boolean
) value
;
281 String role
= element
.toString();
282 if (inRole
&& !user
.getRoles().contains(role
)) {
283 user
.getRoles().add(role
);
284 formPart
.markDirty();
285 } else if (!inRole
&& user
.getRoles().contains(role
)) {
286 user
.getRoles().remove(role
);
287 formPart
.markDirty();