Example usage for com.amazonaws.services.route53.model ChangeResourceRecordSetsResult setChangeInfo

List of usage examples for com.amazonaws.services.route53.model ChangeResourceRecordSetsResult setChangeInfo

Introduction

In this page you can find the example usage for com.amazonaws.services.route53.model ChangeResourceRecordSetsResult setChangeInfo.

Prototype


public void setChangeInfo(ChangeInfo changeInfo) 

Source Link

Document

A complex type that contains information about changes made to your hosted zone.

Usage

From source file:com.msi.dns53.client.DNS53Client.java

License:Apache License

public ChangeResourceRecordSetsResult changeResourceRecordSets(ChangeResourceRecordSetsRequest req)
        throws AmazonServiceException, AmazonClientException {
    Client c = Client.create();/*from  w w  w  .j a v a  2 s.  c  o m*/
    WebResource r = c.resource(this.serverURL);

    String entity = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
            + "<ChangeResourceRecordSetsRequest xmlns=\"https://route53.amazonaws.com/doc/2012-02-29/\">";
    if (req.getChangeBatch() != null) {
        entity += "<ChangeBatch>";
        if (req.getChangeBatch().getComment() != null) {
            entity += "<Comment>" + req.getChangeBatch().getComment() + "</Comment>";
        }
        List<Change> changes = req.getChangeBatch().getChanges();
        if (changes != null && changes.size() > 0) {
            entity += "<Changes>";
            for (Change change : changes) {
                entity += "<Change>";
                entity += "<Action>" + change.getAction() + "</Action>";
                if (change.getResourceRecordSet() != null) {
                    entity += "<ResourceRecordSet>";
                    entity += "<Name>" + change.getResourceRecordSet().getName() + "</Name>";
                    entity += "<Type>" + change.getResourceRecordSet().getType() + "</Type>";
                    entity += "<TTL>" + change.getResourceRecordSet().getTTL() + "</TTL>";
                    List<ResourceRecord> records = change.getResourceRecordSet().getResourceRecords();
                    if (records != null && records.size() > 0) {
                        entity += "<ResourceRecords>";
                        for (ResourceRecord record : records) {
                            entity += "<ResourceRecord><Value>" + record.getValue()
                                    + "</Value></ResourceRecord>";
                        }
                        entity += "</ResourceRecords>";
                    }
                    entity += "</ResourceRecordSet>";
                }
                entity += "</Change>";
            }
            entity += "</Changes>";
        }
        entity += "</ChangeBatch>";
    }
    entity += "</ChangeResourceRecordSetsRequest>";

    ClientResponse response = r.path(req.getHostedZoneId() + "/rrset")
            .header("X-Amzn-Authorization",
                    "AWS3 AWSAccessKeyId=" + this.accessKey + "," + "Algorithm=HmacSHA256,"
                            + "SignedHeaders=Host;X-Amz-Date," + "Signature=THISISANEXAMPLESIGNATURE=")
            .type(MediaType.APPLICATION_XML_TYPE).accept(MediaType.TEXT_XML).entity(entity)
            .post(ClientResponse.class);

    String resultXml = response.getEntity(String.class);
    if (response.getStatus() != 200) {
        exceptionMapper(response, resultXml);
    }

    ChangeResourceRecordSetsResponsePOJO interResult = null;
    try {
        StringReader reader = new StringReader(resultXml);
        JAXBContext context = JAXBContext.newInstance(ChangeResourceRecordSetsResponsePOJO.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        interResult = (ChangeResourceRecordSetsResponsePOJO) unmarshaller.unmarshal(reader);
    } catch (JAXBException e) {
        e.printStackTrace();
        return null;
    }
    if (interResult == null) {
        return null;
    }

    ChangeResourceRecordSetsResult result = new ChangeResourceRecordSetsResult();
    if (interResult.getChangeInfo() != null) {
        ChangeInfo ci = new ChangeInfo();
        ci.setComment(interResult.getChangeInfo().getComment());
        ci.setId(interResult.getChangeInfo().getId());
        ci.setStatus(interResult.getChangeInfo().getStatus());
        ci.setSubmittedAt(interResult.getChangeInfo().getSubmittedAt());
        result.setChangeInfo(ci);
    }

    return result;
}

From source file:com.msi.dns53.server.query.ChangeResourceRecordSets.java

License:Apache License

private ChangeResourceRecordSetsResult changeResourceRecordSets(Session s,
        ChangeResourceRecordSetsRequest request) throws ErrorResponse {
    Date submittedAt = new Date();
    ChangeResourceRecordSetsResult result = new ChangeResourceRecordSetsResult();
    AccessMySQL sqlaccess = AccessMySQL.getInstance();
    String tableName = sqlaccess.getTableName(request.getHostedZoneId(), this.getAccountId());
    if (tableName.equals("FAILED")) {
        throw DNS53Faults.NoSuchHostedZone(request.getHostedZoneId());
    }//  w w w  .  ja  v  a2 s . c o m
    String zoneName = sqlaccess.getZoneName(request.getHostedZoneId());
    //LinkedList<RRRequest> rrrs = request.getRRRequests(); 
    List<Change> changes = request.getChangeBatch().getChanges();
    //check if the ChangeBatch is valid
    for (Change tmp : changes) {
        String name = tmp.getResourceRecordSet().getName();
        String nameDot = name;
        if (name.charAt(name.length() - 1) != '.') {
            nameDot += ".";
        } else {
            name = name.substring(0, name.length() - 1);
        }
        long weight = -1;
        if (tmp.getResourceRecordSet().getWeight() != null) {
            weight = tmp.getResourceRecordSet().getWeight();
            if (weight < 0 || weight > 225) {
                throw DNS53Faults.InvalidArgument("Weight of a resource record must be between 0 and 255.");
            }
        }
        if (tmp.getResourceRecordSet().getType() == null) {
            throw DNS53Faults.MissingRequiredParameter(
                    "Type parameter is required for each resource record set change request.");
        }
        if (tmp.getResourceRecordSet().getTTL() == null) {
            throw DNS53Faults.MissingRequiredParameter(
                    "TTL parameter is required for each resource record set change request "
                            + "except for the change requests to modify alias resource record sets.");
        }
        if (tmp.getAction().equals("CREATE")) {
            for (ResourceRecord rr : tmp.getResourceRecordSet().getResourceRecords()) {
                boolean recordExists = sqlaccess.recordExists(s, request.getHostedZoneId(), nameDot,
                        tmp.getResourceRecordSet().getType(), rr.getValue());
                DNS53ResourceRecord newRecord = new DNS53ResourceRecord();
                newRecord.setZoneId(request.getHostedZoneId());
                newRecord.setZoneName(zoneName);
                newRecord.setName(nameDot);
                newRecord.setTtl(tmp.getResourceRecordSet().getTTL());
                newRecord.setRdata(rr.getValue());
                if (tmp.getResourceRecordSet().getWeight() != null) {
                    logger.debug("Request to create a weighted resource record set: "
                            + tmp.getResourceRecordSet().toString());
                    if (recordExists) {
                        if (sqlaccess.recordExists(s, request.getHostedZoneId(), nameDot,
                                tmp.getResourceRecordSet().getType(), rr.getValue())) {
                            throw DNS53Faults
                                    .InvalidChangeBatch("Tried to create a weighted resource record set, "
                                            + nameDot + " " + tmp.getResourceRecordSet().getType()
                                            + ", but it already exists.");
                        }
                    }
                    if (tmp.getResourceRecordSet().getSetIdentifier() == null) {
                        throw DNS53Faults.MissingRequiredParameter(
                                "SetIdentifier is required for weighted resource" + "record set.");
                    }
                    newRecord.setSid(tmp.getResourceRecordSet().getSetIdentifier());
                    if (!(tmp.getResourceRecordSet().getType().equals("A")
                            || tmp.getResourceRecordSet().getType().equals("AAAA")
                            || tmp.getResourceRecordSet().getType().equals("CNAME")
                            || tmp.getResourceRecordSet().getType().equals("TXT"))) {
                        throw DNS53Faults.InvalidArgument(
                                "Weighted resource record set must be A, AAAA, CNAME, or TXT type.");
                    }
                    newRecord.setRdtype(tmp.getResourceRecordSet().getType());
                    newRecord.setWeight(weight);
                    for (int i = 0; i < weight; ++i) {
                        sqlaccess.addResourceRecord(request.getHostedZoneId(), name,
                                tmp.getResourceRecordSet().getTTL(), tmp.getResourceRecordSet().getType(),
                                rr.getValue(), this.getAccountId());
                    }
                } else {
                    if (recordExists) {
                        throw DNS53Faults.InvalidChangeBatch("Tried to create resource record set, " + name
                                + " " + tmp.getResourceRecordSet().getType() + ", but it already exists.");
                    }
                    if (!DNS53Constants.RESOURCERECORDSETS_TYPES
                            .contains(tmp.getResourceRecordSet().getType())) {
                        throw DNS53Faults.InvalidArgument("Resource record type is not recognized.");
                    }
                    newRecord.setRdtype(tmp.getResourceRecordSet().getType());
                    sqlaccess.addResourceRecord(request.getHostedZoneId(), name,
                            tmp.getResourceRecordSet().getTTL(), tmp.getResourceRecordSet().getType(),
                            rr.getValue(), this.getAccountId());
                }
                s.save(newRecord);
            }
        } else if (tmp.getAction().equals("DELETE")) {
            for (ResourceRecord rr : tmp.getResourceRecordSet().getResourceRecords()) {
                boolean recordExists = sqlaccess.recordExists(s, request.getHostedZoneId(), nameDot,
                        tmp.getResourceRecordSet().getType(), rr.getValue());
                if (!recordExists) {
                    throw DNS53Faults.InvalidChangeBatch("Tried to delete resource record set " + name + " "
                            + tmp.getResourceRecordSet().getType() + ", but it was not found.");
                }
                List<DNS53ResourceRecord> recordList = ResourceRecordEntity.selectResourceRecords(s,
                        request.getHostedZoneId(), nameDot, rr.getValue(), tmp.getResourceRecordSet().getType(),
                        tmp.getResourceRecordSet().getSetIdentifier(), tmp.getResourceRecordSet().getTTL(),
                        weight);

                if (recordList == null || recordList.size() == 0) {
                    throw DNS53Faults.InvalidChangeBatch("Tried to delete resource record set " + name + " "
                            + tmp.getResourceRecordSet().getType() + ", but it was not found with "
                            + "weight = " + tmp.getResourceRecordSet().getWeight() + " and "
                            + "SetIdentifier = " + tmp.getResourceRecordSet().getSetIdentifier() + ".");
                }
                if (recordList.size() > 1) {
                    logger.debug(
                            "Too many results being returned for DELETE change request. Either duplicate entries exist, NS records are selected for deletion, or other issue. Throwing InternalError!");
                    throw DNS53Faults.InternalError();
                }
                DNS53ResourceRecord currentRecord = recordList.get(0);

                if (tmp.getResourceRecordSet().getWeight() != null) {
                    if (tmp.getResourceRecordSet().getSetIdentifier() == null) {
                        throw DNS53Faults.MissingRequiredParameter(
                                "SetIdentifier is required for weighted resource" + "record set.");
                    }
                    List<DNS53ResourceRecord> existing = sqlaccess.listResourceRecords(tableName,
                            tmp.getResourceRecordSet().getType(), name, rr.getValue());
                    logger.debug("Existing weight of the record resource set is " + existing.size()
                            + ". DELETE is requested" + " with weight, "
                            + tmp.getResourceRecordSet().getWeight());
                    if (tmp.getResourceRecordSet().getWeight() != Integer.valueOf(existing.size()).longValue()
                            || tmp.getResourceRecordSet().getWeight() != currentRecord.getWeight()) {
                        throw DNS53Faults.InvalidArgument(
                                "Weighted resource record set was found with matching name and value(s). "
                                        + "However, the value of weight is different. Existing resource record set has the weight of "
                                        + existing.size() + ".");
                    }
                } else {
                    if (tmp.getResourceRecordSet().getSetIdentifier() != null) {
                        throw DNS53Faults
                                .MissingRequiredParameter("SetIdentifier was received, however, weight was not "
                                        + "passed along. Both of these parameters are required for change request against weighted "
                                        + "resource record sets.");
                    }
                    if (currentRecord.getWeight() != -1) {
                        throw DNS53Faults.InvalidArgument(
                                "Weighted resource record set was found with matching name and value(s). "
                                        + "However, the request did not pass weight parameter.");
                    }
                }
                s.delete(currentRecord);
                sqlaccess.deleteResourceRecord(request.getHostedZoneId(), name,
                        tmp.getResourceRecordSet().getTTL(), tmp.getResourceRecordSet().getType(),
                        rr.getValue(), this.getAccountId());
            }
        }
    }
    String changeID = RequestHandler.writeChange(sqlaccess, "INSYNC", submittedAt.toString(), "RRSET", "RRSET");
    ChangeInfo ci = new ChangeInfo();
    ci.setId(changeID);
    ci.setStatus("INSYNC");
    ci.setSubmittedAt(submittedAt);
    result.setChangeInfo(ci);

    return result;
}