/* * Created on May 19, 2005 */ package com.openedit.util; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.dom4j.util.PerThreadSingleton; import com.openedit.OpenEditException; import com.openedit.OpenEditRuntimeException; import com.openedit.config.XMLConfiguration; /** * @author cburkey * */ public class XmlUtil { protected PerThreadSingleton fieldReaderPool; protected XmlWriterPool fieldWriterPool; public Element getXml(File inFile, String inEncode ) { try { return getXml(new FileReader(inFile), inEncode); } catch (Exception ex) { throw new RuntimeException(inFile.toString(), ex); } } public Element getXml(InputStream inXmlReader, String inEncoding) { try { if( inEncoding == null) { inEncoding = "UTF-8"; } return getXml(new InputStreamReader(inXmlReader,inEncoding), inEncoding ); } catch (Exception ex) { throw new RuntimeException(ex); } } public Element getXml(Reader inXmlReader, String inEncode) { SAXReader reader = getReader(); try { reader.setEncoding(inEncode); Document document = reader.read(inXmlReader); Element root = document.getRootElement(); return root; } catch ( Exception ex) { throw new OpenEditRuntimeException(ex.getMessage(), ex); } finally { FileUtils.safeClose(inXmlReader); } } public void saveXml(Element inRoot, Writer inWriter, String inEncoding) { if( inRoot.getDocument() != null) { saveXml(inRoot.getDocument(), inWriter, inEncoding); return; } try { XMLWriter writer = getWriter(inEncoding); writer.setWriter(inWriter); writer.write(inRoot); } catch ( Exception ex) { throw new RuntimeException(ex.getMessage(), ex); } finally { FileUtils.safeClose(inWriter); } } public void saveXml(Document inRoot, Writer inWriter, String inEncoding) { try { XMLWriter writer = getWriter(inEncoding); writer.setWriter(inWriter); writer.write(inRoot); } catch ( Exception ex) { throw new RuntimeException(ex.getMessage(), ex); } finally { FileUtils.safeClose(inWriter); } } public void saveXmlConfiguration(XMLConfiguration inConfig, File inFile) { Document doc = DocumentHelper.createDocument(); Element root = doc.addElement(inConfig.getName()); inConfig.appendXml(inConfig,root); saveXml( doc,inFile); } /** * @param inStockQuoteDocument * @param inFile */ public void saveXml(Document inStockQuoteDocument, File inFile) { try { saveXml(inStockQuoteDocument, new FileWriter(inFile), "UTF-8"); } catch ( Exception ex ) { throw new RuntimeException(ex); } } public String xmlEscape(String inCode) { return URLUtilities.xmlEscape(inCode); } public SAXReader getReader() { return (SAXReader)getReaderPool().instance(); } public XMLWriter getWriter(String inEncoding) { return getWriterPool().instance(inEncoding); } public PerThreadSingleton getReaderPool() { if (fieldReaderPool == null) { fieldReaderPool = new PerThreadSingleton(); fieldReaderPool.setSingletonClassName(SAXReader.class.getName()); } return fieldReaderPool; } public XmlWriterPool getWriterPool() { if (fieldWriterPool == null) { fieldWriterPool = new XmlWriterPool(); } return fieldWriterPool; } public void saveXml(XMLConfiguration inConfig, Writer inOut, String inCharacterEncoding) { Document doc = DocumentHelper.createDocument(); Element root = doc.addElement(inConfig.getName()); inConfig.appendXml(inConfig,root); saveXml(root, inOut, inCharacterEncoding); } public void saveXml(Element inRoot, OutputStream inOutputStream, String inCharacterEncoding) { try { XMLWriter writer = getWriter(inCharacterEncoding); writer.setOutputStream(inOutputStream); if( inRoot.getDocument() != null ) { writer.write(inRoot.getDocument()); } else { writer.write(inRoot); } } catch ( Exception ex) { throw new OpenEditException(ex.getMessage(), ex); } finally { FileUtils.safeClose(inOutputStream); } } public Element getElementById(Element inElement, String inId) { if(inElement == null || inId == null) { return null; } for(Iterator i = inElement.elementIterator(); i.hasNext();) { Element e = (Element) i.next(); if(inId.equals(e.attributeValue("id"))) { return e; } } return null; } }