1 package org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.parts
;
3 import java
.util
.ArrayList
;
6 import javax
.jcr
.Repository
;
8 import org
.argeo
.api
.NodeInstance
;
9 import org
.argeo
.cms
.CmsException
;
10 import org
.argeo
.cms
.ui
.workbench
.WorkbenchUiPlugin
;
11 import org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.UiUserAdminListener
;
12 import org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.UserAdminWrapper
;
13 import org
.argeo
.cms
.auth
.UserAdminUtils
;
14 import org
.argeo
.naming
.LdapAttrs
;
15 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
16 import org
.eclipse
.swt
.events
.ModifyEvent
;
17 import org
.eclipse
.swt
.events
.ModifyListener
;
18 import org
.eclipse
.swt
.widgets
.Control
;
19 import org
.eclipse
.swt
.widgets
.Display
;
20 import org
.eclipse
.ui
.IEditorInput
;
21 import org
.eclipse
.ui
.IEditorSite
;
22 import org
.eclipse
.ui
.PartInitException
;
23 import org
.eclipse
.ui
.forms
.AbstractFormPart
;
24 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
25 import org
.osgi
.service
.useradmin
.Authorization
;
26 import org
.osgi
.service
.useradmin
.Role
;
27 import org
.osgi
.service
.useradmin
.User
;
28 import org
.osgi
.service
.useradmin
.UserAdmin
;
29 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
31 /** Editor for a user, might be a user or a group. */
32 public class UserEditor
extends FormEditor
{
33 private static final long serialVersionUID
= 8357851520380820241L;
35 public final static String USER_EDITOR_ID
= WorkbenchUiPlugin
.PLUGIN_ID
+ ".userEditor";
36 public final static String GROUP_EDITOR_ID
= WorkbenchUiPlugin
.PLUGIN_ID
+ ".groupEditor";
38 /* DEPENDENCY INJECTION */
39 private Repository repository
;
40 private UserAdminWrapper userAdminWrapper
;
41 private UserAdmin userAdmin
;
42 private NodeInstance nodeInstance
;
46 private String username
;
48 private NameChangeListener listener
;
50 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
51 super.init(site
, input
);
52 this.userAdmin
= userAdminWrapper
.getUserAdmin();
53 username
= ((UserEditorInput
) getEditorInput()).getUsername();
54 user
= (User
) userAdmin
.getRole(username
);
56 listener
= new NameChangeListener(site
.getShell().getDisplay());
57 userAdminWrapper
.addListener(listener
);
58 updateEditorTitle(null);
62 * returns the list of all authorization for the given user or of the current
63 * displayed user if parameter is null
65 protected List
<User
> getFlatGroups(User aUser
) {
66 Authorization currAuth
;
68 currAuth
= userAdmin
.getAuthorization(this.user
);
70 currAuth
= userAdmin
.getAuthorization(aUser
);
72 String
[] roles
= currAuth
.getRoles();
74 List
<User
> groups
= new ArrayList
<User
>();
75 for (String roleStr
: roles
) {
76 User currRole
= (User
) userAdmin
.getRole(roleStr
);
77 if (currRole
!= null && !groups
.contains(currRole
))
83 /** Exposes the user (or group) that is displayed by the current editor */
84 protected User
getDisplayedUser() {
88 private void setDisplayedUser(User user
) {
92 void updateEditorTitle(String title
) {
94 String commonName
= UserAdminUtils
.getProperty(user
, LdapAttrs
.cn
.name());
95 title
= "".equals(commonName
) ? user
.getName() : commonName
;
100 protected void addPages() {
102 if (user
.getType() == Role
.GROUP
)
103 addPage(new GroupMainPage(this, userAdminWrapper
, repository
, nodeInstance
));
105 addPage(new UserMainPage(this, userAdminWrapper
));
106 } catch (Exception e
) {
107 throw new CmsException("Cannot add pages", e
);
112 public void doSave(IProgressMonitor monitor
) {
113 userAdminWrapper
.beginTransactionIfNeeded();
115 userAdminWrapper
.commitOrNotifyTransactionStateChange();
116 firePropertyChange(PROP_DIRTY
);
117 userAdminWrapper
.notifyListeners(new UserAdminEvent(null, UserAdminEvent
.ROLE_REMOVED
, user
));
121 public void doSaveAs() {
125 public boolean isSaveAsAllowed() {
130 public void dispose() {
131 userAdminWrapper
.removeListener(listener
);
135 // CONTROLERS FOR THIS EDITOR AND ITS PAGES
137 private class NameChangeListener
extends UiUserAdminListener
{
138 public NameChangeListener(Display display
) {
143 public void roleChangedToUiThread(UserAdminEvent event
) {
144 Role changedRole
= event
.getRole();
145 if (changedRole
== null || changedRole
.equals(user
)) {
146 updateEditorTitle(null);
147 User reloadedUser
= (User
) userAdminWrapper
.getUserAdmin().getRole(user
.getName());
148 setDisplayedUser(reloadedUser
);
153 class MainInfoListener
extends UiUserAdminListener
{
154 private final AbstractFormPart part
;
156 public MainInfoListener(Display display
, AbstractFormPart part
) {
162 public void roleChangedToUiThread(UserAdminEvent event
) {
164 if (event
.getRole() == null)
169 class GroupChangeListener
extends UiUserAdminListener
{
170 private final AbstractFormPart part
;
172 public GroupChangeListener(Display display
, AbstractFormPart part
) {
178 public void roleChangedToUiThread(UserAdminEvent event
) {
179 // always mark as stale
184 /** Registers a listener that will notify this part */
185 class FormPartML
implements ModifyListener
{
186 private static final long serialVersionUID
= 6299808129505381333L;
187 private AbstractFormPart formPart
;
189 public FormPartML(AbstractFormPart generalPart
) {
190 this.formPart
= generalPart
;
193 public void modifyText(ModifyEvent e
) {
194 // Discard event when the control does not have the focus, typically
195 // to avoid all editors being marked as dirty during a Rollback
196 if (((Control
) e
.widget
).isFocusControl())
197 formPart
.markDirty();
201 /* DEPENDENCY INJECTION */
202 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper
) {
203 this.userAdminWrapper
= userAdminWrapper
;
206 public void setRepository(Repository repository
) {
207 this.repository
= repository
;
210 public void setNodeInstance(NodeInstance nodeInstance
) {
211 this.nodeInstance
= nodeInstance
;