You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2012/06/19 16:05:40 UTC

svn commit: r1351723 - in /rave/branches/model_interfaces/rave-components/rave-web/src: main/java/org/apache/rave/portal/web/controller/ main/java/org/apache/rave/portal/web/controller/admin/ main/java/org/apache/rave/portal/web/controller/util/ main/j...

Author: mfranklin
Date: Tue Jun 19 14:05:40 2012
New Revision: 1351723

URL: http://svn.apache.org/viewvc?rev=1351723&view=rev
Log:
Fixed serialization/deserialization issues for User RAVE-667

Added:
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/util/ModelUtils.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/UserForm.java
Modified:
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ChangePasswordController.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ReminderController.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/UserProfileController.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/ChangePasswordValidator.java
    rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/NewAccountValidator.java
    rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ChangePasswordControllerTest.java
    rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/NewAccountControllerTest.java
    rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java
    rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ReminderControllerTest.java
    rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/UserControllerTest.java
    rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/validator/NewAccountValidatorTest.java

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ChangePasswordController.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ChangePasswordController.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ChangePasswordController.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ChangePasswordController.java Tue Jun 19 14:05:40 2012
@@ -22,6 +22,8 @@ package org.apache.rave.portal.web.contr
 import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.controller.util.ModelUtils;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.ChangePasswordValidator;
@@ -74,7 +76,7 @@ public class ChangePasswordController {
 
 
     @RequestMapping(value = {"/changepassword", "/changepassword/**"}, method = RequestMethod.POST)
-    public String update(@ModelAttribute UserImpl user, BindingResult results, Model model, RedirectAttributes redirectAttributes) {
+    public String update(@ModelAttribute UserForm user, BindingResult results, Model model, RedirectAttributes redirectAttributes) {
         log.debug("updating user password for hash {}", user.getForgotPasswordHash());
         model.addAttribute(ModelKeys.USER, user);
         passwordValidator.validate(user, results);
@@ -85,7 +87,7 @@ public class ChangePasswordController {
         }
         try {
             log.debug("Submitted passwords were valid");
-            userService.updatePassword(user);
+            userService.updatePassword(ModelUtils.convert(user));
             redirectAttributes.addFlashAttribute(ModelKeys.REDIRECT_MESSAGE, messagePasswordChanged);
             return ViewNames.REDIRECT_LOGIN ;
         } catch (Exception ex) {

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/NewAccountController.java Tue Jun 19 14:05:40 2012
@@ -22,6 +22,8 @@ package org.apache.rave.portal.web.contr
 import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.CaptchaService;
 import org.apache.rave.portal.service.NewAccountService;
+import org.apache.rave.portal.web.controller.util.ModelUtils;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.NewAccountValidator;
@@ -67,7 +69,7 @@ public class NewAccountController {
     }
 
     @RequestMapping(value = {"/newaccount", "/newaccount/*"}, method = RequestMethod.POST)
-    public String create(@ModelAttribute(value = "newUser") UserImpl newUser, BindingResult results, Model model, HttpServletRequest request,  RedirectAttributes redirectAttributes) {
+    public String create(@ModelAttribute(value = "newUser") UserForm newUser, BindingResult results, Model model, HttpServletRequest request,  RedirectAttributes redirectAttributes) {
         logger.debug("Creating a new user account");
         model.addAttribute(ModelKeys.NEW_USER, newUser);
 
@@ -83,7 +85,7 @@ public class NewAccountController {
             logger.debug("newaccount.jsp: passed form validation");
 
             if (captchaService.isValid(request)) {
-                newAccountService.createNewAccount(newUser);
+                newAccountService.createNewAccount(ModelUtils.convert(newUser));
                 redirectAttributes.addFlashAttribute(ModelKeys.REDIRECT_MESSAGE, messageSuccess);
                 return ViewNames.REDIRECT_LOGIN;
             } else {

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ProfileController.java Tue Jun 19 14:05:40 2012
@@ -21,11 +21,11 @@ package org.apache.rave.portal.web.contr
 
 import org.apache.rave.portal.model.Page;
 import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.PageService;
 import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.web.controller.util.ControllerUtils;
 import org.apache.rave.portal.web.model.NavigationMenu;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.slf4j.Logger;
@@ -82,7 +82,7 @@ public class ProfileController {
     @RequestMapping(method = RequestMethod.POST)
     public String updateProfile(ModelMap model,
                                 @RequestParam(required = false) Long referringPageId,
-                                @ModelAttribute("updatedUser") UserImpl updatedUser) {
+                                @ModelAttribute("updatedUser") UserForm updatedUser) {
         logger.info("Updating " + updatedUser.getUsername() + " profile information");
 
         User user = userService.getAuthenticatedUser();

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ReminderController.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ReminderController.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ReminderController.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/ReminderController.java Tue Jun 19 14:05:40 2012
@@ -23,6 +23,8 @@ import org.apache.rave.portal.model.User
 import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.CaptchaService;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.controller.util.ModelUtils;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.NewPasswordValidator;
@@ -74,9 +76,10 @@ public class ReminderController {
      * Processes username requests
      */
     @RequestMapping(value = {"/retrieveusername"}, method = RequestMethod.POST)
-    public String requestUsername(@ModelAttribute UserImpl user, BindingResult results, Model model,
+    public String requestUsername(@ModelAttribute UserForm userForm, BindingResult results, Model model,
                                   HttpServletRequest request, RedirectAttributes redirectAttributes) {
         log.debug("Requesting username reminder");
+        User user = ModelUtils.convert(userForm);
         if (!validateEmail(user, results, model, request)) {
             return captchaRequest(model, request, ViewNames.USERNAME_REQUEST);
         }
@@ -98,9 +101,10 @@ public class ReminderController {
      * Processes new password requests
      */
     @RequestMapping(value = {"/newpassword"}, method = RequestMethod.POST)
-    public String requestPassword(@ModelAttribute UserImpl user, BindingResult results, Model model,
+    public String requestPassword(@ModelAttribute UserForm userForm, BindingResult results, Model model,
                                   HttpServletRequest request, RedirectAttributes redirectAttributes) {
         log.debug("Requesting password reminder");
+        User user = ModelUtils.convert(userForm);
         if (!validateEmail(user, results, model, request)) {
             return captchaRequest(model, request, ViewNames.NEW_PASSWORD_REQUEST);
         }

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/UserProfileController.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/UserProfileController.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/UserProfileController.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/UserProfileController.java Tue Jun 19 14:05:40 2012
@@ -20,8 +20,9 @@
 package org.apache.rave.portal.web.controller;
 
 import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.controller.util.ModelUtils;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.UserProfileValidator;
@@ -67,7 +68,7 @@ public class UserProfileController {
     }
 
     @RequestMapping(value = {"/updateUserProfile", "/updateUserProfile/*"}, method = RequestMethod.POST)
-    public String create(@ModelAttribute UserImpl user, BindingResult results, Model model, @RequestParam String username, @RequestParam String password, RedirectAttributes redirectAttributes) {
+    public String create(@ModelAttribute UserForm user, BindingResult results, Model model, @RequestParam String username, @RequestParam String password, RedirectAttributes redirectAttributes) {
         logger.debug("Updating user profile.");
         model.addAttribute(ModelKeys.USER_PROFILE, user);
 
@@ -80,7 +81,7 @@ public class UserProfileController {
         //Now attempt to update the account.
         try {
             logger.debug("userprofile: passed form validation");
-            userService.updateUserProfile(user);
+            userService.updateUserProfile(ModelUtils.convert(user));
             redirectAttributes.addFlashAttribute(ModelKeys.REDIRECT_MESSAGE, profileUpdatedMessage);
             return ViewNames.REDIRECT_LOGIN;
         }

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/admin/UserController.java Tue Jun 19 14:05:40 2012
@@ -26,6 +26,8 @@ import org.apache.rave.portal.service.Au
 import org.apache.rave.portal.service.NewAccountService;
 import org.apache.rave.portal.service.PortalPreferenceService;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.controller.util.ModelUtils;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.PortalPreferenceKeys;
 import org.apache.rave.portal.web.util.ViewNames;
@@ -125,7 +127,7 @@ public class UserController {
     }
 
     @RequestMapping(value = "/admin/userdetail/update", method = RequestMethod.POST)
-    public String updateUserDetail(@ModelAttribute UserImpl user, BindingResult result,
+    public String updateUserDetail(@ModelAttribute User user, BindingResult result,
                                    @ModelAttribute(ModelKeys.TOKENCHECK) String sessionToken,
                                    @RequestParam() String token,
                                    ModelMap modelMap,
@@ -144,7 +146,7 @@ public class UserController {
     }
 
     @RequestMapping(value = "/admin/userdetail/delete", method = RequestMethod.POST)
-    public String deleteUserDetail(@ModelAttribute UserImpl user,
+    public String deleteUserDetail(@ModelAttribute UserForm user,
                                    @ModelAttribute(ModelKeys.TOKENCHECK) String sessionToken,
                                    @RequestParam String token,
                                    @RequestParam(required = false) String confirmdelete,
@@ -172,7 +174,7 @@ public class UserController {
     }
 
     @RequestMapping(value = {"/admin/newaccount", "/admin/newaccount/*"}, method = RequestMethod.POST)
-    public String create(@ModelAttribute(value = "newUser") UserImpl newUser, BindingResult results, Model model,
+    public String create(@ModelAttribute(value = "newUser") UserForm newUser, BindingResult results, Model model,
                          RedirectAttributes redirectAttributes) {
         logger.debug("Creating a new user account");
         model.addAttribute(ModelKeys.NEW_USER, newUser);
@@ -184,7 +186,7 @@ public class UserController {
         }
         try {
             logger.debug("newaccount.jsp: passed form validation");
-            newAccountService.createNewAccount(newUser);
+            newAccountService.createNewAccount(ModelUtils.convert(newUser));
             redirectAttributes.addFlashAttribute(ModelKeys.REDIRECT_MESSAGE, messageSuccess);
             return "redirect:/app/admin/users";
         } catch (org.springframework.dao.IncorrectResultSizeDataAccessException ex) {

Added: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/util/ModelUtils.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/util/ModelUtils.java?rev=1351723&view=auto
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/util/ModelUtils.java (added)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/controller/util/ModelUtils.java Tue Jun 19 14:05:40 2012
@@ -0,0 +1,33 @@
+package org.apache.rave.portal.web.controller.util;
+
+import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.model.impl.UserImpl;
+import org.apache.rave.portal.web.model.UserForm;
+
+/**
+ */
+public class ModelUtils {
+
+    private ModelUtils() {}
+
+
+    public static User convert(UserForm form) {
+        User newUser = new UserImpl(form.getId(),  form.getUsername());
+        newUser.setAuthorities(form.getAuthorities());
+        newUser.setPassword(form.getPassword());
+        newUser.setConfirmPassword(form.getConfirmPassword());
+        newUser.setForgotPasswordHash(form.getForgotPasswordHash());
+        newUser.setDefaultPageLayoutCode(form.getDefaultPageLayoutCode());
+        newUser.setStatus(form.getStatus());
+        newUser.setAboutMe(form.getAboutMe());
+        newUser.setGivenName(form.getGivenName());
+        newUser.setFamilyName(form.getFamilyName());
+        newUser.setDisplayName(form.getDisplayName());
+        newUser.setEmail(form.getEmail());
+        newUser.setOpenId(form.getOpenId());
+        newUser.setEnabled(form.isEnabled());
+        newUser.setExpired(form.isExpired());
+        newUser.setLocked(form.isLocked());
+        return newUser;
+    }
+}

Added: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/UserForm.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/UserForm.java?rev=1351723&view=auto
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/UserForm.java (added)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/UserForm.java Tue Jun 19 14:05:40 2012
@@ -0,0 +1,243 @@
+package org.apache.rave.portal.web.model;
+
+import org.apache.rave.portal.model.Authority;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Form backing object similar to User with concrete object references
+ */
+public class UserForm {
+
+    private Long id;
+    private Collection<Authority> authorities;
+    private String password;
+    private String username;
+    private String confirmPassword;
+    private String forgotPasswordHash;
+    private String email;
+    private String openId;
+    private String defaultPageLayoutCode;
+    private String givenName;
+    private String familyName;
+    private String displayName;
+    private String status;
+    private String aboutMe;
+    private boolean locked;
+    private boolean credsExpired;
+    private boolean expired;
+    private boolean enabled;
+
+    public UserForm(Long userid, String username) {
+        this();
+        this.id = userid;
+        this.username = username;
+    }
+
+    public UserForm() {
+        this.authorities = new ArrayList<Authority>();
+    }
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Collection<Authority> getAuthorities() {
+        return authorities;
+    }
+
+    public void setAuthorities(Collection<Authority> authorities) {
+        this.authorities = authorities;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getConfirmPassword() {
+        return confirmPassword;
+    }
+
+    public void setConfirmPassword(String confirmPassword) {
+        this.confirmPassword = confirmPassword;
+    }
+
+    public String getForgotPasswordHash() {
+        return forgotPasswordHash;
+    }
+
+    public void setForgotPasswordHash(String forgotPasswordHash) {
+        this.forgotPasswordHash = forgotPasswordHash;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public String getDefaultPageLayoutCode() {
+        return defaultPageLayoutCode;
+    }
+
+    public void setDefaultPageLayoutCode(String defaultPageLayoutCode) {
+        this.defaultPageLayoutCode = defaultPageLayoutCode;
+    }
+
+    public String getGivenName() {
+        return givenName;
+    }
+
+    public void setGivenName(String givenName) {
+        this.givenName = givenName;
+    }
+
+    public String getFamilyName() {
+        return familyName;
+    }
+
+    public void setFamilyName(String familyName) {
+        this.familyName = familyName;
+    }
+
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    public void setDisplayName(String displayName) {
+        this.displayName = displayName;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getAboutMe() {
+        return aboutMe;
+    }
+
+    public void setAboutMe(String aboutMe) {
+        this.aboutMe = aboutMe;
+    }
+
+    public boolean isLocked() {
+        return locked;
+    }
+
+    public void setLocked(boolean locked) {
+        this.locked = locked;
+    }
+
+    public boolean isCredsExpired() {
+        return credsExpired;
+    }
+
+    public void setCredsExpired(boolean credsExpired) {
+        this.credsExpired = credsExpired;
+    }
+
+    public boolean isExpired() {
+        return expired;
+    }
+
+    public void setExpired(boolean expired) {
+        this.expired = expired;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof UserForm)) return false;
+
+        UserForm userForm = (UserForm) o;
+
+        if (credsExpired != userForm.credsExpired) return false;
+        if (enabled != userForm.enabled) return false;
+        if (expired != userForm.expired) return false;
+        if (locked != userForm.locked) return false;
+        if (aboutMe != null ? !aboutMe.equals(userForm.aboutMe) : userForm.aboutMe != null) return false;
+        if (authorities != null ? !authorities.equals(userForm.authorities) : userForm.authorities != null)
+            return false;
+        if (confirmPassword != null ? !confirmPassword.equals(userForm.confirmPassword) : userForm.confirmPassword != null)
+            return false;
+        if (defaultPageLayoutCode != null ? !defaultPageLayoutCode.equals(userForm.defaultPageLayoutCode) : userForm.defaultPageLayoutCode != null)
+            return false;
+        if (displayName != null ? !displayName.equals(userForm.displayName) : userForm.displayName != null)
+            return false;
+        if (email != null ? !email.equals(userForm.email) : userForm.email != null) return false;
+        if (familyName != null ? !familyName.equals(userForm.familyName) : userForm.familyName != null) return false;
+        if (forgotPasswordHash != null ? !forgotPasswordHash.equals(userForm.forgotPasswordHash) : userForm.forgotPasswordHash != null)
+            return false;
+        if (givenName != null ? !givenName.equals(userForm.givenName) : userForm.givenName != null) return false;
+        if (id != null ? !id.equals(userForm.id) : userForm.id != null) return false;
+        if (openId != null ? !openId.equals(userForm.openId) : userForm.openId != null) return false;
+        if (password != null ? !password.equals(userForm.password) : userForm.password != null) return false;
+        if (status != null ? !status.equals(userForm.status) : userForm.status != null) return false;
+        if (username != null ? !username.equals(userForm.username) : userForm.username != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = id != null ? id.hashCode() : 0;
+        result = 31 * result + (authorities != null ? authorities.hashCode() : 0);
+        result = 31 * result + (password != null ? password.hashCode() : 0);
+        result = 31 * result + (username != null ? username.hashCode() : 0);
+        result = 31 * result + (confirmPassword != null ? confirmPassword.hashCode() : 0);
+        result = 31 * result + (forgotPasswordHash != null ? forgotPasswordHash.hashCode() : 0);
+        result = 31 * result + (email != null ? email.hashCode() : 0);
+        result = 31 * result + (openId != null ? openId.hashCode() : 0);
+        result = 31 * result + (defaultPageLayoutCode != null ? defaultPageLayoutCode.hashCode() : 0);
+        result = 31 * result + (givenName != null ? givenName.hashCode() : 0);
+        result = 31 * result + (familyName != null ? familyName.hashCode() : 0);
+        result = 31 * result + (displayName != null ? displayName.hashCode() : 0);
+        result = 31 * result + (status != null ? status.hashCode() : 0);
+        result = 31 * result + (aboutMe != null ? aboutMe.hashCode() : 0);
+        result = 31 * result + (locked ? 1 : 0);
+        result = 31 * result + (credsExpired ? 1 : 0);
+        result = 31 * result + (expired ? 1 : 0);
+        result = 31 * result + (enabled ? 1 : 0);
+        return result;
+    }
+}

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/ChangePasswordValidator.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/ChangePasswordValidator.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/ChangePasswordValidator.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/ChangePasswordValidator.java Tue Jun 19 14:05:40 2012
@@ -19,8 +19,8 @@
 
 package org.apache.rave.portal.web.validator;
 
-import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,7 +49,7 @@ public class ChangePasswordValidator ext
     @Override
     public void validate(Object target, Errors errors) {
         log.debug("ChangePasswordValidator validator called");
-        User newUser = (User) target;
+        UserForm newUser = (UserForm) target;
         boolean validHash = getUserService().isValidReminderRequest(newUser.getForgotPasswordHash(), minutesValid);
         if (!validHash) {
             errors.rejectValue(FIELD_PASSWORD, "page.changepassword.expired");

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/NewAccountValidator.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/NewAccountValidator.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/NewAccountValidator.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/validator/NewAccountValidator.java Tue Jun 19 14:05:40 2012
@@ -20,8 +20,8 @@ package org.apache.rave.portal.web.valid
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.validator.routines.EmailValidator;
-import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,12 +52,12 @@ public class NewAccountValidator impleme
     }
 
     public boolean supports(Class<?> aClass) {
-        return User.class.isAssignableFrom(aClass);
+        return UserForm.class.isAssignableFrom(aClass);
     }
 
     public void validate(Object obj, Errors errors) {
         logger.debug("Validator called");
-        User newUser = (User) obj;
+        UserForm newUser = (UserForm) obj;
 
         validateUsername(errors, newUser);
         validatePassword(errors, newUser);
@@ -67,7 +67,7 @@ public class NewAccountValidator impleme
         writeResultToLog(errors);
     }
 
-    private void validateUsername(Errors errors, User newUser) {
+    private void validateUsername(Errors errors, UserForm newUser) {
         final String username = newUser.getUsername();
         if (StringUtils.isBlank(username)) {
             errors.rejectValue(FIELD_USERNAME, "username.required");
@@ -85,7 +85,7 @@ public class NewAccountValidator impleme
         return userService.getUserByUsername(username) != null;
     }
 
-    protected void validatePassword(Errors errors, User newUser) {
+    protected void validatePassword(Errors errors, UserForm newUser) {
         if (StringUtils.isBlank(newUser.getPassword())) {
             errors.rejectValue(FIELD_PASSWORD, "password.required");
             logger.info("Password required");
@@ -95,7 +95,7 @@ public class NewAccountValidator impleme
         }
     }
 
-    protected void validateConfirmPassword(Errors errors, User newUser) {
+    protected void validateConfirmPassword(Errors errors, UserForm newUser) {
         if (StringUtils.isBlank(newUser.getConfirmPassword())) {
             errors.rejectValue(FIELD_CONFIRM_PASSWORD, "confirmPassword.required");
             logger.info("Confirm Password required");
@@ -105,7 +105,7 @@ public class NewAccountValidator impleme
         }
     }
 
-    private boolean isConfirmPasswordDifferentThanPassword(User newUser) {
+    private boolean isConfirmPasswordDifferentThanPassword(UserForm newUser) {
         return !(newUser.getConfirmPassword().equals(newUser.getPassword()));
     }
 

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ChangePasswordControllerTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ChangePasswordControllerTest.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ChangePasswordControllerTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ChangePasswordControllerTest.java Tue Jun 19 14:05:40 2012
@@ -19,8 +19,8 @@
 
 package org.apache.rave.portal.web.controller;
 
-import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.ChangePasswordValidator;
@@ -69,7 +69,7 @@ public class ChangePasswordControllerTes
     public void testUpdate() throws Exception {
         final Model model = createNiceMock(Model.class);
         RedirectAttributes redirectAttributes = createNiceMock(RedirectAttributes.class);
-        UserImpl newUser = new UserImpl();
+        UserForm newUser = new UserForm();
         replay(redirectAttributes);
         replay(model);
         BindingResult results = new DirectFieldBindingResult(newUser, ModelKeys.USER);

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/NewAccountControllerTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/NewAccountControllerTest.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/NewAccountControllerTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/NewAccountControllerTest.java Tue Jun 19 14:05:40 2012
@@ -25,6 +25,7 @@ import org.apache.rave.portal.service.Ca
 import org.apache.rave.portal.service.NewAccountService;
 import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.service.impl.ReCaptchaService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.NewAccountValidator;
@@ -92,7 +93,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_UsernameNotSpecified() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = ""; //no username specified
 		final String password = "password";
@@ -122,7 +123,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_UsernameAlreadyExists() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "canonical"; //specified username already exists in database
 		final String password = "password";
@@ -159,7 +160,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_InvalidUsernameLength() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "u"; //username length less than 2 characters
 		final String password = "password";
@@ -189,7 +190,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_PasswordNotSpecified() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "username";
 		final String password = ""; //password not specified
@@ -219,7 +220,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_ConfirmPasswordNotSpecified() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "usename";
 		final String password = "pasword";
@@ -248,7 +249,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_InvalidPasswordLength() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "usename";
 		final String password = "pas"; //invalid length password
@@ -276,7 +277,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_PasswordMismatchCaseOne() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "username";
 		final String password = "password";
@@ -304,7 +305,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_PasswordMismatchCaseTwo() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "username";
 		final String password = "password";
@@ -332,7 +333,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_BlankFormSubmitted() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = ""; //Username not specified
 		final String password = ""; //Password not specified
@@ -365,7 +366,7 @@ public class NewAccountControllerTest {
 	@Test
 	public void create_ValidFormSubmitted() {
 		final Model model = createNiceMock(Model.class);
-		final UserImpl User = new UserImpl();
+		final UserForm User = new UserForm();
 		final BindingResult errors = createNiceMock(BindingResult.class);
 		final String username = "username"; //Username not specified
 		final String password = "password"; //Password not specified

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ProfileControllerTest.java Tue Jun 19 14:05:40 2012
@@ -27,6 +27,7 @@ import org.apache.rave.portal.model.impl
 import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.PageService;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.hamcrest.CoreMatchers;
@@ -155,7 +156,7 @@ public class ProfileControllerTest {
 		String userProfile = new String(ModelKeys.USER_PROFILE);
 
 		//creating a mock authenticated user
-		final UserImpl authUser = new UserImpl();
+		final User authUser = new UserImpl();
         authUser.setUsername(USERNAME);
 		//set existing status
 		authUser.setStatus("Single");
@@ -166,7 +167,7 @@ public class ProfileControllerTest {
 		authUser.setEmail("testuser@rave.com");
 
 		//creating a mock updated user
-		final UserImpl updatedUser = new UserImpl();
+		final UserForm updatedUser = new UserForm();
 		//set the updated status
 		updatedUser.setStatus("Married");
 		updatedUser.setGivenName("Test");

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ReminderControllerTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ReminderControllerTest.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ReminderControllerTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/ReminderControllerTest.java Tue Jun 19 14:05:40 2012
@@ -19,10 +19,10 @@
 
 package org.apache.rave.portal.web.controller;
 
-import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.CaptchaService;
 import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.service.impl.ReCaptchaService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.NewPasswordValidator;
@@ -83,7 +83,7 @@ public class ReminderControllerTest {
     @Test
     public void testCreate() throws Exception {
         Model model = createNiceMock(Model.class);
-        UserImpl User = new UserImpl();
+        UserForm User = new UserForm();
         BindingResult results = new DirectFieldBindingResult(User, ModelKeys.USER);
         RedirectAttributes redirectAttributes = createNiceMock(RedirectAttributes.class);
         replay(redirectAttributes);
@@ -109,7 +109,7 @@ public class ReminderControllerTest {
         assertThat(viewResult, CoreMatchers.equalTo(ViewNames.USERNAME_REQUEST));
         // password part:
         model = createNiceMock(Model.class);
-        User = new UserImpl();
+        User = new UserForm();
         results = new DirectFieldBindingResult(User, ModelKeys.USER);
         redirectAttributes = createNiceMock(RedirectAttributes.class);
         replay(redirectAttributes);

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/UserControllerTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/UserControllerTest.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/UserControllerTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/controller/admin/UserControllerTest.java Tue Jun 19 14:05:40 2012
@@ -28,6 +28,7 @@ import org.apache.rave.portal.service.Au
 import org.apache.rave.portal.service.NewAccountService;
 import org.apache.rave.portal.service.PortalPreferenceService;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.apache.rave.portal.web.util.ModelKeys;
 import org.apache.rave.portal.web.util.ViewNames;
 import org.apache.rave.portal.web.validator.NewAccountValidator;
@@ -183,7 +184,7 @@ public class UserControllerTest {
         ModelMap modelMap = new ExtendedModelMap();
         final Long userid = 123L;
         final String email = "john.doe.sr@example.net";
-        UserImpl user = new UserImpl(userid, "john.doe.sr");
+        UserForm user = new UserForm(userid, "john.doe.sr");
         user.setPassword("secrect");
         user.setConfirmPassword(user.getConfirmPassword());
         user.setEmail(email);
@@ -205,7 +206,7 @@ public class UserControllerTest {
     public void deleteUserDetail_noConfirmChecked() {
         ModelMap modelMap = new ExtendedModelMap();
         Long userid = 123L;
-        UserImpl user = new UserImpl(userid, "john.doe.sr");
+        UserForm user = new UserForm(userid, "john.doe.sr");
 
         SessionStatus sessionStatus = createMock(SessionStatus.class);
         replay(sessionStatus);
@@ -218,7 +219,7 @@ public class UserControllerTest {
     @Test(expected = SecurityException.class)
     public void deleteUserDetail_wrongToken() {
         ModelMap modelMap = new ExtendedModelMap();
-        UserImpl user = new UserImpl(123L, "john.doe.sr");
+        UserForm user = new UserForm(123L, "john.doe.sr");
         SessionStatus sessionStatus = createMock(SessionStatus.class);
         sessionStatus.setComplete();
 
@@ -247,7 +248,7 @@ public class UserControllerTest {
     public void create_ValidFormSubmitted() throws Exception {
         final Model model = createNiceMock(Model.class);
         final RedirectAttributes redirectAttributes = createNiceMock(RedirectAttributes.class);
-        final UserImpl User = new UserImpl();
+        final UserForm User = new UserForm();
         final BindingResult errors = new BeanPropertyBindingResult(User, ModelKeys.NEW_USER);
         final String username = "username";
         final String password = "password";
@@ -262,7 +263,7 @@ public class UserControllerTest {
         expect(userService.getUserByUsername(username)).andReturn(null);
         expect(userService.getUserByEmail(email)).andReturn(null);
 
-        newAccountService.createNewAccount(User);
+        newAccountService.createNewAccount(isA(User.class));
 
         expectLastCall();
         replay(userService, model, newAccountService, redirectAttributes);
@@ -277,7 +278,7 @@ public class UserControllerTest {
     public void create_EmptyForm() throws Exception {
         final Model model = createNiceMock(Model.class);
         final RedirectAttributes redirectAttributes = createNiceMock(RedirectAttributes.class);
-        final UserImpl User = new UserImpl();
+        final UserForm User = new UserForm();
         final BindingResult errors = new BeanPropertyBindingResult(User, ModelKeys.NEW_USER);
         final String username = "";
         final String password = "";
@@ -289,7 +290,7 @@ public class UserControllerTest {
         User.setConfirmPassword(confirmPassword);
         User.setEmail(email);
 
-        newAccountService.createNewAccount(User);
+        newAccountService.createNewAccount(isA(User.class));
 
         replay(model);
 

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/validator/NewAccountValidatorTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/validator/NewAccountValidatorTest.java?rev=1351723&r1=1351722&r2=1351723&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/validator/NewAccountValidatorTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/validator/NewAccountValidatorTest.java Tue Jun 19 14:05:40 2012
@@ -20,8 +20,8 @@
 package org.apache.rave.portal.web.validator;
 
 import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.impl.UserImpl;
 import org.apache.rave.portal.service.UserService;
+import org.apache.rave.portal.web.model.UserForm;
 import org.junit.Before;
 import org.junit.Test;
 import org.springframework.validation.BindException;
@@ -50,12 +50,12 @@ public class NewAccountValidatorTest {
     @Test
     public void testSupports() throws Exception {
         assertTrue("Can validate org.apache.rave.portal.model.User",
-                newAccountValidator.supports(UserImpl.class));
+                newAccountValidator.supports(UserForm.class));
     }
 
     @Test
     public void testValidate() throws Exception {
-        UserImpl user = new UserImpl();
+        UserForm user = new UserForm();
         user.setUsername(VALID_NAME);
         user.setPassword(VALID_PASSWORD);
         user.setConfirmPassword(VALID_PASSWORD);
@@ -74,7 +74,7 @@ public class NewAccountValidatorTest {
 
     @Test
     public void testValidationFailsOnEmptyUser() throws Exception {
-        User user = new UserImpl();
+        UserForm user = new UserForm();
         Errors errors = new BindException(user, NEW_USER);
         expect(mockUserService.getUserByUsername("")).andReturn(null);
         replay(mockUserService);
@@ -92,7 +92,7 @@ public class NewAccountValidatorTest {
 
     @Test
     public void testValidationFailsOnExistingUser() throws Exception {
-        UserImpl user = new UserImpl();
+        UserForm user = new UserForm();
         user.setUsername("ExistingUser");
         user.setPassword(VALID_PASSWORD);
         user.setConfirmPassword(VALID_PASSWORD);
@@ -100,7 +100,7 @@ public class NewAccountValidatorTest {
         user.setEmail(VALID_EMAIL);
         Errors errors = new BindException(user, NEW_USER);
 
-        User user1 = createMock(UserImpl.class);
+        User user1 = createMock(User.class);
         expect(mockUserService.getUserByUsername("ExistingUser")).andReturn(user1);
         expect(mockUserService.getUserByEmail(VALID_EMAIL)).andReturn(null);
         replay(mockUserService);
@@ -113,7 +113,7 @@ public class NewAccountValidatorTest {
 
     @Test
     public void testValidationFailsOnExistingEmail() throws Exception {
-        UserImpl user = new UserImpl();
+        UserForm user = new UserForm();
         user.setUsername(VALID_NAME);
         user.setPassword(VALID_PASSWORD);
         user.setConfirmPassword(VALID_PASSWORD);
@@ -121,7 +121,7 @@ public class NewAccountValidatorTest {
         user.setEmail("existing@localhost");
         Errors errors = new BindException(user, NEW_USER);
 
-        User user1 = createMock(UserImpl.class);
+        User user1 = createMock(User.class);
         expect(mockUserService.getUserByUsername(VALID_NAME)).andReturn(null);
         expect(mockUserService.getUserByEmail("existing@localhost")).andReturn(user1);
         replay(mockUserService);
@@ -135,7 +135,7 @@ public class NewAccountValidatorTest {
 
     @Test
     public void testValidationFailsOnShortUserName() throws Exception {
-        UserImpl user = new UserImpl();
+        UserForm user = new UserForm();
         user.setUsername("A");
         user.setPassword(VALID_PASSWORD);
         user.setConfirmPassword(VALID_PASSWORD);
@@ -154,7 +154,7 @@ public class NewAccountValidatorTest {
 
     @Test
     public void testValidationFailsOnIllegalUsername() throws Exception {
-        UserImpl user = new UserImpl();
+        UserForm user = new UserForm();
         final String badUsername = "x'; DROP TABLE members; --";
         user.setUsername(badUsername);
         user.setPassword(VALID_PASSWORD);
@@ -174,7 +174,7 @@ public class NewAccountValidatorTest {
 
     @Test
     public void testValidationFailsOnShortPassword() throws Exception {
-        UserImpl user = new UserImpl();
+        UserForm user = new UserForm();
         user.setUsername(VALID_NAME);
         user.setPassword("123");
         user.setConfirmPassword("123");
@@ -193,7 +193,7 @@ public class NewAccountValidatorTest {
 
     @Test
     public void testValidationFailsOnNonMatchingPassword() throws Exception {
-        UserImpl user = new UserImpl();
+        UserForm user = new UserForm();
         user.setUsername(VALID_NAME);
         user.setPassword(VALID_PASSWORD);
         user.setConfirmPassword("doesnotmatch");