package se.unlogic.eagledns.zoneproviders.db.beans; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xbill.DNS.DClass; import org.xbill.DNS.Name; import org.xbill.DNS.Record; import org.xbill.DNS.TextParseException; import org.xbill.DNS.Type; import se.unlogic.standardutils.dao.annotations.DAOManaged; import se.unlogic.standardutils.dao.annotations.Key; import se.unlogic.standardutils.dao.annotations.ManyToOne; import se.unlogic.standardutils.dao.annotations.Table; import se.unlogic.standardutils.xml.Elementable; import se.unlogic.standardutils.xml.XMLElement; import se.unlogic.standardutils.xml.XMLGenerator; import java.io.IOException; @XMLElement @Table(name="records") public class DBRecord implements Elementable { @DAOManaged(autoGenerated = true) @Key @XMLElement private Integer recordID; @DAOManaged(columnName = "zoneID") @ManyToOne(remoteKeyField="zoneID") @XMLElement private DBZone zone; @DAOManaged @XMLElement private String name; @DAOManaged @XMLElement private String type; @DAOManaged @XMLElement private String dclass; @DAOManaged @XMLElement private String content; @DAOManaged @XMLElement private Long ttl; public DBRecord(){} public DBRecord(Record record, Name origin, long zoneTTL) { this.name = record.getName().relativize(origin).toString(); this.type = Type.string(record.getType()); this.dclass = DClass.string(record.getDClass()); this.content = record.rdataToString(); if(record.getTTL() == zoneTTL){ this.ttl = null; }else{ this.ttl = record.getTTL(); } } public Integer getRecordID() { return recordID; } public void setRecordID(Integer recordID) { this.recordID = recordID; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Long getTtl() { return ttl; } public void setTtl(Long ttl) { this.ttl = ttl; } public Element toXML(Document doc) { return XMLGenerator.toXML(this, doc); } public DBZone getZone() { return zone; } public void setZone(DBZone zone) { this.zone = zone; } public Record getRecord(long zoneTTL, Name origin) throws TextParseException, IOException { long ttl; if(this.ttl == null){ ttl = zoneTTL; }else{ ttl = this.ttl; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(this.content); String rdata = stringBuilder.toString(); Record record = Record.fromString(Name.fromString(this.name,origin), Type.value(type), DClass.value(dclass), ttl, rdata, origin); return record; } public String getDclass() { return dclass; } public void setDclass(String dclass) { this.dclass = dclass; } @Override public String toString() { if(zone != null){ return name + " (ID: " + zone.getZoneID() + ")"; }else{ return name; } } }