package io.fathom.cloud.dns.api.os.resources;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.dns.DnsService;
import io.fathom.cloud.dns.model.DnsZone;
import io.fathom.cloud.openstack.client.dns.model.WrappedZone;
import io.fathom.cloud.openstack.client.dns.model.Zone;
import io.fathom.cloud.openstack.client.dns.model.ZoneList;
import io.fathom.cloud.server.model.Project;
import io.fathom.cloud.state.DuplicateValueException;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
@Path("/openstack/dns/{project}/v2/zones")
public class ZoneResource extends ZonesResourceBase {
private static final Logger log = LoggerFactory.getLogger(ZoneResource.class);
@Inject
DnsService dnsService;
@GET
public ZoneList listZones() throws CloudException {
ZoneList zones = new ZoneList();
zones.zones = Lists.newArrayList();
for (DnsService.Zone domain : dnsService.listZones(getProject())) {
zones.zones.add(toModel((DnsZone) domain));
}
return zones;
}
@POST
public WrappedZone createZone(WrappedZone request) throws CloudException {
Project project = getProject();
Zone zone = request.zone;
DnsService.DnsZoneSpec zoneSpec = new DnsService.DnsZoneSpec();
zoneSpec.name = zone.name;
DnsService.Zone domain;
try {
domain = dnsService.createZone(project, zoneSpec);
} catch (DuplicateValueException e) {
throw new WebApplicationException(Status.CONFLICT);
}
WrappedZone response = new WrappedZone();
response.zone = toModel((DnsZone) domain);
return response;
}
private Zone toModel(DnsZone zone) {
Zone model = new Zone();
// zone.id = domain.getData().getDomain();
model.name = zone.getName();
model.project_id = "" + zone.getProjectId();
model.id = "" + zone.getId();
return model;
}
}