package com.ausregistry.jtoolkit2.se;
import javax.xml.xpath.XPathExpressionException;
import com.ausregistry.jtoolkit2.se.app.DomainInfoApplicationResponseExtension;
import com.ausregistry.jtoolkit2.se.idn.ietf.DomainInfoIetfIdnResponseExtension;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import com.ausregistry.jtoolkit2.se.generic.DomainInfoKVResponseExtension;
import com.ausregistry.jtoolkit2.se.idn.DomainInfoIdnResponseExtension;
import com.ausregistry.jtoolkit2.se.rgp.DomainInfoRgpResponseExtension;
import com.ausregistry.jtoolkit2.se.secdns.SecDnsDomainInfoResponseExtension;
import com.ausregistry.jtoolkit2.xml.XMLDocument;
/**
* Use this to access poll response information, as provided in an EPP poll
* response compliant with RFC5730. Such a service element is sent by an EPP
* server in response to a poll service element. If in response to a poll
* request, the getResData, getContactTransferResponse or
* getDomainTransferResponse methods may return object-specific information,
* which is in addition to any message queue data potentially available via the
* {@code getMessage} and related methods in the {@link
* com.ausregistry.jtoolkit2.se.Response} class.
*
* @see com.ausregistry.jtoolkit2.se.PollCommand
* @see com.ausregistry.jtoolkit2.se.PollRequestCommand
* @see com.ausregistry.jtoolkit2.se.PollAckCommand
*/
public class PollResponse extends Response {
private static final long serialVersionUID = 8823883186209520812L;
private static final String RES_DATA_EXPR = RESPONSE_EXPR + "/e:resData";
private static final String PAN_DATA = "panData";
private static final String TRN_DATA = "trnData";
private static final String INF_DATA = "infData";
/// We can't serialize the resData element.
private transient Element resData;
private DomainTransferResponse domTrnResponse;
private ContactTransferResponse conTrnResponse;
private DomainNotificationResponse domNtfnResponse;
private ContactNotificationResponse conNtfnResponse;
private DomainInfoResponse domInfoResponse;
private ContactInfoResponse conInfoResponse;
private HostInfoResponse hostInfoResponse;
private Response resDataResponse = null;
private DomainInfoIdnResponseExtension domainInfoIdnResponseExtension;
private DomainInfoIetfIdnResponseExtension domainInfoIetfIdnResponseExtension;
private SecDnsDomainInfoResponseExtension secDnsDomainInfoResponseExtension;
private DomainVariantResponseExtensionV1_1 variantResponseExtension1_1;
private DomainInfoRgpResponseExtension rgpDomainInfoResponseExtension;
private DomainInfoKVResponseExtension kvDomainInfoResponseExtension;
private DomainInfoApplicationResponseExtension domainInfoApplicationResponseExtension;
public PollResponse() {
}
public Element getResData() {
return resData;
}
public ContactTransferResponse getContactTransferResponse() {
return conTrnResponse;
}
public DomainTransferResponse getDomainTransferResponse() {
return domTrnResponse;
}
public ContactNotificationResponse getContactNotificationResponse() {
return conNtfnResponse;
}
public DomainNotificationResponse getDomainNotificationResponse() {
return domNtfnResponse;
}
public ContactInfoResponse getContactInfoResponse() {
return conInfoResponse;
}
public DomainInfoResponse getDomainInfoResponse() {
return domInfoResponse;
}
public HostInfoResponse getHostInfoResponse() {
return hostInfoResponse;
}
@Override
public void fromXML(XMLDocument xmlDoc) {
debugLogger.finest("enter");
super.fromXML(xmlDoc);
if (!resultArray[0].succeeded()) {
return;
}
try {
Node resDataNode = xmlDoc.getElement(RES_DATA_EXPR);
if (resDataNode != null && resDataNode instanceof Element) {
resData = (Element) resDataNode;
}
if (resData == null) {
debugLogger.finest("exit");
return;
}
Node childNode = resData.getFirstChild();
if (childNode == null) {
debugLogger.finest("exit");
return;
}
String childName = childNode.getLocalName();
if (childNode.getNamespaceURI().equals(
StandardObjectType.DOMAIN.getURI())) {
if (childName.equals(PAN_DATA)) {
domNtfnResponse = new DomainNotificationResponse();
domNtfnResponse.fromXML(xmlDoc);
resDataResponse = domNtfnResponse;
} else if (childName.equals(TRN_DATA)) {
domTrnResponse = new DomainTransferResponse();
domTrnResponse.fromXML(xmlDoc);
resDataResponse = domTrnResponse;
} else if (childName.equals(INF_DATA)) {
domInfoResponse = new DomainInfoResponse();
initialiseExtensions();
domInfoResponse.fromXML(xmlDoc);
resDataResponse = domInfoResponse;
}
} else if (childNode.getNamespaceURI().equals(
StandardObjectType.CONTACT.getURI())) {
if (childName.equals(PAN_DATA)) {
conNtfnResponse = new ContactNotificationResponse();
conNtfnResponse.fromXML(xmlDoc);
resDataResponse = conNtfnResponse;
} else if (childName.equals(TRN_DATA)) {
conTrnResponse = new ContactTransferResponse();
conTrnResponse.fromXML(xmlDoc);
resDataResponse = conTrnResponse;
} else if (childName.equals(INF_DATA)) {
conInfoResponse = new ContactInfoResponse();
conInfoResponse.fromXML(xmlDoc);
resDataResponse = conInfoResponse;
}
} else if (childNode.getNamespaceURI().equals(StandardObjectType.HOST.getURI())) {
if (childName.equals(INF_DATA)) {
hostInfoResponse = new HostInfoResponse();
hostInfoResponse.fromXML(xmlDoc);
resDataResponse = hostInfoResponse;
}
}
} catch (XPathExpressionException xpee) {
maintLogger.warning(xpee.getMessage());
}
debugLogger.finest("exit");
}
private void initialiseExtensions() {
domainInfoIdnResponseExtension = new DomainInfoIdnResponseExtension();
domainInfoIetfIdnResponseExtension = new DomainInfoIetfIdnResponseExtension();
secDnsDomainInfoResponseExtension = new SecDnsDomainInfoResponseExtension();
variantResponseExtension1_1 = new DomainVariantResponseExtensionV1_1(ResponseExtension.INFO);
rgpDomainInfoResponseExtension = new DomainInfoRgpResponseExtension(ResponseExtension.INFO);
kvDomainInfoResponseExtension = new DomainInfoKVResponseExtension();
domainInfoApplicationResponseExtension = new DomainInfoApplicationResponseExtension(ResponseExtension.INFO);
domInfoResponse.registerExtension(domainInfoIdnResponseExtension);
domInfoResponse.registerExtension(domainInfoIetfIdnResponseExtension);
domInfoResponse.registerExtension(secDnsDomainInfoResponseExtension);
domInfoResponse.registerExtension(variantResponseExtension1_1);
domInfoResponse.registerExtension(rgpDomainInfoResponseExtension);
domInfoResponse.registerExtension(kvDomainInfoResponseExtension);
domInfoResponse.registerExtension(domainInfoApplicationResponseExtension);
}
private boolean isResDataAvailable() {
return resDataResponse != null;
}
@Override
public String toString() {
if (isResDataAvailable()) {
return resDataResponse.toString();
} else {
return super.toString();
}
}
public DomainInfoIdnResponseExtension getIdnDomainInfoResponseExtension() {
return domainInfoIdnResponseExtension;
}
public SecDnsDomainInfoResponseExtension getSecDnsDomainInfoResponseExtension() {
return secDnsDomainInfoResponseExtension;
}
public DomainVariantResponseExtensionV1_1 getVariantDomainInfoResponseExtensionV1_1() {
return variantResponseExtension1_1;
}
public DomainInfoRgpResponseExtension getRgpDomainInfoResponseExtension() {
return rgpDomainInfoResponseExtension;
}
public DomainInfoKVResponseExtension getKvDomainInfoResponseExtension() {
return kvDomainInfoResponseExtension;
}
public DomainInfoApplicationResponseExtension getDomainInfoApplicationResponseExtension() {
return domainInfoApplicationResponseExtension;
}
}