package com.ausregistry.jtoolkit2.se.secdns;
import org.w3c.dom.Element;
import com.ausregistry.jtoolkit2.se.Command;
import com.ausregistry.jtoolkit2.se.CommandExtension;
import com.ausregistry.jtoolkit2.xml.XMLWriter;
/**
* Processes the <update> element as documented in RFC5910.
*/
public class SecDnsDomainUpdateCommandExtension implements CommandExtension {
private static final long serialVersionUID = -2441248857298156911L;
private boolean urgent;
private DSOrKeyType addData;
private RemType remData;
private ChgType chgData;
@Override
public void addToCommand(final Command command) {
final XMLWriter xmlWriter = command.getXmlWriter();
final Element extensionElement = command.getExtensionElement();
final Element updateElement = SecDNSXMLUtil.createElement(xmlWriter, extensionElement, "update");
if (urgent) {
updateElement.setAttribute("urgent", "true");
}
handleRemove(xmlWriter, updateElement);
handleAdd(xmlWriter, updateElement);
handleChange(xmlWriter, updateElement);
}
private void handleChange(final XMLWriter xmlWriter, final Element updateElement) {
if (chgData != null && chgData.getMaxSigLife() != null && chgData.getMaxSigLife().getMaxSigLife() > 0) {
final Element changeElement = SecDNSXMLUtil.createElement(xmlWriter, updateElement, "chg");
chgData.createXMLElement(xmlWriter, changeElement);
}
}
private void handleRemove(final XMLWriter xmlWriter, final Element updateElement) {
if (this.remData == null
|| ((remData.getDsDataList() == null || remData.getDsDataList().size() == 0)
&& (remData.getKeyDataList() == null || remData.getKeyDataList().size() == 0) && !remData
.isRemoveAll())) {
return;
}
final Element removeElement = SecDNSXMLUtil.createElement(xmlWriter, updateElement, "rem");
this.remData.createXMLElement(xmlWriter, removeElement);
}
private void handleAdd(final XMLWriter xmlWriter, final Element updateElement) {
if (this.addData == null
|| ((this.addData.getDsDataList() == null || this.addData.getDsDataList().size() == 0) && (this.addData
.getKeyDataList() == null || this.addData.getKeyDataList().size() == 0))) {
return;
}
final Element addElement = SecDNSXMLUtil.createElement(xmlWriter, updateElement, "add");
addData.createXMLElement(xmlWriter, addElement);
}
public boolean isUrgent() {
return urgent;
}
public void setUrgent(final boolean urgentArg) {
this.urgent = urgentArg;
}
public final ChgType getChgData() {
return chgData;
}
public final void setChgData(ChgType chgData) {
this.chgData = chgData;
}
public final DSOrKeyType getAddData() {
return addData;
}
public final void setAddData(DSOrKeyType addData) {
this.addData = addData;
}
public final RemType getRemData() {
return remData;
}
public final void setRemData(RemType remData) {
this.remData = remData;
}
}