KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > appfuse > webapp > action > UserForm


1 package org.appfuse.webapp.action;
2
3 import java.io.Serializable JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Map JavaDoc;
7
8 import javax.servlet.http.HttpServletRequest JavaDoc;
9
10 import org.acegisecurity.Authentication;
11 import org.acegisecurity.AuthenticationTrustResolver;
12 import org.acegisecurity.AuthenticationTrustResolverImpl;
13 import org.acegisecurity.context.SecurityContext;
14 import org.acegisecurity.context.SecurityContextHolder;
15 import org.apache.commons.lang.StringUtils;
16 import org.appfuse.Constants;
17 import org.appfuse.model.Role;
18 import org.appfuse.model.User;
19 import org.appfuse.service.RoleManager;
20 import org.appfuse.service.UserExistsException;
21 import org.appfuse.util.ConvertUtil;
22 import org.appfuse.util.StringUtil;
23 import org.appfuse.webapp.util.RequestUtil;
24
25 /**
26  * JSF Page class to handle editing a user with a form.
27  *
28  * @author mraible
29  */

30 public class UserForm extends BasePage implements Serializable JavaDoc {
31     private static final long serialVersionUID = -1141119853856863204L;
32     private RoleManager roleManager;
33     private String JavaDoc username;
34     private User user = new User();
35     private Map JavaDoc availableRoles;
36     private String JavaDoc[] userRoles;
37     
38     public void setUsername(String JavaDoc username) {
39         this.username = username;
40     }
41
42     public String JavaDoc getUsername() {
43         return username;
44     }
45
46     public User getUser() {
47         return user;
48     }
49
50     public void setUser(User user) {
51         this.user = user;
52     }
53
54     public void setRoleManager(RoleManager roleManager) {
55         this.roleManager = roleManager;
56     }
57
58     public String JavaDoc cancel() {
59         if (log.isDebugEnabled()) {
60             log.debug("Entering 'cancel' method");
61         }
62
63         if (!StringUtils.equals(getParameter("from"), "list")) {
64             return "mainMenu";
65         } else {
66             return "cancel";
67         }
68     }
69
70     public String JavaDoc edit() {
71         HttpServletRequest JavaDoc request = getRequest();
72
73         // if a user's username is passed in
74
if (username != null) {
75             // lookup the user using that id
76
user = userManager.getUserByUsername(username);
77         } else if (username == null) {
78             user = userManager.getUserByUsername(request.getRemoteUser());
79         } else {
80             user = new User();
81             user.addRole(new Role(Constants.USER_ROLE));
82         }
83
84         if (user.getUsername() != null) {
85             user.setConfirmPassword(user.getPassword());
86
87             // if user logged in with remember me, display a warning that they can't change passwords
88
log.debug("checking for remember me login...");
89
90             AuthenticationTrustResolver resolver = new AuthenticationTrustResolverImpl();
91             SecurityContext ctx = SecurityContextHolder.getContext();
92
93             if (ctx != null) {
94                 Authentication auth = ctx.getAuthentication();
95
96                 if (resolver.isRememberMe(auth)) {
97                     getSession().setAttribute("cookieLogin", "true");
98                     log.trace("User '" + user.getUsername() + "' logged in with cookie");
99                     addMessage("userProfile.cookieLogin");
100                 }
101             }
102         }
103
104         return "editProfile";
105     }
106
107     public String JavaDoc save() {
108         String JavaDoc password = user.getPassword();
109         String JavaDoc originalPassword = getParameter("userForm:originalPassword");
110
111         Boolean JavaDoc encrypt = (Boolean JavaDoc) getConfiguration().get(Constants.ENCRYPT_PASSWORD);
112         boolean doEncrypt = (encrypt != null) ? encrypt.booleanValue() : false;
113         
114         if (doEncrypt && (StringUtils.equals(getParameter("encryptPass"), "true") ||
115                 !StringUtils.equals(password, originalPassword))) {
116             String JavaDoc algorithm = (String JavaDoc) getConfiguration().get(Constants.ENC_ALGORITHM);
117
118             if (algorithm == null) { // should only happen for test case
119
log.debug("assuming testcase, setting algorigthm to 'SHA'");
120                 algorithm = "SHA";
121             }
122
123             user.setPassword(StringUtil.encodePassword(password, algorithm));
124         }
125         
126         // workaround for plain ol' HTML input tags that don't seem to set
127
// properties on the managed bean
128
setUserRoles(getRequest().getParameterValues("userForm:userRoles"));
129
130         for (int i = 0; (userRoles != null) && (i < userRoles.length); i++) {
131             String JavaDoc roleName = userRoles[i];
132             user.addRole(roleManager.getRole(roleName));
133         }
134         
135         Integer JavaDoc originalVersion = user.getVersion();
136
137         try {
138             userManager.saveUser(user);
139         } catch (UserExistsException e) {
140             log.warn(e.getMessage());
141             addError("errors.existing.user",
142                      new Object JavaDoc[] { user.getUsername(), user.getEmail() });
143
144             // reset the version # to what was passed in
145
user.setVersion(originalVersion);
146             return "editProfile";
147         }
148
149         if (!StringUtils.equals(getParameter("from"), "list")) {
150             // add success messages
151
addMessage("user.saved");
152
153             // return to main Menu
154
return "mainMenu";
155         } else {
156             // add success messages
157
if ("".equals(getParameter("userForm:version"))) {
158                 addMessage("user.added", user.getFullName());
159
160                 sendUserMessage(user, getText("newuser.email.message",
161                                 user.getFullName()), RequestUtil.getAppURL(getRequest()));
162
163                 return "list"; // return to list screen
164
} else {
165                 addMessage("user.updated.byAdmin", user.getFullName());
166                 return "editProfile"; // return to current page
167
}
168         }
169     }
170
171     public String JavaDoc delete() {
172         userManager.removeUser(getUser().getId().toString());
173         addMessage("user.deleted", getUser().getFullName());
174
175         return "list";
176     }
177
178     /**
179      * Convenience method to determine if the user came from the list screen
180      * @return String
181      */

182     public String JavaDoc getFrom() {
183         if ((username != null) || (getParameter("editUser:add") != null) ||
184                 ("list".equals(getParameter("from")))) {
185             return "list";
186         }
187
188         return "";
189     }
190
191     // Form Controls ==========================================================
192
public Map JavaDoc getAvailableRoles() {
193         if (availableRoles == null) {
194             List JavaDoc roles =
195                 (List JavaDoc) getServletContext().getAttribute(Constants.AVAILABLE_ROLES);
196             availableRoles = ConvertUtil.convertListToMap(roles);
197         }
198
199         return availableRoles;
200     }
201
202     public String JavaDoc[] getUserRoles() {
203         userRoles = new String JavaDoc[user.getRoles().size()];
204
205         int i = 0;
206
207         if (userRoles.length > 0) {
208             for (Iterator JavaDoc it = user.getRoles().iterator(); it.hasNext();) {
209                 Role role = (Role) it.next();
210
211                 userRoles[i] = role.getName();
212                 i++;
213             }
214         }
215
216         return userRoles;
217     }
218
219     public void setUserRoles(String JavaDoc[] userRoles) {
220         this.userRoles = userRoles;
221     }
222     
223     public String JavaDoc getCountry() {
224         return getUser().getAddress().getCountry();
225     }
226     
227     // for some reason, the country drop-down won't do
228
// getUser().getAddress().setCountry(value)
229
public void setCountry(String JavaDoc country) {
230         getUser().getAddress().setCountry(country);
231     }
232 }
233
Popular Tags