package com.ausregistry.jtoolkit2.se.rgp;
import java.util.GregorianCalendar;
import com.ausregistry.jtoolkit2.EPPDateFormatter;
import com.ausregistry.jtoolkit2.ErrorPkg;
import com.ausregistry.jtoolkit2.se.ExtendedObjectType;
import com.ausregistry.jtoolkit2.se.StandardObjectType;
import com.ausregistry.jtoolkit2.se.UpdateCommand;
import org.w3c.dom.Element;
/**
* <p>Representation of the EPP Domain Update command with the Domain Restore Report aspect of the Registry Grace Period
* extension.</p>
*
* <p>Use this to post a Domain Restoration Report for restoring a domain from a "pending restore" RGP state
* as part of an EPP Domain Update command compliant with RFC5730, RFC5731 and RFC3915. The response expected
* from a server should be handled by a Domain Restore Response</p>
*
* @see DomainRestoreResponse
* @see <a href="http://tools.ietf.org/html/rfc3915">Domain Registry Grace Period Mapping for the
* Extensible Provisioning Protocol (EPP)</a>
*/
public class DomainRestoreReportCommand extends UpdateCommand {
private static final long serialVersionUID = 2409916920503111390L;
/**
* <p>Constructor allowing all possible fields for a domain restore report command.</p>
* @param name Required.
* @param preData Required.
* @param postData Required.
* @param delTime Required.
* @param resTime Required.
* @param resReason Required.
* @param statement Required.
* @param secondStatement Optional.
* @param other Optional.
* @throws IllegalArgumentException if {@code name}, {@code preData}, {@code postData}, {@code delTime},
* {@code resTime}, {@code resReason} or {@code statement} is {@code null}.
*/
public DomainRestoreReportCommand(String name, String preData,
String postData, GregorianCalendar delTime,
GregorianCalendar resTime, ReportTextElement resReason,
ReportTextElement statement, ReportTextElement secondStatement,
String other) {
super(StandardObjectType.DOMAIN, name);
if (name == null || preData == null || postData == null || delTime == null
|| resTime == null || resReason == null || statement == null) {
throw new IllegalArgumentException(ErrorPkg.getMessage(
"se.domain.restore.report.missing_arg"));
}
xmlWriter.appendChild(objElement, "chg");
extension = xmlWriter.appendChild(command, "extension");
final Element updateElement = xmlWriter.appendChild(extension,
"update", ExtendedObjectType.RESTORE.getURI());
Element restoreElement = xmlWriter.appendChild(updateElement, "restore", "op", "report");
Element reportElement = xmlWriter.appendChild(restoreElement, "report");
xmlWriter.appendChild(reportElement, "preData").setTextContent(preData);
xmlWriter.appendChild(reportElement, "postData").setTextContent(postData);
xmlWriter.appendChild(reportElement, "delTime").setTextContent(EPPDateFormatter.toXSDateTime(delTime));
xmlWriter.appendChild(reportElement, "resTime").setTextContent(EPPDateFormatter.toXSDateTime(resTime));
appendReportTextElement(resReason, reportElement, "resReason");
appendReportTextElement(statement, reportElement, "statement");
if (secondStatement != null) {
appendReportTextElement(secondStatement, reportElement, "statement");
}
if (other != null) {
xmlWriter.appendChild(reportElement, "other").setTextContent(other);
}
}
private void appendReportTextElement(ReportTextElement reportTextElement,
Element xmlElement,
String xmlElementName) {
if (reportTextElement.getLanguage() != null) {
xmlWriter.appendChild(xmlElement, xmlElementName, "lang", reportTextElement.getLanguage()).setTextContent(
reportTextElement.getReportElement());
} else {
xmlWriter.appendChild(xmlElement, xmlElementName).setTextContent(reportTextElement.getReportElement());
}
}
}