package com.ausregistry.jtoolkit2.se;
import javax.xml.xpath.XPathExpressionException;
import java.util.ArrayList;
import com.ausregistry.jtoolkit2.xml.XMLDocument;
/**
* <p>Extension for the EPP Domain Create and Domain Info response, representing the Variant Info
* aspect of the Domain Name Variant extension (v1.0).</p>
*
* <p>Use this to access a list of the activated variants for a domain as provided in an EPP Domain Info or
* Domain Create response compliant with RFC5730 and RFC5731. Such a service element is sent by a compliant
* EPP server in response to a valid Domain Info or Domain Create command with the Domain Info Variant
* Command 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 com.ausregistry.jtoolkit2.se.variant.DomainUpdateVariantCommandExtension
*/
public final class DomainVariantResponseExtension extends
ResponseExtension {
private static final long serialVersionUID = -2441248857298156911L;
private static final String VARIANT_PREFIX = ExtendedObjectType.VARIANT.getName();
private static final String VARIANT_LIST_EXPR = ResponseExtension.EXTENSION_EXPR
+ "/"
+ VARIANT_PREFIX
+ ":RESPONSE_TYPE/"
+ VARIANT_PREFIX
+ ":variant";
private static final String VARIANT_COUNT_EXPR = "count("
+ VARIANT_LIST_EXPR + ")";
private static final String VARIANT_IND_EXPR = VARIANT_LIST_EXPR + "[IDX]";
private static final String VARIANT_USER_FORM_EXPR = "/@userForm";
private ArrayList<IdnaDomainVariant> variants;
private String responseType;
private boolean initialised;
public DomainVariantResponseExtension(String responseType) {
this.responseType = responseType;
}
/**
* @see ResponseExtension#fromXML(com.ausregistry.jtoolkit2.xml.XMLDocument)
*/
public void fromXML(final XMLDocument xmlDoc)
throws XPathExpressionException {
variants = null;
final int variantCount = xmlDoc.getNodeCount(replaceResponseType(
VARIANT_COUNT_EXPR, responseType));
final String indexExpression = replaceResponseType(VARIANT_IND_EXPR, responseType);
variants = new ArrayList<IdnaDomainVariant>();
for (int i = 0; i < variantCount; i++) {
final String query = ReceiveSE.replaceIndex(indexExpression, i + 1);
final String domainName = xmlDoc.getNodeValue(query);
final String userForm = xmlDoc.getNodeValue(query + VARIANT_USER_FORM_EXPR);
variants.add(new IdnaDomainVariant(domainName, userForm));
}
initialised = (variantCount > 0);
}
public ArrayList<IdnaDomainVariant> getVariants() {
return variants;
}
@Override
public boolean isInitialised() {
return initialised;
}
}