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
.security
.ui
.admin
.internal
.parts
;
18 import java
.util
.ArrayList
;
19 import java
.util
.List
;
21 import org
.argeo
.ArgeoException
;
22 import org
.argeo
.security
.ui
.admin
.SecurityAdminPlugin
;
23 import org
.argeo
.security
.ui
.admin
.internal
.UiAdminUtils
;
24 import org
.argeo
.security
.ui
.admin
.internal
.UserAdminConstants
;
25 import org
.argeo
.security
.ui
.admin
.internal
.UserAdminWrapper
;
26 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
27 import org
.eclipse
.swt
.events
.ModifyEvent
;
28 import org
.eclipse
.swt
.events
.ModifyListener
;
29 import org
.eclipse
.swt
.widgets
.Control
;
30 import org
.eclipse
.ui
.IEditorInput
;
31 import org
.eclipse
.ui
.IEditorSite
;
32 import org
.eclipse
.ui
.PartInitException
;
33 import org
.eclipse
.ui
.forms
.AbstractFormPart
;
34 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
35 import org
.osgi
.service
.useradmin
.Authorization
;
36 import org
.osgi
.service
.useradmin
.Role
;
37 import org
.osgi
.service
.useradmin
.User
;
38 import org
.osgi
.service
.useradmin
.UserAdmin
;
39 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
40 import org
.osgi
.service
.useradmin
.UserAdminListener
;
42 /** Editor for a user, might be a user or a group. */
43 public class UserEditor
extends FormEditor
implements UserAdminConstants
{
44 private static final long serialVersionUID
= 8357851520380820241L;
46 public final static String USER_EDITOR_ID
= SecurityAdminPlugin
.PLUGIN_ID
48 public final static String GROUP_EDITOR_ID
= SecurityAdminPlugin
.PLUGIN_ID
51 /* DEPENDENCY INJECTION */
52 private UserAdminWrapper userAdminWrapper
;
53 private UserAdmin userAdmin
;
57 private String username
;
59 private NameChangeListener listener
;
61 public void init(IEditorSite site
, IEditorInput input
)
62 throws PartInitException
{
63 super.init(site
, input
);
64 username
= ((UserEditorInput
) getEditorInput()).getUsername();
65 user
= (User
) userAdmin
.getRole(username
);
67 listener
= new NameChangeListener(user
);
68 userAdminWrapper
.addListener(listener
);
69 updateEditorTitle(null);
73 * returns the list of all authorisation for the given user or of the
74 * current displayed user if parameter is null
76 protected List
<User
> getFlatGroups(User aUser
) {
77 Authorization currAuth
;
79 currAuth
= userAdmin
.getAuthorization(this.user
);
81 currAuth
= userAdmin
.getAuthorization(aUser
);
83 String
[] roles
= currAuth
.getRoles();
85 List
<User
> groups
= new ArrayList
<User
>();
86 for (String roleStr
: roles
) {
87 User currRole
= (User
) userAdmin
.getRole(roleStr
);
88 if (!groups
.contains(currRole
))
94 /** Exposes the user (or group) that is displayed by the current editor */
95 protected User
getDisplayedUser() {
99 void updateEditorTitle(String title
) {
101 String commonName
= UiAdminUtils
.getProperty(user
, KEY_CN
);
102 title
= "".equals(commonName
) ? user
.getName() : commonName
;
107 protected void addPages() {
109 if (user
.getType() == Role
.GROUP
)
110 addPage(new GroupMainPage(this, userAdminWrapper
));
112 addPage(new UserMainPage(this, userAdminWrapper
));
113 } catch (Exception e
) {
114 throw new ArgeoException("Cannot add pages", e
);
119 public void doSave(IProgressMonitor monitor
) {
120 userAdminWrapper
.beginTransactionIfNeeded();
122 firePropertyChange(PROP_DIRTY
);
123 userAdminWrapper
.notifyListeners(new UserAdminEvent(null,
124 UserAdminEvent
.ROLE_REMOVED
, user
));
128 public void doSaveAs() {
132 public boolean isSaveAsAllowed() {
137 public void dispose() {
138 userAdminWrapper
.removeListener(listener
);
142 // CONTROLERS FOR THIS EDITOR AND ITS PAGES
144 private class NameChangeListener
implements UserAdminListener
{
146 private final User user
;
148 public NameChangeListener(User user
) {
153 public void roleChanged(UserAdminEvent event
) {
154 Role changedRole
= event
.getRole();
155 if (changedRole
== null || changedRole
.equals(user
))
156 updateEditorTitle(null);
160 class MainInfoListener
implements UserAdminListener
{
161 private final AbstractFormPart part
;
163 public MainInfoListener(AbstractFormPart part
) {
168 public void roleChanged(UserAdminEvent event
) {
170 if (event
.getRole() == null)
175 class GroupChangeListener
implements UserAdminListener
{
176 private final AbstractFormPart part
;
178 public GroupChangeListener(AbstractFormPart part
) {
183 public void roleChanged(UserAdminEvent event
) {
184 // always mark as stale
189 /** Registers a listener that will notify this part */
190 class FormPartML
implements ModifyListener
{
191 private static final long serialVersionUID
= 6299808129505381333L;
192 private AbstractFormPart formPart
;
194 public FormPartML(AbstractFormPart generalPart
) {
195 this.formPart
= generalPart
;
198 public void modifyText(ModifyEvent e
) {
199 // Discard event when the control does not have the focus, typically
200 // to avoid all editors being marked as dirty during a Rollback
201 if (((Control
) e
.widget
).isFocusControl())
202 formPart
.markDirty();
206 /* DEPENDENCY INJECTION */
207 public void setUserAdminWrapper(UserAdminWrapper userAdminWrapper
) {
208 this.userAdminWrapper
= userAdminWrapper
;
209 this.userAdmin
= userAdminWrapper
.getUserAdmin();