2 * Copyright (C) 2007-2012 Argeo GmbH
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.parts
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
21 import javax
.jcr
.Repository
;
23 import org
.argeo
.cms
.CmsException
;
24 import org
.argeo
.cms
.ui
.workbench
.WorkbenchUiPlugin
;
25 import org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.UiUserAdminListener
;
26 import org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
.UserAdminWrapper
;
27 import org
.argeo
.cms
.util
.UserAdminUtils
;
28 import org
.argeo
.naming
.LdapAttrs
;
29 import org
.argeo
.node
.NodeInstance
;
30 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
31 import org
.eclipse
.swt
.events
.ModifyEvent
;
32 import org
.eclipse
.swt
.events
.ModifyListener
;
33 import org
.eclipse
.swt
.widgets
.Control
;
34 import org
.eclipse
.swt
.widgets
.Display
;
35 import org
.eclipse
.ui
.IEditorInput
;
36 import org
.eclipse
.ui
.IEditorSite
;
37 import org
.eclipse
.ui
.PartInitException
;
38 import org
.eclipse
.ui
.forms
.AbstractFormPart
;
39 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
40 import org
.osgi
.service
.useradmin
.Authorization
;
41 import org
.osgi
.service
.useradmin
.Role
;
42 import org
.osgi
.service
.useradmin
.User
;
43 import org
.osgi
.service
.useradmin
.UserAdmin
;
44 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
46 /** Editor for a user, might be a user or a group. */
47 public class UserEditor
extends FormEditor
{
48 private static final long serialVersionUID
= 8357851520380820241L;
50 public final static String USER_EDITOR_ID
= WorkbenchUiPlugin
.PLUGIN_ID
+ ".userEditor";
51 public final static String GROUP_EDITOR_ID
= WorkbenchUiPlugin
.PLUGIN_ID
+ ".groupEditor";
53 /* DEPENDENCY INJECTION */
54 private Repository repository
;
55 private UserAdminWrapper userAdminWrapper
;
56 private UserAdmin userAdmin
;
57 private NodeInstance nodeInstance
;
61 private String username
;
63 private NameChangeListener listener
;
65 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
66 super.init(site
, input
);
67 this.userAdmin
= userAdminWrapper
.getUserAdmin();
68 username
= ((UserEditorInput
) getEditorInput()).getUsername();
69 user
= (User
) userAdmin
.getRole(username
);
71 listener
= new NameChangeListener(site
.getShell().getDisplay());
72 userAdminWrapper
.addListener(listener
);
73 updateEditorTitle(null);
77 * returns the list of all authorization for the given user or of the current
78 * displayed user if parameter is null
80 protected List
<User
> getFlatGroups(User aUser
) {
81 Authorization currAuth
;
83 currAuth
= userAdmin
.getAuthorization(this.user
);
85 currAuth
= userAdmin
.getAuthorization(aUser
);
87 String
[] roles
= currAuth
.getRoles();
89 List
<User
> groups
= new ArrayList
<User
>();
90 for (String roleStr
: roles
) {
91 User currRole
= (User
) userAdmin
.getRole(roleStr
);
92 if (currRole
!= null && !groups
.contains(currRole
))
98 /** Exposes the user (or group) that is displayed by the current editor */
99 protected User
getDisplayedUser() {
103 private void setDisplayedUser(User user
) {
107 void updateEditorTitle(String title
) {
109 String commonName
= UserAdminUtils
.getProperty(user
, LdapAttrs
.cn
.name());
110 title
= "".equals(commonName
) ? user
.getName() : commonName
;
115 protected void addPages() {
117 if (user
.getType() == Role
.GROUP
)
118 addPage(new GroupMainPage(this, userAdminWrapper
, repository
, nodeInstance
));
120 addPage(new UserMainPage(this, userAdminWrapper
));
121 } catch (Exception e
) {
122 throw new CmsException("Cannot add pages", e
);
127 public void doSave(IProgressMonitor monitor
) {
128 userAdminWrapper
.beginTransactionIfNeeded();
130 userAdminWrapper
.commitOrNotifyTransactionStateChange();
131 firePropertyChange(PROP_DIRTY
);
132 userAdminWrapper
.notifyListeners(new UserAdminEvent(null, UserAdminEvent
.ROLE_REMOVED
, user
));
136 public void doSaveAs() {
140 public boolean isSaveAsAllowed() {
145 public void dispose() {
146 userAdminWrapper
.removeListener(listener
);
150 // CONTROLERS FOR THIS EDITOR AND ITS PAGES
152 private class NameChangeListener
extends UiUserAdminListener
{
153 public NameChangeListener(Display display
) {
158 public void roleChangedToUiThread(UserAdminEvent event
) {
159 Role changedRole
= event
.getRole();
160 if (changedRole
== null || changedRole
.equals(user
)) {
161 updateEditorTitle(null);
162 User reloadedUser
= (User
) userAdminWrapper
.getUserAdmin().getRole(user
.getName());
163 setDisplayedUser(reloadedUser
);
168 class MainInfoListener
extends UiUserAdminListener
{
169 private final AbstractFormPart part
;
171 public MainInfoListener(Display display
, AbstractFormPart part
) {
177 public void roleChangedToUiThread(UserAdminEvent event
) {
179 if (event
.getRole() == null)
184 class GroupChangeListener
extends UiUserAdminListener
{
185 private final AbstractFormPart part
;
187 public GroupChangeListener(Display display
, AbstractFormPart part
) {
193 public void roleChangedToUiThread(UserAdminEvent event
) {
194 // always mark as stale
199 /** Registers a listener that will notify this part */
200 class FormPartML
implements ModifyListener
{
201 private static final long serialVersionUID
= 6299808129505381333L;
202 private AbstractFormPart formPart
;
204 public FormPartML(AbstractFormPart generalPart
) {
205 this.formPart
= generalPart
;
208 public void modifyText(ModifyEvent e
) {
209 // Discard event when the control does not have the focus, typically
210 // to avoid all editors being marked as dirty during a Rollback
211 if (((Control
) e
.widget
).isFocusControl())
212 formPart
.markDirty();
216 /* DEPENDENCY INJECTION */
217 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper
) {
218 this.userAdminWrapper
= userAdminWrapper
;
221 public void setRepository(Repository repository
) {
222 this.repository
= repository
;
225 public void setNodeInstance(NodeInstance nodeInstance
) {
226 this.nodeInstance
= nodeInstance
;