package com.ausregistry.jtoolkit2.se;
import com.ausregistry.jtoolkit2.xml.XMLDocument;
import javax.xml.xpath.XPathExpressionException;
import java.util.ArrayList;
/**
* Used to access domains as provided in an Domain Variant Info response
* compliant with the AusRegistry documents 'Variant Extension Domain Mapping
* for the Extensible Provisioning Protocol' and 'Variant Extension for the
* Extensible Provisioning Protocol'. Such a service element is sent by an EPP
* server that supports the variant-1.0 extension, in response to a valid
* Domain Variant Info command.
*
* @see com.ausregistry.jtoolkit2.se.DomainVariantInfoCommand
*/
public class DomainVariantInfoResponse extends DataResponse {
protected static final String VARIANT_PREFIX = ExtendedObjectType.VARIANT.getName();
protected static final String VARINFDATA_BASE_EXPR =
RES_DATA_EXPR + "/" + VARIANT_PREFIX + ":varInfData/" + VARIANT_PREFIX + ":variant";
protected static final String VARINFDATA_COUNT_EXPR = "count(" + VARINFDATA_BASE_EXPR + ")";
protected static final String VARINFDATA_IND_EXPR = VARINFDATA_BASE_EXPR + "[IDX]";
private static final long serialVersionUID = -6265618329673981603L;
private static final VariantInfoCommandType COMMAND_TYPE = new VariantInfoCommandType();
private static final String VARIANT_USER_FORM_EXPR = "/@userForm";
private ArrayList<IdnaDomainVariant> domains;
public DomainVariantInfoResponse() {
super(COMMAND_TYPE, ExtendedObjectType.VARIANT);
}
public ArrayList<IdnaDomainVariant> getDomains() {
return domains;
}
@Override
public void fromXML(final XMLDocument xmlDoc) {
super.fromXML(xmlDoc);
if (!resultArray[0].succeeded()) {
return;
}
domains = new ArrayList<IdnaDomainVariant>();
try {
int domainNameCount = xmlDoc.getNodeCount(VARINFDATA_COUNT_EXPR);
for (int i = 0; i < domainNameCount; i++) {
final String domainQuery = ReceiveSE.replaceIndex(VARINFDATA_IND_EXPR, i + 1);
final String domainName = xmlDoc.getNodeValue(domainQuery);
final String userForm = xmlDoc.getNodeValue(domainQuery + VARIANT_USER_FORM_EXPR);
domains.add(new IdnaDomainVariant(domainName, userForm));
}
} catch (final XPathExpressionException xpee) {
maintLogger.warning(xpee.getMessage());
}
}
}