File Source: ModifyUser.java
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. The ASF licenses this file to You
4 * under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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. For additional information regarding
15 * copyright in this work, please see the NOTICE file in the top level
16 * directory of this distribution.
17 */
18
19 package org.apache.roller.weblogger.ui.struts2.admin;
20
21 import org.apache.commons.lang.StringUtils;
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.roller.weblogger.WebloggerException;
25 import org.apache.roller.weblogger.business.WebloggerFactory;
26 import org.apache.roller.weblogger.business.UserManager;
27 import org.apache.roller.weblogger.pojos.User;
28 import org.apache.roller.weblogger.ui.core.RollerContext;
29 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
30
31
32 /**
33 * Action that allows an admin to modify a users profile.
34 */
35 public class ModifyUser extends UIAction {
36
/*
P/P * Method: org.apache.roller.weblogger.ui.struts2.admin.ModifyUser__static_init
*
* Postconditions:
* init'ed(log)
*/
37 private static Log log = LogFactory.getLog(ModifyUser.class);
38
39 // user we are modifying
40 private User user = new User();
41
42 // a bean to store our form data
43 private CreateUserBean bean = new CreateUserBean();
44
45 private String userName = null;
46
47
/*
P/P * Method: void org.apache.roller.weblogger.ui.struts2.admin.ModifyUser()
*
* Presumptions:
* init'ed(org/apache/roller/weblogger/ui/struts2/admin/CreateUserBean.java.lang.Boolean.TRUE)
*
* Postconditions:
* this.actionName == &"modifyUser"
* this.bean == &new CreateUserBean(ModifyUser#2)
* this.desiredMenu == &"admin"
* this.pageTitle == &"userAdmin.title.editUser"
* this.user == &new User(ModifyUser#1)
* this.userName == null
* this.bean.activationCode == null
* this.bean.emailAddress == null
* this.bean.fullName == null
* this.bean.id == null
* ...
*/
48 public ModifyUser() {
49 this.actionName = "modifyUser";
50 this.desiredMenu = "admin";
51 this.pageTitle = "userAdmin.title.editUser";
52 }
53
54
55 // admin role required
56 public String requiredUserRole() {
/*
P/P * Method: String requiredUserRole()
*
* Postconditions:
* return_value == &"admin"
*/
57 return "admin";
58 }
59
60 // no weblog required
61 public boolean isWeblogRequired() {
/*
P/P * Method: bool isWeblogRequired()
*
* Postconditions:
* return_value == 0
*/
62 return false;
63 }
64
65
66 // prepare for action by loading user object we are modifying
67 public void myPrepare() {
68
69 // load the user object we are modifying
/*
P/P * Method: void myPrepare()
*
* Preconditions:
* init'ed(this.userName)
* (soft) log != null
* (soft) this.bean != null
* (soft) init'ed(this.bean.id)
*
* Presumptions:
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@72 != null
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@82 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@72 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@82 != null
*
* Postconditions:
* possibly_updated(this.user)
*
* Test Vectors:
* this.bean.id: Addr_Set{null}, Inverse{null}
* this.userName: Addr_Set{null}, Inverse{null}
*/
70 if(getUserName() != null) {
71 try {
72 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
73
74 // use enabled = 'null' to get both enabled and disabled users
75 setUser(mgr.getUserByUserName(getUserName(), null));
76
77 } catch(Exception e) {
78 log.error("Error looking up user - "+getUserName(), e);
79 }
80 } else if(getBean().getId() != null) {
81 try {
82 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
83 setUser(mgr.getUser(getBean().getId()));
84 } catch(Exception e) {
85 log.error("Error looking up user - "+getBean().getId(), e);
86 }
87 }
88 }
89
90
91 /**
92 * Show admin user edit page.
93 */
94 public String execute() {
95
/*
P/P * Method: String execute()
*
* Preconditions:
* init'ed(this.user)
* (soft) this.bean != null
*
* Postconditions:
* return_value in Addr_Set{&"input",&"error"}
* possibly_updated(this.bean.activationCode)
* possibly_updated(this.bean.administrator)
* possibly_updated(this.bean.emailAddress)
* possibly_updated(this.bean.enabled)
* possibly_updated(this.bean.fullName)
* possibly_updated(this.bean.id)
* possibly_updated(this.bean.locale)
* possibly_updated(this.bean.password)
* possibly_updated(this.bean.screenName)
* ...
*
* Test Vectors:
* this.user: Addr_Set{null}, Inverse{null}
* org.apache.roller.weblogger.pojos.User:getId(...)@96: Addr_Set{null}, Inverse{null}
*/
96 if (getUser() != null && getUser().getId() != null) {
97 // populate form data from user profile data
98 getBean().copyFrom(getUser(), getLocale());
99 } else {
100 addError("userAdmin.error.userNotFound");
101 return ERROR;
102 }
103
104 return INPUT;
105 }
106
107
108 /**
109 * Save modified user profile.
110 */
111 public String save() {
112
113 // custom validation
/*
P/P * Method: String save()
*
* Preconditions:
* this.bean != null
* init'ed(this.bean.emailAddress)
* this.user != null
* (soft) log != null
* (soft) init'ed(this.bean.activationCode)
* (soft) init'ed(this.bean.administrator)
* (soft) this.bean.enabled != null
* (soft) init'ed(this.bean.fullName)
* (soft) init'ed(this.bean.locale)
* (soft) init'ed(this.bean.password)
* ...
*
* Presumptions:
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@130 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@130 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@157 != null
*
* Postconditions:
* return_value == &"input"
*
* Test Vectors:
* this.bean.administrator: {1}, {0}
* org.apache.commons.lang.StringUtils:isEmpty(...)@121: {1}, {0}
* org.apache.roller.weblogger.pojos.User:equals(...)@212: {1}, {0}
* org.apache.roller.weblogger.pojos.User:hasRole(...)@133: {0}, {1}
* org.apache.roller.weblogger.pojos.User:hasRole(...)@142: {1}, {0}
* org.apache.roller.weblogger.ui.struts2.admin.ModifyUser:hasActionErrors(...)@116: {1}, {0}
*/
114 myValidate();
115
116 if (!hasActionErrors()) {
117
118 getBean().copyTo(getUser(), getLocale());
119
120 // reset password if set
121 if (!StringUtils.isEmpty(getBean().getPassword())) {
122 try {
123 getUser().resetPassword(getBean().getPassword());
124 } catch (WebloggerException e) {
125 addMessage("yourProfile.passwordResetError");
126 }
127 }
128
129 try {
130 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
131
132 // grant/revoke admin role if needed
133 if (getUser().hasRole("admin") && !getBean().isAdministrator()) {
134
135 if (!isUserEditingSelf()) {
136 // revoke role
137 mgr.revokeRole("admin", getUser());
138 } else {
139 addError("userAdmin.cantChangeOwnRole");
140 }
141
142 } else if(!getUser().hasRole("admin") && getBean().isAdministrator()) {
143
144 if (!isUserEditingSelf()) {
145 // grant role
146 getUser().grantRole("admin");
147 } else {
148 addError("userAdmin.cantChangeOwnRole");
149 }
150
151 }
152
153 RollerContext.flushAuthenticationUserCache(getUser().getUserName());
154
155 // save the updated profile
156 mgr.saveUser(getUser());
157 WebloggerFactory.getWeblogger().flush();
158
159 addMessage("userAdmin.userSaved");
160
161 return INPUT;
162
163 } catch (WebloggerException ex) {
164 log.error("ERROR in action", ex);
165 // TODO: i18n
166 addError("userAdmin.error.unexpectedError");
167 }
168
169 }
170
171 return INPUT;
172 }
173
174
175 // TODO: replace with struts2 validation
176 private void myValidate() {
177
/*
P/P * Method: void myValidate()
*
* Preconditions:
* this.bean != null
* init'ed(this.bean.emailAddress)
* this.user != null
*
* Test Vectors:
* org.apache.commons.lang.StringUtils:isEmpty(...)@181: {0}, {1}
* org.apache.roller.weblogger.pojos.User:getId(...)@178: Inverse{null}, Addr_Set{null}
*/
178 if(getUser().getId() == null) {
179 addError("userAdmin.error.userNotFound");
180 }
181 if (StringUtils.isEmpty(getBean().getEmailAddress())) {
182 addError("error.add.user.missingEmailAddress");
183 }
184 }
185
186
187 public CreateUserBean getBean() {
/*
P/P * Method: CreateUserBean getBean()
*
* Preconditions:
* init'ed(this.bean)
*
* Postconditions:
* return_value == this.bean
* init'ed(return_value)
*/
188 return bean;
189 }
190
191 public void setBean(CreateUserBean bean) {
/*
P/P * Method: void setBean(CreateUserBean)
*
* Postconditions:
* this.bean == bean
* init'ed(this.bean)
*/
192 this.bean = bean;
193 }
194
195 public User getUser() {
/*
P/P * Method: User getUser()
*
* Preconditions:
* init'ed(this.user)
*
* Postconditions:
* return_value == this.user
* init'ed(return_value)
*/
196 return user;
197 }
198
199 public void setUser(User user) {
/*
P/P * Method: void setUser(User)
*
* Postconditions:
* this.user == user
* init'ed(this.user)
*/
200 this.user = user;
201 }
202
203 public String getUserName() {
/*
P/P * Method: String getUserName()
*
* Preconditions:
* init'ed(this.userName)
*
* Postconditions:
* return_value == this.userName
* init'ed(return_value)
*/
204 return userName;
205 }
206
207 public void setUserName(String userName) {
/*
P/P * Method: void setUserName(String)
*
* Postconditions:
* this.userName == userName
* init'ed(this.userName)
*/
208 this.userName = userName;
209 }
210
211 public boolean isUserEditingSelf() {
/*
P/P * Method: bool isUserEditingSelf()
*
* Preconditions:
* this.user != null
*
* Postconditions:
* init'ed(return_value)
*/
212 return getUser().equals(getAuthenticatedUser());
213 }
214
215 }
SofCheck Inspector Build Version : 2.18479
| ModifyUser.java |
2009-Jan-02 14:24:58 |
| ModifyUser.class |
2009-Sep-04 03:12:45 |