ingo@1115: /* ingo@1115: * Copyright (c) 2010 by Intevation GmbH ingo@1115: * ingo@1115: * This program is free software under the LGPL (>=v2.1) ingo@1115: * Read the file LGPL.txt coming with the software for details ingo@1115: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1115: */ ingo@1115: tim@71: package de.intevation.gnv.utils; tim@71: tim@79: import java.io.ByteArrayInputStream; tim@71: import java.io.IOException; tim@71: import java.io.InputStream; tim@75: import java.io.Serializable; tim@71: import java.io.StringWriter; tim@79: import java.io.UnsupportedEncodingException; tim@71: tim@71: import javax.xml.parsers.DocumentBuilder; tim@71: import javax.xml.parsers.DocumentBuilderFactory; tim@71: import javax.xml.parsers.ParserConfigurationException; tim@71: import javax.xml.transform.Transformer; tim@71: import javax.xml.transform.TransformerConfigurationException; tim@71: import javax.xml.transform.TransformerException; tim@71: import javax.xml.transform.TransformerFactory; tim@71: import javax.xml.transform.TransformerFactoryConfigurationError; tim@71: import javax.xml.transform.dom.DOMSource; tim@71: import javax.xml.transform.stream.StreamResult; tim@71: tim@71: import org.apache.log4j.Logger; tim@71: import org.w3c.dom.Document; tim@71: import org.w3c.dom.Element; tim@217: import org.w3c.dom.Node; tim@823: import org.xml.sax.SAXException; sascha@779: tim@823: import de.intevation.artifacts.ArtifactNamespaceContext; tim@71: tim@71: /** ingo@806: * This class provides some methods for creating and working with xml documents. ingo@806: * sascha@780: * @author Tim Englich sascha@778: * tim@71: */ tim@171: public class ArtifactXMLUtilities implements Serializable { tim@71: /** tim@79: * tim@79: */ tim@79: private static final long serialVersionUID = -6236340358303411758L; tim@79: tim@79: /** tim@71: * the logger, used to log exceptions and additonaly information tim@71: */ tim@171: private static Logger log = Logger tim@335: .getLogger(ArtifactXMLUtilities.class); tim@171: tim@76: public static final String XFORM_URL = "http://www.w3.org/2002/xforms"; tim@76: public static final String XFORM_PREFIX = "xform"; tim@171: tim@71: /** ingo@806: * Constructor.
ingo@806: * Note: It should not be necessary to create an object of this ingo@806: * class - which is a helper class. Call static methods instead. tim@71: */ tim@71: public ArtifactXMLUtilities() { tim@71: } tim@171: tim@71: /** ingo@806: * Creates an Element and returns it. sascha@807: * ingo@806: * @param document A document ingo@806: * @param name Name of a node. ingo@806: * @return an Element. tim@71: */ ingo@725: public static Element createArtifactElement(Document document, String name) { tim@171: Element node = document.createElementNS( tim@171: ArtifactNamespaceContext.NAMESPACE_URI, name); tim@71: node.setPrefix(ArtifactNamespaceContext.NAMESPACE_PREFIX); tim@71: return node; tim@71: } tim@171: ingo@806: ingo@806: /** ingo@806: * Turns an xml document into a string. ingo@806: * ingo@806: * @param document An xml document. ingo@806: * @return String representation of document. ingo@806: */ ingo@725: public static String writeDocument2String(Document document) { tim@71: try { tim@171: TransformerFactory transformerFactory = TransformerFactory tim@171: .newInstance(); tim@71: Transformer transformer = transformerFactory.newTransformer(); tim@71: DOMSource source = new DOMSource(document); tim@71: StringWriter sw = new StringWriter(); tim@171: StreamResult result = new StreamResult(sw); tim@71: transformer.transform(source, result); tim@71: return sw.getBuffer().toString(); tim@71: } catch (TransformerConfigurationException e) { tim@171: log.error(e, e); tim@71: } catch (TransformerFactoryConfigurationError e) { tim@171: log.error(e, e); tim@71: } catch (TransformerException e) { tim@171: log.error(e, e); tim@71: } tim@71: return null; tim@71: } tim@79: ingo@806: /** ingo@806: * Read a document from input stream. ingo@806: * ingo@806: * @param inputStream The input stream. ingo@806: * @return the document read from stream. ingo@806: */ ingo@358: public static Document readDocument(InputStream inputStream) { tim@71: Document returnValue = null; tim@71: try { tim@171: DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory tim@171: .newInstance(); tim@71: DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); tim@171: returnValue = docBuilder.parse(inputStream); tim@71: } catch (ParserConfigurationException e) { tim@171: log.error(e, e); tim@71: } catch (SAXException e) { tim@171: log.error(e, e); tim@71: } catch (IOException e) { tim@171: log.error(e, e); tim@71: } tim@71: return returnValue; tim@71: } tim@171: ingo@806: tim@171: public Document reInitDocument(Document document) { tim@79: try { ingo@806: byte[] barray = ArtifactXMLUtilities.writeDocument2String(document).getBytes( tim@171: "UTF-8"); tim@171: InputStream inputStream = new ByteArrayInputStream(barray); ingo@806: return ArtifactXMLUtilities.readDocument(inputStream); tim@79: } catch (UnsupportedEncodingException e) { tim@171: log.error(e, e); tim@79: } tim@79: return document; tim@71: } tim@171: ingo@806: ingo@806: /** ingo@806: * Creates an Element with {@link #XFORM_PREFIX} and name ingo@806: * . ingo@806: * ingo@806: * @param document A document. ingo@806: * @param name The node name. ingo@806: * @return the created element. ingo@806: */ ingo@456: public static Element createXFormElement(Document document, String name) { tim@76: Element node = document.createElementNS(XFORM_URL, name); tim@76: node.setPrefix(XFORM_PREFIX); tim@76: return node; tim@76: } tim@171: ingo@806: /** ingo@806: * Creates an exception node. ingo@806: * ingo@806: * @param message The message in the node. ingo@806: * @param document A document. ingo@806: * @return the document containing the exception node. ingo@806: */ ingo@725: public static Document createExceptionReport(String message, Document document) { tim@88: log.debug("ArtifactXMLUtilities.createExceptionReport"); ingo@725: Element exceptionReportNode = createArtifactElement(document, tim@171: "exceptionreport"); tim@88: document.appendChild(exceptionReportNode); ingo@725: Element exceptionNode = createArtifactElement(document, tim@171: "exception"); tim@88: exceptionNode.setTextContent(message); tim@88: exceptionReportNode.appendChild(exceptionNode); tim@88: return document; tim@88: } tim@171: ingo@806: /** ingo@806: * Creates an input exception node. ingo@806: * ingo@806: * @param msg The message in the node. ingo@806: * @param doc A document. ingo@806: * @return the document containing the exception node. ingo@806: */ ingo@725: public static Document createInputExceptionReport(String msg, Document doc) { ingo@725: Element exceptionReportNode = createArtifactElement( ingo@725: doc,"exceptionreport"); ingo@725: Element exceptionNode = createArtifactElement( ingo@725: doc,"exception"); ingo@725: Element inputNode = createArtifactElement( ingo@725: doc, "input"); ingo@725: inputNode.setTextContent(msg); ingo@725: exceptionNode.appendChild(inputNode); ingo@725: exceptionReportNode.appendChild(exceptionNode); ingo@725: doc.appendChild(exceptionReportNode); ingo@725: return doc; ingo@725: } ingo@725: ingo@806: /** ingo@806: * Creates a success node. ingo@806: * ingo@806: * @param message The message. ingo@806: * @param document A document. ingo@806: * @return the document containing the success node. ingo@806: */ ingo@725: public static Document createSuccessReport(String message, Document document) { tim@89: log.debug("ArtifactXMLUtilities.creatSuccessReport"); ingo@725: Element reportNode = createArtifactElement(document, "result"); tim@89: document.appendChild(reportNode); ingo@725: Element successNode = createArtifactElement(document, "success"); tim@89: successNode.setTextContent(message); tim@89: reportNode.appendChild(successNode); tim@89: return document; tim@89: } sascha@778: ingo@806: /** ingo@806: * Read fileName and return the first child node. sascha@807: * ingo@806: * @param fileName An xml document. ingo@806: * @return the first child node in this document. ingo@806: */ tim@217: public Node readConfiguration(String fileName){ tim@217: try { tim@217: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); sascha@778: factory.setValidating(false); tim@217: return factory.newDocumentBuilder().parse(fileName).getChildNodes().item(0); tim@217: } catch (SAXException e) { tim@217: log.error(e,e); tim@217: return null; tim@217: } catch (IOException e) { tim@217: log.error(e,e); tim@217: return null; tim@217: } catch (ParserConfigurationException e) { tim@217: log.error(e,e); tim@217: return null; tim@217: } tim@217: } tim@71: } sascha@836: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :