package com.ausregistry.jtoolkit2.se.generic; import java.util.Map.Entry; import java.util.TreeMap; import org.w3c.dom.Element; import com.ausregistry.jtoolkit2.se.Command; import com.ausregistry.jtoolkit2.se.CommandExtension; import com.ausregistry.jtoolkit2.se.ExtendedObjectType; import com.ausregistry.jtoolkit2.xml.XMLWriter; /** * This class models the command elements as specified in the XML schema * definition urn:X-ar:params:xml:ns:kv-1.0. */ public final class DomainKVCommandExtension implements CommandExtension { private static final long serialVersionUID = -334068823995826478L; private final TreeMap<String, TreeMap<String, String>> kvLists; private final String commandType; /** * Creates a key-value domain extension for specified command type * * @param commandType * the type of command * * @see com.ausregistry.jtoolkit2.se.CommandExtension#CREATE * @see com.ausregistry.jtoolkit2.se.CommandExtension#UPDATE */ public DomainKVCommandExtension(final String commandType) { kvLists = new TreeMap<String, TreeMap<String, String>>(); this.commandType = commandType; } public void addItem(final String listName, final String key, final String value) { TreeMap<String, String> kvList = kvLists.get(listName); if (kvList == null) { kvList = new TreeMap<String, String>(); kvLists.put(listName, kvList); } kvList.put(key, value); } public void addToCommand(final Command command) { final XMLWriter xmlWriter = command.getXmlWriter(); final Element extensionElement = command.getExtensionElement(); final Element commandElement = createCommandElement(xmlWriter, extensionElement); createKVListElements(xmlWriter, commandElement); } private Element createCommandElement(final XMLWriter xmlWriter, final Element extensionElement) { final Element commandElement = xmlWriter.appendChild(extensionElement, commandType, ExtendedObjectType.KV.getURI()); commandElement .setAttribute("xsi:schemaLocation", ExtendedObjectType.KV.getSchemaLocation()); return commandElement; } private void createKVListElements(final XMLWriter xmlWriter, final Element commandElement) { for (final String kvListName : kvLists.keySet()) { final Element kvlistElement = xmlWriter.appendChild(commandElement, "kvlist", ExtendedObjectType.KV.getURI()); kvlistElement.setAttribute("name", kvListName); addItemsToList(xmlWriter, kvListName, kvlistElement); } } private void addItemsToList(final XMLWriter xmlWriter, final String kvListName, final Element kvlistElement) { Element element; for (final Entry<String, String> item : kvLists.get(kvListName).entrySet()) { element = xmlWriter.appendChild(kvlistElement, "item"); element.setAttribute("key", item.getKey()); element.setTextContent(item.getValue()); } } }