package org.ebayopensource.turmeric.tools.codegen;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XmlUtility {
public static Document getXmlDoc(String xmlFile) throws ParserConfigurationException, SAXException, IOException{
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setIgnoringComments(true);
domFactory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new File(xmlFile));
return doc;
}
public static void addElementToXml(String xmlFile,String nodeToAdd,String nodeContent) throws ParserConfigurationException, SAXException, IOException, TransformerException{
Document doc = getXmlDoc(xmlFile);
NodeList nodes = doc.getChildNodes();
Node node = doc.createElement(nodeToAdd);
node.setNodeValue(nodeContent);
nodes.item(0).appendChild(node);
saveXml(doc,xmlFile);
}
public static void removeElementFromXml(String xmlFile,String nodeName) throws ParserConfigurationException, SAXException, IOException, TransformerException{
Document doc = getXmlDoc(xmlFile);
NodeList nodes = doc.getChildNodes();
NodeList childNodes = nodes.item(0).getChildNodes();
for(int i=0;i < childNodes.getLength();i++){
if(childNodes.item(i).getNodeName().equals(nodeName)){
nodes.item(0).removeChild(childNodes.item(i));
}
}
saveXml(doc,xmlFile);
}
public static void saveXml(Document modDoc,String path) throws TransformerException, IOException{
Writer writer =null;
try{
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource(modDoc);
writer = getFileWriter(path);
Result dest = new StreamResult(writer);
aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
aTransformer.setOutputProperty(OutputKeys.METHOD, "xml");
aTransformer.transform(src, dest);
} catch(TransformerException e){
throw e;
}finally{
writer.close();
}
}
public static FileWriter getFileWriter(String filePath){
File xmlFile = new File(filePath);
FileWriter writer =null;
try {
writer = new FileWriter(xmlFile);
} catch (IOException e) {
}
return writer;
}
}