package com.ausregistry.jtoolkit2.se.launch; import static com.ausregistry.jtoolkit2.se.ExtendedObjectType.MARK; import javax.xml.xpath.XPathExpressionException; import com.ausregistry.jtoolkit2.se.ResponseExtension; import com.ausregistry.jtoolkit2.se.tmch.MarksList; import com.ausregistry.jtoolkit2.xml.XMLDocument; import org.w3c.dom.Element; /** * <p>Representation of the EPP Domain Info response for the Domain Name Launch extension.</p> * * <p>Use this to get information about an application. * Such a service element is sent by a compliant EPP server in response * to a valid Domain Info command with the Domain Name Launch extension.</p> * * <p>For flexibility, this implementation extracts the data from the response using XPath queries, the expressions * for which are defined statically.</p> * * @see DomainInfoLaunchResponseExtension * @see <a href="https://tools.ietf.org/html/draft-ietf-eppext-launchphase-07">Domain Name Launch * Mapping for the Extensible Provisioning Protocol (EPP)</a> */ public class DomainInfoLaunchResponseExtension extends ResponseExtension { private static final String LAUNCH_INF_DATA_EXPRESSION = EXTENSION_EXPR + "/launch:infData/"; private static final String CHKDATA_COUNT_EXPR = "count(" + LAUNCH_INF_DATA_EXPRESSION + "*)"; private static final String CHKDATA_PHASE_EXPR = LAUNCH_INF_DATA_EXPRESSION + "launch:phase"; private static final String CHKDATA_PHASE_EXISTS_EXPR = "count(" + LAUNCH_INF_DATA_EXPRESSION + "launch:phase)"; private static final String CHKDATA_PHASE_NAME_EXPR = "/@name"; private static final String CHKDATA_APPLICATION_ID_EXPR = LAUNCH_INF_DATA_EXPRESSION + "launch:applicationID/text()"; private static final String CHKDATA_APPLICATION_ID_EXISTS_EXPR = "count(" + LAUNCH_INF_DATA_EXPRESSION + "launch:applicationID)"; private static final String CHKDATA_STATUS_EXPR = LAUNCH_INF_DATA_EXPRESSION + "launch:status/@s"; private static final String CHKDATA_STATUS_NAME_EXPR = LAUNCH_INF_DATA_EXPRESSION + "launch:status/@name"; private static final String CHKDATA_STATUS_EXISTS_EXPR = "count(" + LAUNCH_INF_DATA_EXPRESSION + "launch:status)"; private static final String MARK_EXPR = LAUNCH_INF_DATA_EXPRESSION + MARK.getName() + ":mark"; private static final String MARK_STATUS_EXISTS_EXPR = "count(" + MARK_EXPR + ")"; private boolean isInitialised; private String phaseType; private String phaseName; private String applicationID; private String status; private String statusName; private MarksList marksList; /** * @param xmlDoc the XML to be processed */ @Override public final void fromXML(XMLDocument xmlDoc) throws XPathExpressionException { int elementCount = xmlDoc.getNodeCount(CHKDATA_COUNT_EXPR); if (xmlDoc.getNodeCount(CHKDATA_PHASE_EXISTS_EXPR) > 0) { processPhaseElement(xmlDoc); } if (xmlDoc.getNodeCount(CHKDATA_APPLICATION_ID_EXISTS_EXPR) > 0) { applicationID = xmlDoc.getNodeValue(CHKDATA_APPLICATION_ID_EXPR); } if (xmlDoc.getNodeCount(CHKDATA_STATUS_EXISTS_EXPR) > 0) { status = xmlDoc.getNodeValue(CHKDATA_STATUS_EXPR); statusName = xmlDoc.getNodeValue(CHKDATA_STATUS_NAME_EXPR); } if (xmlDoc.getNodeCount(MARK_STATUS_EXISTS_EXPR) > 0) { Element markElement = (Element) xmlDoc.getElement(MARK_EXPR); if (markElement != null) { marksList = new MarksList(); marksList.fromXML(new XMLDocument(markElement)); } } if (elementCount > 0) { isInitialised = true; } } @Override public boolean isInitialised() { return isInitialised; } /** * @return phaseType the phase in the original request */ public String getPhaseType() { return phaseType; } private void processPhaseElement(XMLDocument xmlDoc) throws XPathExpressionException { phaseType = xmlDoc.getNodeValue(CHKDATA_PHASE_EXPR); phaseName = xmlDoc.getNodeValue(CHKDATA_PHASE_EXPR + CHKDATA_PHASE_NAME_EXPR); } public String getApplicationID() { return applicationID; } public String getPhaseName() { return phaseName; } public String getStatus() { return status; } public String getStatusName() { return statusName; } public MarksList getMarksList() { return marksList; } }