package com.ausregistry.jtoolkit2.se;
import com.ausregistry.jtoolkit2.EPPDateFormatter;
import com.ausregistry.jtoolkit2.xml.XMLDocument;
import java.util.GregorianCalendar;
import javax.xml.xpath.XPathExpressionException;
/**
* Use this to access domain object information as provided in an EPP domain
* info response compliant with RFC5730 and RFC5731. Such a service element is
* sent by a compliant EPP server in response to a valid domain info command,
* implemented by the DomainInfoCommand class.
*
* @see com.ausregistry.jtoolkit2.se.DomainInfoCommand
*/
public class DomainInfoResponse extends InfoResponse {
protected static final String DOM_ROID_EXPR = DomainInfoResponse.exprReplace(ROID_EXPR);
protected static final String DOM_CR_ID_EXPR = DomainInfoResponse.exprReplace(CR_ID_EXPR);
protected static final String DOM_UP_ID_EXPR = DomainInfoResponse.exprReplace(UP_ID_EXPR);
protected static final String DOM_CL_ID_EXPR = DomainInfoResponse.exprReplace(CL_ID_EXPR);
protected static final String DOM_CR_DATE_EXPR = DomainInfoResponse.exprReplace(CR_DATE_EXPR);
protected static final String DOM_UP_DATE_EXPR = DomainInfoResponse.exprReplace(UP_DATE_EXPR);
protected static final String DOM_TR_DATE_EXPR = DomainInfoResponse.exprReplace(TR_DATE_EXPR);
protected static final String DOM_STATUS_COUNT_EXPR = DomainInfoResponse.exprReplace(STATUS_COUNT_EXPR);
protected static final String DOM_STATUS_EXPR = DomainInfoResponse.exprReplace(STATUS_EXPR);
protected static final String DOM_INF_DATA_EXPR = DomainInfoResponse.exprReplace(INF_DATA_EXPR);
protected static final String DOM_NAME_EXPR = DOM_INF_DATA_EXPR + "/domain:name/text()";
protected static final String DOM_PW_EXPR = DOM_INF_DATA_EXPR + "/domain:authInfo/domain:pw/text()";
protected static final String DOM_REGISTRANT_EXPR = DOM_INF_DATA_EXPR + "/domain:registrant/text()";
protected static final String DOM_EX_DATE_EXPR = DOM_INF_DATA_EXPR + "/domain:exDate/text()";
protected static final String DOM_NS_EXPR = DOM_INF_DATA_EXPR + "/domain:ns/domain:hostObj/text()";
protected static final String DOM_HOST_EXPR = DOM_INF_DATA_EXPR + "/domain:host/text()";
protected static final String DOM_CON_EXPR = DOM_INF_DATA_EXPR + "/domain:contact[@type='TYPE']/text()";
protected static final String DOM_CON_TECH_EXPR = DOM_CON_EXPR.replaceFirst("TYPE", "tech");
protected static final String DOM_CON_ADMIN_EXPR = DOM_CON_EXPR.replaceFirst("TYPE", "admin");
protected static final String DOM_CON_BILLING_EXPR = DOM_CON_EXPR.replaceFirst("TYPE", "billing");
private static final long serialVersionUID = -5948394715740177139L;
private String name, pw, registrantID;
private String[] techContacts, adminContacts, billingContacts;
private String[] delHosts, subHosts;
private GregorianCalendar exDate;
private String exDateStr;
public DomainInfoResponse() {
super(StandardObjectType.DOMAIN);
}
protected String roidExpr() {
return DOM_ROID_EXPR;
}
protected String crIDExpr() {
return DOM_CR_ID_EXPR;
}
protected String upIDExpr() {
return DOM_UP_ID_EXPR;
}
protected String clIDExpr() {
return DOM_CL_ID_EXPR;
}
protected String crDateExpr() {
return DOM_CR_DATE_EXPR;
}
protected String upDateExpr() {
return DOM_UP_DATE_EXPR;
}
protected String trDateExpr() {
return DOM_TR_DATE_EXPR;
}
protected String statusExpr() {
return DOM_STATUS_EXPR;
}
protected String statusCountExpr() {
return DOM_STATUS_COUNT_EXPR;
}
protected static String exprReplace(String expr) {
return expr.replaceAll(OBJ, "domain");
}
public String getName() {
return name;
}
public String getPW() {
return pw;
}
public GregorianCalendar getExpireDate() {
return exDate;
}
public String getRegistrantID() {
return registrantID;
}
public String[] getTechContacts() {
return techContacts;
}
public String[] getAdminContacts() {
return adminContacts;
}
public String[] getBillingContacts() {
return billingContacts;
}
public String[] getNameservers() {
return delHosts;
}
public String[] getSubordinateHosts() {
return subHosts;
}
@Override
public void fromXML(XMLDocument xmlDoc) {
super.fromXML(xmlDoc);
if (!resultArray[0].succeeded()) {
return;
}
try {
name = xmlDoc.getNodeValue(DOM_NAME_EXPR);
pw = xmlDoc.getNodeValue(DOM_PW_EXPR);
registrantID = xmlDoc.getNodeValue(DOM_REGISTRANT_EXPR);
exDateStr = xmlDoc.getNodeValue(DOM_EX_DATE_EXPR);
if (exDateStr != null) {
exDate = EPPDateFormatter.fromXSDateTime(exDateStr);
}
delHosts = xmlDoc.getNodeValues(DOM_NS_EXPR);
subHosts = xmlDoc.getNodeValues(DOM_HOST_EXPR);
techContacts = xmlDoc.getNodeValues(DOM_CON_TECH_EXPR);
adminContacts = xmlDoc.getNodeValues(DOM_CON_ADMIN_EXPR);
billingContacts = xmlDoc.getNodeValues(DOM_CON_BILLING_EXPR);
} catch (XPathExpressionException xpee) {
maintLogger.warning(xpee.getMessage());
}
}
@Override
public String toString() {
String retval = super.toString();
retval += "(name = " + name
+ ")(registrant-id = " + registrantID + ")";
if (exDateStr != null) {
retval += "(expiry-date = " + exDateStr + ")";
}
if (subHosts != null) {
retval += "(subordinate-hosts = " + arrayToString(subHosts, ",") + ")";
}
if (delHosts != null) {
retval += "(nameserver-hosts = " + arrayToString(delHosts, ",") + ")";
}
if (techContacts != null) {
retval += "(tech-contacts = " + arrayToString(techContacts, ",") + ")";
}
if (adminContacts != null) {
retval += "(admin-contacts = " + arrayToString(adminContacts, ",") + ")";
}
if (billingContacts != null) {
retval += "(billing-contacts = " + arrayToString(billingContacts, ",") + ")";
}
return retval;
}
}