Package io.fathom.cloud.dns.api.os.resources

Source Code of io.fathom.cloud.dns.api.os.resources.RecordsetsResource

package io.fathom.cloud.dns.api.os.resources;

import io.fathom.cloud.Clock;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.dns.DnsService;
import io.fathom.cloud.dns.model.DnsRecord;
import io.fathom.cloud.dns.model.DnsRecordset;
import io.fathom.cloud.dns.model.DnsZone;
import io.fathom.cloud.dns.services.DnsServiceImpl;
import io.fathom.cloud.openstack.client.dns.model.Record;
import io.fathom.cloud.openstack.client.dns.model.Recordset;
import io.fathom.cloud.openstack.client.dns.model.RecordsetList;
import io.fathom.cloud.openstack.client.dns.model.WrappedRecordset;
import io.fathom.cloud.protobuf.DnsModel.DnsRecordData;
import io.fathom.cloud.protobuf.DnsModel.DnsRecordsetData;

import javax.inject.Inject;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Lists;

@Path("/openstack/dns/{project}/v2/zones/{zoneid}/recordsets")
public class RecordsetsResource extends ZonesResourceBase {
    private static final Logger log = LoggerFactory.getLogger(RecordsetsResource.class);

    @Inject
    DnsServiceImpl dnsService;

    @PathParam("zoneid")
    Long zoneId;

    @GET
    public RecordsetList list() throws CloudException {
        return list(false);
    }

    RecordsetList list(boolean details) throws CloudException {
        RecordsetList recordsets = new RecordsetList();
        recordsets.recordsets = Lists.newArrayList();

        DnsZone domain = getZone();
        for (DnsService.Recordset record : dnsService.listRecordsets(getProject(), domain)) {
            recordsets.recordsets.add(toModel(domain, (DnsRecordset) record, true));
        }

        return recordsets;
    }

    @GET
    @Path("details")
    public RecordsetList listDetails() throws CloudException {
        return list(true);
    }

    @POST
    public WrappedRecordset createRecordset(WrappedRecordset request) throws CloudException {
        DnsZone zone = getZone();

        Recordset recordset = request.recordset;
        DnsRecordsetData.Builder b = DnsRecordsetData.newBuilder();
        b.setFqdn(recordset.name);
        b.setType(recordset.type);

        for (Record record : recordset.records) {
            DnsRecordData.Builder rb = b.addRecordBuilder();
            if (record.value != null) {
                rb.setTarget(record.value);
            }
            if (record.port != null) {
                rb.setPort(record.port);
            }
            if (record.priority != null) {
                rb.setPriority(record.priority);
            }
            if (record.weight != null) {
                rb.setWeight(record.weight);
            }
        }
        DnsRecordset created = dnsService.createRecordset(getProject(), zone, b);

        WrappedRecordset response = new WrappedRecordset();
        response.recordset = toModel(zone, created, true);
        return response;
    }

    @DELETE
    @Path("{id}")
    public void deleteRecordset(@PathParam("id") Long recordsetId) throws CloudException {
        DnsZone zone = getZone();

        dnsService.deleteRecordset(getProject(), zone, recordsetId);
    }

    @GET
    @Path("{id}")
    public WrappedRecordset read(@PathParam("id") Long recordsetId) throws CloudException {
        DnsZone zone = getZone();

        DnsService.Recordset record = dnsService.findRecordset(getProject(), zone, recordsetId);
        notFoundIfNull(record);

        WrappedRecordset response = new WrappedRecordset();
        response.recordset = toModel(zone, (DnsRecordset) record, true);

        return response;
    }

    private DnsZone getZone() throws CloudException {
        DnsZone domain = dnsService.findDomain(getProject(), zoneId);
        notFoundIfNull(domain);
        return domain;
    }

    static Recordset toModel(DnsZone domain, DnsRecordset recordset, boolean details) {
        Recordset model = new Recordset();

        // zone.id = domain.getData().getDomain();
        DnsRecordsetData data = recordset.getData();
        model.id = "" + data.getId();
        model.type = data.getType();
        model.zone_id = "" + domain.getData().getId();

        model.name = recordset.getFqdn();
        if (data.hasTtl()) {
            model.ttl = data.getTtl();
        }
        if (data.hasWeight()) {
            model.weight = data.getWeight();
        }
        model.status = "ACTIVE";
        model.version = 1L;

        if (data.hasState()) {
            model.created_at = Clock.toDate(data.getState().getCreatedAt());
            model.updated_at = Clock.toDate(data.getState().getUpdatedAt());
            model.deleted_at = Clock.toDate(data.getState().getDeletedAt());
        }

        if (details) {
            model.records = Lists.newArrayList();
            for (DnsRecord record : recordset.getRecords()) {
                model.records.add(toModel(record));
            }
        }

        return model;
    }

    static Record toModel(DnsRecord record) {
        DnsRecordData data = record.getData();

        Record model = new Record();
        if (data.hasTarget()) {
            model.value = data.getTarget();
        }
        if (data.hasWeight()) {
            model.weight = data.getWeight();
        }
        if (data.hasPort()) {
            model.port = data.getPort();
        }
        if (data.hasPriority()) {
            model.priority = data.getPriority();
        }
        return model;
    }

}
TOP

Related Classes of io.fathom.cloud.dns.api.os.resources.RecordsetsResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.