package org.openstack.atlas.api.mgmt.resources;
import org.openstack.atlas.service.domain.entities.LoadBalancer;
import org.openstack.atlas.service.domain.entities.Suspension;
import org.openstack.atlas.service.domain.management.operations.EsbRequest;
import org.openstack.atlas.service.domain.operations.Operation;
import org.openstack.atlas.api.faults.HttpResponseBuilder;
import org.openstack.atlas.api.helpers.ResponseFactory;
import org.openstack.atlas.api.mgmt.repository.ValidatorRepository;
import org.openstack.atlas.api.mgmt.resources.providers.ManagementDependencyProvider;
import org.openstack.atlas.api.validation.context.HttpRequestType;
import org.openstack.atlas.api.validation.results.ValidatorResult;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class LoadBalancerSuspensionResource extends ManagementDependencyProvider {
private int id;
private int loadBalancerId;
@GET
public Response LoadbalancerSuspensionResource() {
if (!isUserInRole("cp,ops,support")) {
return ResponseFactory.accessDenied();
}
Suspension domainSuspension;
org.openstack.atlas.docs.loadbalancers.api.management.v1.Suspension apiSuspension;
try {
domainSuspension = getLoadBalancerRepository().getSuspensionByLbIdAndAccountId(loadBalancerId);
org.openstack.atlas.docs.loadbalancers.api.management.v1.Suspension rsp = null;
if (domainSuspension.getId() != null) {
rsp = getDozerMapper().map(domainSuspension, org.openstack.atlas.docs.loadbalancers.api.management.v1.Suspension.class, "SIMPLE_SUSPENSION");
} else {
rsp = new org.openstack.atlas.docs.loadbalancers.api.management.v1.Suspension();
}
return Response.status(200).entity(rsp).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response createLoadBalancerSuspension(org.openstack.atlas.docs.loadbalancers.api.management.v1.Suspension lbsr) {
if (!isUserInRole("cp,ops,support")) {
return ResponseFactory.accessDenied();
}
ValidatorResult result = ValidatorRepository.getValidatorFor(org.openstack.atlas.docs.loadbalancers.api.management.v1.Suspension.class).validate(lbsr, HttpRequestType.POST);
if (!result.passedValidation()) {
return Response.status(400).entity(HttpResponseBuilder.buildBadRequestResponse("Validation fault", result.getValidationErrorMessages())).build();
}
try {
org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer apiLb = new org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer();
apiLb.setSuspension(lbsr);
LoadBalancer domainLb = getDozerMapper().map(apiLb, LoadBalancer.class);
domainLb.setId(loadBalancerId);
suspensionService.createSuspension(domainLb);
EsbRequest request = new EsbRequest();
request.setLoadBalancer(domainLb);
getManagementAsyncService().callAsyncLoadBalancingOperation(Operation.CREATE_SUSPENSION, request);
return Response.status(202).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@DELETE
public Response removeSuspension() {
if (!isUserInRole("cp,ops,support")) {
return ResponseFactory.accessDenied();
}
try {
getLoadBalancerRepository().getSuspensionByLbIdAndAccountId(loadBalancerId);
LoadBalancer loadBalancer = new LoadBalancer();
loadBalancer.setId(loadBalancerId);
suspensionService.deleteSuspension(loadBalancer);
//create requestObject
EsbRequest req = new EsbRequest();
req.setLoadBalancer(loadBalancer);
getManagementAsyncService().callAsyncLoadBalancingOperation(Operation.REMOVE_SUSPENSION, req);
return Response.status(Response.Status.ACCEPTED).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
public void setLoadBalancerId(int loadBalancerId) {
this.loadBalancerId = loadBalancerId;
}
public int getLoadBalancerId() {
return loadBalancerId;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
}