1 package org
.argeo
.cms
.e4
.users
;
3 import java
.util
.ArrayList
;
6 import javax
.annotation
.PostConstruct
;
7 import javax
.annotation
.PreDestroy
;
8 import javax
.inject
.Inject
;
10 import org
.argeo
.cms
.auth
.UserAdminUtils
;
11 import org
.argeo
.cms
.ui
.eclipse
.forms
.AbstractFormPart
;
12 import org
.argeo
.cms
.ui
.eclipse
.forms
.IManagedForm
;
13 import org
.argeo
.cms
.ui
.eclipse
.forms
.ManagedForm
;
14 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
15 import org
.argeo
.naming
.LdapAttrs
;
16 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
17 import org
.eclipse
.e4
.ui
.di
.Persist
;
18 import org
.eclipse
.e4
.ui
.model
.application
.ui
.basic
.MPart
;
19 import org
.eclipse
.swt
.SWT
;
20 import org
.eclipse
.swt
.custom
.ScrolledComposite
;
21 import org
.eclipse
.swt
.events
.ModifyEvent
;
22 import org
.eclipse
.swt
.events
.ModifyListener
;
23 import org
.eclipse
.swt
.layout
.GridData
;
24 import org
.eclipse
.swt
.widgets
.Composite
;
25 import org
.eclipse
.swt
.widgets
.Control
;
26 import org
.eclipse
.swt
.widgets
.Display
;
27 import org
.eclipse
.swt
.widgets
.Label
;
28 import org
.eclipse
.swt
.widgets
.Text
;
29 import org
.osgi
.service
.useradmin
.Authorization
;
30 import org
.osgi
.service
.useradmin
.Role
;
31 import org
.osgi
.service
.useradmin
.User
;
32 import org
.osgi
.service
.useradmin
.UserAdmin
;
33 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
35 /** Editor for a user, might be a user or a group. */
36 public abstract class AbstractRoleEditor
{
38 // public final static String USER_EDITOR_ID = WorkbenchUiPlugin.PLUGIN_ID +
40 // public final static String GROUP_EDITOR_ID = WorkbenchUiPlugin.PLUGIN_ID +
43 /* DEPENDENCY INJECTION */
45 protected UserAdminWrapper userAdminWrapper
;
53 private UserAdmin userAdmin
;
57 private String username
;
59 private NameChangeListener listener
;
61 private ManagedForm managedForm
;
63 // public void init(IEditorSite site, IEditorInput input) throws
64 // PartInitException {
66 public void init(Composite parent
) {
67 this.userAdmin
= userAdminWrapper
.getUserAdmin();
68 username
= mPart
.getPersistedState().get(LdapAttrs
.uid
.name());
69 user
= (User
) userAdmin
.getRole(username
);
71 listener
= new NameChangeListener(Display
.getCurrent());
72 userAdminWrapper
.addListener(listener
);
73 updateEditorTitle(null);
75 managedForm
= new ManagedForm(parent
) {
78 public void staleStateChanged() {
82 ScrolledComposite scrolled
= managedForm
.getForm();
83 Composite body
= new Composite(scrolled
, SWT
.NONE
);
84 scrolled
.setContent(body
);
86 managedForm
.refresh();
89 abstract void createUi(Composite parent
);
92 * returns the list of all authorizations for the given user or of the current
93 * displayed user if parameter is null
95 protected List
<User
> getFlatGroups(User aUser
) {
96 Authorization currAuth
;
98 currAuth
= userAdmin
.getAuthorization(this.user
);
100 currAuth
= userAdmin
.getAuthorization(aUser
);
102 String
[] roles
= currAuth
.getRoles();
104 List
<User
> groups
= new ArrayList
<User
>();
105 for (String roleStr
: roles
) {
106 User currRole
= (User
) userAdmin
.getRole(roleStr
);
107 if (currRole
!= null && !groups
.contains(currRole
))
108 groups
.add(currRole
);
113 protected IManagedForm
getManagedForm() {
117 /** Exposes the user (or group) that is displayed by the current editor */
118 protected User
getDisplayedUser() {
122 private void setDisplayedUser(User user
) {
126 void updateEditorTitle(String title
) {
128 String commonName
= UserAdminUtils
.getProperty(user
, LdapAttrs
.cn
.name());
129 title
= "".equals(commonName
) ? user
.getName() : commonName
;
134 protected void setPartName(String name
) {
135 mPart
.setLabel(name
);
138 // protected void addPages() {
140 // if (user.getType() == Role.GROUP)
141 // addPage(new GroupMainPage(this, userAdminWrapper, repository, nodeInstance));
143 // addPage(new UserMainPage(this, userAdminWrapper));
144 // } catch (Exception e) {
145 // throw new CmsException("Cannot add pages", e);
150 public void doSave(IProgressMonitor monitor
) {
151 userAdminWrapper
.beginTransactionIfNeeded();
153 userAdminWrapper
.commitOrNotifyTransactionStateChange();
154 // firePropertyChange(PROP_DIRTY);
155 userAdminWrapper
.notifyListeners(new UserAdminEvent(null, UserAdminEvent
.ROLE_REMOVED
, user
));
158 protected void commitPages(boolean b
) {
159 managedForm
.commit(b
);
163 public void dispose() {
164 userAdminWrapper
.removeListener(listener
);
165 managedForm
.dispose();
168 // CONTROLERS FOR THIS EDITOR AND ITS PAGES
170 class NameChangeListener
extends UiUserAdminListener
{
171 public NameChangeListener(Display display
) {
176 public void roleChangedToUiThread(UserAdminEvent event
) {
177 Role changedRole
= event
.getRole();
178 if (changedRole
== null || changedRole
.equals(user
)) {
179 updateEditorTitle(null);
180 User reloadedUser
= (User
) userAdminWrapper
.getUserAdmin().getRole(user
.getName());
181 setDisplayedUser(reloadedUser
);
186 class MainInfoListener
extends UiUserAdminListener
{
187 private final AbstractFormPart part
;
189 public MainInfoListener(Display display
, AbstractFormPart part
) {
195 public void roleChangedToUiThread(UserAdminEvent event
) {
197 if (event
.getRole() == null)
202 class GroupChangeListener
extends UiUserAdminListener
{
203 private final AbstractFormPart part
;
205 public GroupChangeListener(Display display
, AbstractFormPart part
) {
211 public void roleChangedToUiThread(UserAdminEvent event
) {
212 // always mark as stale
217 /** Registers a listener that will notify this part */
218 class FormPartML
implements ModifyListener
{
219 private static final long serialVersionUID
= 6299808129505381333L;
220 private AbstractFormPart formPart
;
222 public FormPartML(AbstractFormPart generalPart
) {
223 this.formPart
= generalPart
;
226 public void modifyText(ModifyEvent e
) {
227 // Discard event when the control does not have the focus, typically
228 // to avoid all editors being marked as dirty during a Rollback
229 if (((Control
) e
.widget
).isFocusControl())
230 formPart
.markDirty();
234 /* DEPENDENCY INJECTION */
235 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper
) {
236 this.userAdminWrapper
= userAdminWrapper
;
239 /** Creates label and multiline text. */
240 Text
createLMT(Composite parent
, String label
, String value
) {
241 Label lbl
= new Label(parent
, SWT
.NONE
);
243 lbl
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.CENTER
, false, false));
244 Text text
= new Text(parent
, SWT
.NONE
);
246 text
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.FILL
, true, true));
250 /** Creates label and password. */
251 Text
createLP(Composite parent
, String label
, String value
) {
252 Label lbl
= new Label(parent
, SWT
.NONE
);
254 lbl
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.CENTER
, false, false));
255 Text text
= new Text(parent
, SWT
.PASSWORD
| SWT
.BORDER
);
257 text
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.FILL
, true, false));
261 /** Creates label and text. */
262 Text
createLT(Composite parent
, String label
, String value
) {
263 Label lbl
= new Label(parent
, SWT
.NONE
);
265 lbl
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.CENTER
, false, false));
266 lbl
.setFont(EclipseUiUtils
.getBoldFont(parent
));
267 Text text
= new Text(parent
, SWT
.BORDER
);
269 text
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, false));
270 // CmsUiUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT);
274 Text
createReadOnlyLT(Composite parent
, String label
, String value
) {
275 Label lbl
= new Label(parent
, SWT
.NONE
);
277 lbl
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.CENTER
, false, false));
278 lbl
.setFont(EclipseUiUtils
.getBoldFont(parent
));
279 Text text
= new Text(parent
, SWT
.NONE
);
281 text
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.FILL
, true, false));
282 text
.setEditable(false);
283 // CmsUiUtils.style(text, CmsWorkbenchStyles.WORKBENCH_FORM_TEXT);