package net.techreadiness.customer.action.task.user.create; import static net.techreadiness.security.CorePermissionCodes.CORE_CUSTOMER_USER_CREATE; import java.util.List; import java.util.Map; 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 org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.mail.EmailException; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.opensymphony.xwork2.Action; @Results({ @Result(name = Action.SUCCESS, location = "/task/user/create/add", type = "redirect"), @Result(name = "invalid", type = "lastAction", params = { "fieldName", "userMap", "actionName", "add" }) }) public class SaveAction extends BaseUserAction { private static final String EMAIL = "email"; private static final String USERNAME = "username"; private static final long serialVersionUID = 1L; @Override @CoreSecured({ CORE_CUSTOMER_USER_CREATE }) public String execute() { try { checkEmailToUsername(userMap); User newUser = userService.createFromMapWithRoles(getServiceContext(), userMap, getRoleSelectionHandler() .getSelection(), getOrgSelectionHandler().getSelection()); getTaskFlowData().getUsers().add(newUser); userService.newAccountPassword(getServiceContext(), newUser); } catch (ValidationServiceException e) { List<ValidationError> errors = e.getFaultInfo().getAttributeErrors(); for (ValidationError validationError : errors) { if (validationError.getFieldName().equals("roleValidation") || validationError.getFieldName().equals("orgValidation")) { addFieldError(validationError.getFieldName(), validationError.getOnlineMessage()); } else { addFieldError("userMap." + validationError.getFieldName(), validationError.getOnlineMessage()); } } } catch (ServiceException e) { Throwable rootCause = ExceptionUtils.getRootCause(e); if (rootCause instanceof EmailException) { addActionError(e.getMessage()); } else { throw e; } } if (hasErrors()) { return "invalid"; } return SUCCESS; } private static void checkEmailToUsername(Map<String, String> userMap) { if (userMap.get(USERNAME) == null) { userMap.put(USERNAME, userMap.get(EMAIL)); } } }