package org.openstack.atlas.api.mgmt.resources;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.Tickets;
import org.openstack.atlas.service.domain.entities.LoadBalancer;
import org.openstack.atlas.service.domain.entities.Ticket;
import org.openstack.atlas.service.domain.management.operations.EsbRequest;
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.results.ValidatorResult;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.List;
import static org.openstack.atlas.api.validation.context.HttpRequestType.POST;
public class TicketsResource extends ManagementDependencyProvider {
private Integer loadBalancerId;
@GET
public Response retrieveTickets(@QueryParam("offset") Integer offset, @QueryParam("limit") Integer limit) {
if (!isUserInRole("cp,ops")) {
return ResponseFactory.accessDenied();
}
Tickets apiTickets = new Tickets();
try {
List<Ticket> tickets = loadBalancerRepository.getTickets(loadBalancerId, offset, limit);
for (Ticket ticket : tickets) {
org.openstack.atlas.docs.loadbalancers.api.management.v1.Ticket apiTicket = getDozerMapper().map(ticket, org.openstack.atlas.docs.loadbalancers.api.management.v1.Ticket.class);
apiTickets.getTickets().add(apiTicket);
}
return Response.status(200).entity(apiTickets).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response createTicket(org.openstack.atlas.docs.loadbalancers.api.management.v1.Ticket ticket) {
if (!isUserInRole("cp,ops")) {
return ResponseFactory.accessDenied();
}
ValidatorResult result = ValidatorRepository.getValidatorFor(org.openstack.atlas.docs.loadbalancers.api.management.v1.Ticket.class).validate(ticket, POST);
if (!result.passedValidation()) {
return Response.status(400).entity(HttpResponseBuilder.buildBadRequestResponse("Validation fault",
result.getValidationErrorMessages())).build();
}
try {
LoadBalancer domainLb = new LoadBalancer();
domainLb.setId(loadBalancerId);
domainLb.getTickets().add(dozerMapper.map(ticket, Ticket.class));
EsbRequest req = new EsbRequest();
req.setLoadBalancer(domainLb);
Ticket ticketCreated = ticketService.createTicket(domainLb);
org.openstack.atlas.docs.loadbalancers.api.management.v1.Ticket responseTicket = null;
if (ticketCreated != null){
responseTicket = dozerMapper.map(ticketCreated, org.openstack.atlas.docs.loadbalancers.api.management.v1.Ticket.class);
}
return Response.status(Response.Status.OK).entity(responseTicket).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
public void setLoadBalancerId(Integer id) {
this.loadBalancerId = id;
}
}