package net.techreadiness.customer.action.task.user.enable; import static net.techreadiness.security.CorePermissionCodes.CORE_CUSTOMER_USER_ENABLE; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.inject.Inject; import net.techreadiness.annotation.CoreSecured; import net.techreadiness.service.DataModificationStatus; import net.techreadiness.service.DataModificationStatus.ModificationState; import net.techreadiness.service.UserService; import net.techreadiness.service.common.ValidationError; import net.techreadiness.service.exception.ValidationServiceException; import net.techreadiness.service.object.User; import net.techreadiness.ui.action.task.user.UserTaskFlowAction; import org.apache.commons.lang3.StringUtils; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.util.Element; import com.opensymphony.xwork2.util.Key; @Results({ @Result(name = "success", type = "redirectAction", params = { "namespace", "/task/user/enable", "actionName", "edit" }), @Result(name = "invalid", type = "lastAction", params = { "actionName", "edit" }) }) public class SaveAction extends UserTaskFlowAction implements Preparable { private static final long serialVersionUID = 1L; @Inject private UserService userService; @Key(Long.class) @Element(User.class) private Map<Long, User> users; @Inject DataModificationStatus dataModificationStatus; @Override @CoreSecured({ CORE_CUSTOMER_USER_ENABLE }) public String execute() { for (Entry<Long, User> entry : users.entrySet()) { try { if (entry.getValue().getDisableDate() == null) { if (StringUtils.isNotEmpty(entry.getValue().getDisableReason())) { addFieldError("users[" + entry.getKey() + "]." + "disableReason", "Status of Disabled is required with Disable Reason."); } if (!hasErrors()) { userService.enableUser(getServiceContext(), entry.getKey()); } } else { if (StringUtils.isEmpty(entry.getValue().getDisableReason())) { addFieldError("users[" + entry.getKey() + "]." + "disableReason", "Disable Reason is required when Status is Disabled."); } if (!hasErrors()) { userService.disableUser(getServiceContext(), entry.getKey(), entry.getValue().getDisableDate(), entry.getValue().getDisableReason()); } } } catch (ValidationServiceException e) { List<ValidationError> errors = e.getFaultInfo().getAttributeErrors(); for (ValidationError validationError : errors) { addFieldError("users[" + entry.getKey() + "]." + validationError.getFieldName(), validationError.getOnlineMessage()); } } } if (hasErrors()) { dataModificationStatus.setModificationState(ModificationState.FAILURE); return "invalid"; } return SUCCESS; } @Override public void prepare() throws Exception { users = new HashMap<>(); } public Map<Long, User> getUsers() { return users; } }