package com.ausregistry.jtoolkit2.se.variant;
import java.util.ArrayList;
import com.ausregistry.jtoolkit2.ErrorPkg;
import com.ausregistry.jtoolkit2.se.Command;
import com.ausregistry.jtoolkit2.se.CommandExtension;
import com.ausregistry.jtoolkit2.se.ExtendedObjectType;
import com.ausregistry.jtoolkit2.se.IdnaDomainVariant;
import com.ausregistry.jtoolkit2.xml.XMLWriter;
import org.w3c.dom.Element;
/**
* <p>Extension for the EPP Domain Update command, representing the Update Variants aspect of the
* Domain Name Variant extension (v1.0)</p>
*
* <p>Use this to add or remove variants for a domain as part of an EPP Domain Update
* command compliant with RFC5730 and RFC5731. The response expected from a server
* should be handled by a generic Response.</p>
*
* <p>This extension will throw an {@link IllegalArgumentException} if no variants
* are added or removed as part of the "Update Variants" operation.</p>
*
* @see com.ausregistry.jtoolkit2.se.DomainUpdateCommand
* @see com.ausregistry.jtoolkit2.se.Response
*/
public class DomainUpdateVariantCommandExtension implements CommandExtension {
private static final long serialVersionUID = -3032129437463439207L;
private final ArrayList<IdnaDomainVariant> addVariants = new ArrayList<IdnaDomainVariant>();
private final ArrayList<IdnaDomainVariant> remVariants = new ArrayList<IdnaDomainVariant>();
@Override
public void addToCommand(final Command command) {
final XMLWriter xmlWriter = command.getXmlWriter();
final Element extensionElement = command.getExtensionElement();
final Element updateElement =
xmlWriter.appendChild(extensionElement, "update",
ExtendedObjectType.VARIANT.getURI());
if (addVariants.size() == 0 && remVariants.size() == 0) {
throw new IllegalStateException("No variants found");
}
writeVariantsToXml(xmlWriter, updateElement, "add", addVariants);
writeVariantsToXml(xmlWriter, updateElement, "rem", remVariants);
}
/**
* @throws IllegalArgumentException if any variants in the list are missing their name or user form.
*/
public void addVariant(final IdnaDomainVariant... variant) {
addVariantsToList(variant, addVariants);
}
/**
* @throws IllegalArgumentException if any variants in the list are missing their name or user form.
*/
public void remVariant(final IdnaDomainVariant... variant) {
addVariantsToList(variant, remVariants);
}
private void addVariantsToList(final IdnaDomainVariant[] variantsToAdd,
final ArrayList<IdnaDomainVariant> variantList) {
for (final IdnaDomainVariant variant : variantsToAdd) {
if (variant == null) {
throw new IllegalArgumentException(
ErrorPkg.getMessage("se.domain.update.idna.variant.missing"));
}
if (variant.getName() == null) {
throw new IllegalArgumentException(
ErrorPkg.getMessage("se.domain.update.idna.variant.name.missing"));
}
if (variant.getUserForm() == null) {
throw new IllegalArgumentException(
ErrorPkg.getMessage("se.domain.update.idna.variant.userForm.missing"));
}
variantList.add(variant);
}
}
private void writeVariantsToXml(final XMLWriter xmlWriter, final Element updateElement,
final String updateType, final ArrayList<IdnaDomainVariant> variants) {
if (variants.size() > 0) {
final Element element = xmlWriter.appendChild(updateElement, updateType);
for (final IdnaDomainVariant variant : variants) {
xmlWriter.appendChild(element, "variant", variant.getName(), "userForm",
variant.getUserForm());
}
}
}
}