package org.openstack.atlas.api.helpers; import java.util.ArrayList; import org.apache.http.HttpHeaders; import org.openstack.atlas.api.faults.HttpResponseBuilder; import org.openstack.atlas.docs.loadbalancers.api.v1.faults.BadRequest; import java.util.List; import org.openstack.atlas.docs.loadbalancers.api.v1.Operationsuccess; import org.openstack.atlas.docs.loadbalancers.api.v1.faults.GeneralFault; import org.openstack.atlas.docs.loadbalancers.api.v1.faults.LbaasFault; import org.openstack.atlas.service.domain.operations.OperationResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import static org.openstack.atlas.api.filters.helpers.StringUtilities.getExtendedStackTrace; public class ResponseFactory { private static final String VFAIL = "Validation Failure"; private static final Log LOG = LogFactory.getLog(ResponseFactory.class); public static Response getSuccessfulResponse(String message) { return getSuccessResponse(message, 200); } public static Response getResponseWithStatus(Response.Status status, String message) { LbaasFault lbaasFault = new GeneralFault(); lbaasFault.setCode(status.getStatusCode()); lbaasFault.setMessage(message); return Response.status(status).entity(lbaasFault).build(); } public static Response getResponseWithStatus(int status, String message) { LbaasFault lbaasFault = new GeneralFault(); lbaasFault.setCode(status); lbaasFault.setMessage(message); return Response.status(status).entity(lbaasFault).build(); } public static Response getResponseWithStatus(int status, String message, String details) { LbaasFault lbaasFault = new GeneralFault(); lbaasFault.setCode(status); lbaasFault.setMessage(message); lbaasFault.setDetails(details); return Response.status(status).entity(lbaasFault).build(); } public static Response getResponseWithStatus(Response.Status status, String message, String details) { LbaasFault lbaasFault = new GeneralFault(); lbaasFault.setCode(status.getStatusCode()); lbaasFault.setMessage(message); lbaasFault.setDetails(details); return Response.status(status).entity(lbaasFault).build(); } public static Response getSuccessResponse(String msg, int status) { Operationsuccess opResp = new Operationsuccess(); opResp.setMessage(msg); opResp.setStatus(status); Response resp = Response.status(status).entity(opResp).build(); return resp; } public static Response getErrorResponse(Exception e, String message, String detail) { LbaasFault lbaasFault = ResponseMapper.getFault(e, message, detail); Integer code = ResponseMapper.getStatus(e); lbaasFault.setCode(code); if (code == 500) { LOG.debug(String.format("Exception Caught: %s", getExtendedStackTrace(e))); } if (code == 503){ String seconds = "300"; return Response.status(code).entity(lbaasFault).header(HttpHeaders.RETRY_AFTER, seconds).build(); } return Response.status(code).entity(lbaasFault).build(); } public static Response getErrorResponse(OperationResponse operationResponse) { if (!operationResponse.isExecutedOkay()) { LbaasFault lbaasFault = ResponseMapper.getFault(operationResponse.getErrorReason(), operationResponse.getMessage(), null); Integer code = ResponseMapper.getStatus(operationResponse); lbaasFault.setCode(code); return Response.status(code).entity(lbaasFault).build(); } else { throw new RuntimeException("Error no Error found yet getErrorResponse called"); } } public static Response accessDenied() { Response resp = ResponseFactory.getResponseWithStatus(Status.FORBIDDEN, "Access Denied"); return resp; } public static Response getValidationFaultResponse(String errorStr) { List<String> errorStrs = new ArrayList<String>(); errorStrs.add(errorStr); return getValidationFaultResponse(errorStrs); } public static Response getValidationFaultResponse(List<String> errorStrs) { BadRequest badreq; int status = 400; badreq = HttpResponseBuilder.buildBadRequestResponse(VFAIL, errorStrs); Response resp = Response.status(status).entity(badreq).build(); return resp; } }