* @author Adrian Cole
*/
public class SerializeRRS implements Function<Object, String> {
@Override
public String apply(Object in) {
ResourceRecordSet rrs = ResourceRecordSet.class.cast(checkNotNull(in, "rrs"));
StringBuilder builder = new StringBuilder().append("<ResourceRecordSet>");
builder.append("<Name>").append(rrs.getName()).append("</Name>");
builder.append("<Type>").append(rrs.getType()).append("</Type>");
if (rrs instanceof RecordSubset) {
String id = RecordSubset.class.cast(rrs).getId();
builder.append("<SetIdentifier>").append(id).append("</SetIdentifier>");
}
if (rrs instanceof Weighted)
builder.append("<Weight>").append(Weighted.class.cast(rrs).getWeight()).append("</Weight>");
if (rrs instanceof Latency)
builder.append("<Region>").append(Latency.class.cast(rrs).getRegion()).append("</Region>");
if (rrs.getAliasTarget().isPresent()) {
builder.append("<AliasTarget>");
builder.append("<HostedZoneId>").append(rrs.getAliasTarget().get().getZoneId()).append("</HostedZoneId>");
builder.append("<DNSName>").append(rrs.getAliasTarget().get().getDNSName()).append("</DNSName>");
builder.append("</AliasTarget>");
} else {
// default ttl from the amazon console is 300
builder.append("<TTL>").append(rrs.getTTL().or(300)).append("</TTL>");
builder.append("<ResourceRecords>");
for (String record : rrs.getValues())
builder.append("<ResourceRecord>").append("<Value>").append(record).append("</Value>")
.append("</ResourceRecord>");
builder.append("</ResourceRecords>");
}
return builder.append("</ResourceRecordSet>").toString();