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;
}
}
}