package com.ausregistry.jtoolkit2.se;
import com.ausregistry.jtoolkit2.xml.XMLDocument;
import javax.xml.xpath.XPathExpressionException;
/**
* Use this to access host object information as provided in an EPP host
* info response compliant with RFC5730 and RFC5732. Such a service element is
* sent by a compliant EPP server in response to a valid host info command,
* implemented by the HostInfoCommand class.
*
* @see com.ausregistry.jtoolkit2.se.HostInfoCommand
*/
public class HostInfoResponse extends InfoResponse {
private static final long serialVersionUID = 7217980955196329241L;
private static final String HOS_ROID_EXPR = exprReplace(ROID_EXPR);
private static final String HOS_CR_ID_EXPR = exprReplace(CR_ID_EXPR);
private static final String HOS_UP_ID_EXPR = exprReplace(UP_ID_EXPR);
private static final String HOS_CL_ID_EXPR = exprReplace(CL_ID_EXPR);
private static final String HOS_CR_DATE_EXPR = exprReplace(CR_DATE_EXPR);
private static final String HOS_UP_DATE_EXPR = exprReplace(UP_DATE_EXPR);
private static final String HOS_TR_DATE_EXPR = exprReplace(TR_DATE_EXPR);
private static final String HOS_STATUS_COUNT_EXPR = exprReplace(STATUS_COUNT_EXPR);
private static final String HOS_STATUS_EXPR = exprReplace(STATUS_EXPR);
private static final String HOS_INF_DATA_EXPR = exprReplace(INF_DATA_EXPR);
private static final String HOS_NAME_EXPR = HOS_INF_DATA_EXPR + "/host:name/text()";
private static final String HOS_ADDR_EXPR = HOS_INF_DATA_EXPR + "/host:addr[IDX]";
private static final String HOS_ADDR_COUNT_EXPR = "count(" + HOS_INF_DATA_EXPR + "/host:addr)";
private static final String HOS_ADDR_TXT_EXPR = "/text()";
private static final String HOS_ADDR_IP_EXPR = "/@ip";
private String name;
private InetAddress[] addresses;
public HostInfoResponse() {
super(StandardObjectType.HOST);
}
protected String roidExpr() {
return HOS_ROID_EXPR;
}
protected String crIDExpr() {
return HOS_CR_ID_EXPR;
}
protected String upIDExpr() {
return HOS_UP_ID_EXPR;
}
protected String clIDExpr() {
return HOS_CL_ID_EXPR;
}
protected String crDateExpr() {
return HOS_CR_DATE_EXPR;
}
protected String upDateExpr() {
return HOS_UP_DATE_EXPR;
}
protected String trDateExpr() {
return HOS_TR_DATE_EXPR;
}
protected String statusExpr() {
return HOS_STATUS_EXPR;
}
protected String statusCountExpr() {
return HOS_STATUS_COUNT_EXPR;
}
protected static String exprReplace(String expr) {
return expr.replaceAll(OBJ,
StandardObjectType.HOST.getName());
}
public String getName() {
return name;
}
public InetAddress[] getAddresses() {
return addresses;
}
@Override
public void fromXML(XMLDocument xmlDoc) {
debugLogger.finest("enter");
super.fromXML(xmlDoc);
if (!resultArray[0].succeeded()) {
return;
}
try {
name = xmlDoc.getNodeValue(HOS_NAME_EXPR);
int addrCount = xmlDoc.getNodeCount(HOS_ADDR_COUNT_EXPR);
addresses = new InetAddress[addrCount];
for (int i = 0; i < addrCount; i++) {
String qry = ReceiveSE.replaceIndex(HOS_ADDR_EXPR, i + 1);
String addr = xmlDoc.getNodeValue(qry + HOS_ADDR_TXT_EXPR);
String version = xmlDoc.getNodeValue(qry + HOS_ADDR_IP_EXPR);
addresses[i] = new InetAddress(IPVersion.value(version), addr);
}
} catch (XPathExpressionException xpee) {
maintLogger.warning(xpee.getMessage());
}
debugLogger.finest("exit");
}
}