package com.venky.swf.integration; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import com.venky.core.string.StringUtil; import com.venky.xml.XMLDocument; import com.venky.xml.XMLElement; public class XML extends FormatHelper<XMLElement>{ XMLElement root = null; public XML(InputStream in){ this(XMLDocument.getDocumentFor(in).getDocumentRoot()); } public XML(XMLElement root){ this.root = root; } public XML(String rootName, boolean isPlural) { super(); //Plural or singular makes no diff to XML root = new XMLDocument(rootName).getDocumentRoot(); } @Override public XMLElement getRoot() { return root; } @Override public XMLElement createChildElement(String name) { String plural = StringUtil.pluralize(name); XMLElement pluralElement = null; if (root.getNodeName().equals(plural)){ pluralElement = root; }else { pluralElement = root.getChildElement(plural); if (pluralElement == null){ pluralElement = root.createChildElement(plural); } } return pluralElement.createChildElement(name); } @Override public List<XMLElement> getChildElements(String name){ String plural = StringUtil.pluralize(name); XMLElement pluralElement = null; if (root.getNodeName().equals(plural)){ pluralElement = root; }else { pluralElement = root.getChildElement(plural); if (pluralElement == null){ pluralElement = root.createChildElement(plural); } } List<XMLElement> ret = new ArrayList<XMLElement>(); Iterator<XMLElement> ei = pluralElement.getChildElements(name); while (ei.hasNext()){ ret.add(ei.next()); } return ret; } @Override public void setAttribute(String name, String value) { if (value != null){ root.setAttribute(name, value); } } @Override public XMLElement createElementAttribute(String name) { XMLElement element = getElementAttribute(name); if (element == null){ element = root.createChildElement(name); } return element; } public String toString(){ return root.toString(); } @Override public Set<String> getAttributes() { return root.getAttributes().keySet(); } @Override public String getAttribute(String name) { return root.getAttribute(name); } @Override public XMLElement getElementAttribute(String name) { return root.getChildElement(name); } }