package org.openstack.atlas.api.mgmt.resources;
import org.openstack.atlas.api.helpers.ResponseFactory;
import org.openstack.atlas.api.mgmt.resources.providers.ManagementDependencyProvider;
import org.openstack.atlas.docs.loadbalancers.api.v1.AllowedDomain;
import org.openstack.atlas.docs.loadbalancers.api.v1.AllowedDomains;
import javax.ws.rs.*;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;
import org.openstack.atlas.api.resources.providers.CommonDependencyProvider;
import static javax.ws.rs.core.MediaType.*;
public class AllowedDomainsResource extends ManagementDependencyProvider {
private HttpHeaders requestHeaders;
@GET
@Produces({APPLICATION_XML, APPLICATION_JSON, APPLICATION_ATOM_XML})
public Response retireveAllowedDomains(@QueryParam("matches") String hostName) {
AllowedDomains rads = new AllowedDomains();
List<String> ads;
try {
if (hostName != null) { // Its life a filter after the fact
ads = new ArrayList<String>(allowedDomainsService.matches(hostName));
} else {
ads = new ArrayList(allowedDomainsService.getAllowedDomains());
}
for (String name : ads) {
AllowedDomain ad = new AllowedDomain();
ad.setName(name);
rads.getAllowedDomains().add(ad);
}
return Response.status(200).entity(rads).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@DELETE
@Produces({APPLICATION_XML, APPLICATION_JSON})
public Response deleteAllowedDomain(@QueryParam("name") String name) {
try {
boolean wasDeleted = allowedDomainsService.remove(name);
if (wasDeleted) {
return ResponseFactory.getSuccessResponse(String.format("Deleted domain%s", name), 200);
} else {
String msg = String.format("Can't delete domain %s its already gone", name);
return ResponseFactory.getResponseWithStatus(410, msg);
}
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@PUT
@Produces({APPLICATION_XML, APPLICATION_JSON})
public Response addAllowedDomain(AllowedDomain ad) {
String name = ad.getName();
try {
boolean wasAdded = allowedDomainsService.add(name);
if (wasAdded) {
return ResponseFactory.getSuccessResponse(String.format("Added domain %s", name), 200);
} else {
String msg = String.format("Not adding domain %s as it already exists", name);
return ResponseFactory.getResponseWithStatus(409, msg);
}
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
public void setRequestHeaders(HttpHeaders requestHeaders) {
this.requestHeaders = requestHeaders;
}
}