package net.techreadiness.customer.action.task.youraccount.update;
import static net.techreadiness.security.CorePermissionCodes.CORE_CUSTOMER_USER_UPDATE;
import java.util.List;
import net.techreadiness.annotation.CoreSecured;
import net.techreadiness.service.common.ValidationError;
import net.techreadiness.service.exception.ServiceException;
import net.techreadiness.service.exception.ValidationServiceException;
import net.techreadiness.service.object.User;
import net.techreadiness.ui.action.task.youraccount.YourAccountTaskFlowAction;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.dao.DataIntegrityViolationException;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.Preparable;
@Results({ @Result(name = Action.SUCCESS, type = "redirect", location = "/task/youraccount/update/edit"),
@Result(name = Action.ERROR, type = "lastAction", params = { "actionName", "edit" }) })
public class SaveAction extends YourAccountTaskFlowAction implements Preparable {
private static final long serialVersionUID = 1L;
private User user;
@Override
@CoreSecured({ CORE_CUSTOMER_USER_UPDATE })
public String execute() {
User db = userService.getByUsername(getServiceContext(), getServiceContext().getUserName());
db.setFirstName(user.getFirstName());
db.setLastName(user.getLastName());
db.setEmail(user.getEmail());
try {
db = userService.update(getServiceContext(), db);
getServiceContext().getUser().setFirstName(db.getFirstName());
getServiceContext().getUser().setLastName(db.getLastName());
} catch (ValidationServiceException e) {
List<ValidationError> errors = e.getFaultInfo().getAttributeErrors();
for (ValidationError validationError : errors) {
addFieldError("user." + validationError.getFieldName(), validationError.getOnlineMessage());
}
} catch (ServiceException se) {
if (se.getCause() instanceof DataIntegrityViolationException) {
addFieldError("user.username", "Duplicated username");
} else {
addFieldError("user.username", "Problem updating");
}
}
if (hasErrors()) {
return ERROR;
}
return SUCCESS;
}
@Override
public void prepare() throws Exception {
user = new User();
}
public User getUser() {
return user;
}
}