package cash.action;
import org.apache.log4j.Logger;
import cash.config.ConfigManager;
import cash.model.User;
import cash.util.HibernateUtil;
import cash.validator.PasswordFormatValidator;
import net.sf.hibernate.LockMode;
/**
* Edit a user
* @author Joel Hockey
* @version $Id: $
*/
public class EditAction extends HibernateAction {
private static final Logger LOG = Logger.getLogger(EditAction.class);
private User m_user = new User();
private String m_repeatPassword;
/** return user to be edited. */
public User getUser() { return m_user; }
/** @param pwd repeat of password */
public void setRepeatPassword(String pwd) { m_repeatPassword = pwd; }
/** @return repeat password */
public String getRepeatPassword() { return m_repeatPassword; }
/** override super */
public String execute() throws Exception {
LOG.debug("EditAction started");
// get original user from session, check that password is valid, update and save.
User u = (User)get("user");
HibernateUtil.currentSession().lock(u, LockMode.NONE);
// check that password has actually changed before updating
if (!PasswordFormatValidator.PASSWORD_MASK.equals(m_user.getPassword())) {
if (!u.changePassword(m_user.getPassword())) {
addFieldError("user.password", "password must be different to previous "
+ ConfigManager.getConfig().getUser().getNoRepeatHistory() + " passwords");
return INPUT;
}
}
m_user.copy(u);
HibernateUtil.currentSession().save(u);
User loginUser = (User)get(LoginAction.LOGIN_USER);
if (u.getId() == loginUser.getId()) {
set(LoginAction.LOGIN_USER, u);
}
return SUCCESS;
}
}