tim@71: /**
tim@71:  *
tim@71:  */
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@71: import org.xml.sax.SAXException;
tim@71: 
tim@71: import de.intevation.artifacts.ArtifactNamespaceContext;
tim@71: import de.intevation.gnv.transition.timeseries.TimeSeriesOutputTransition;
tim@71: 
tim@71: /**
tim@71:  * @author Tim Englich <tim.englich@intevation.de>
tim@71:  *
tim@71:  */
tim@75: 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@71:     private static Logger log = Logger.getLogger(TimeSeriesOutputTransition.class);
tim@71:   
tim@76:     public static final String XFORM_URL = "http://www.w3.org/2002/xforms";
tim@76:     public static final String XFORM_PREFIX = "xform";
tim@76:     
tim@71:     /**
tim@71:      * Constructor
tim@71:      */
tim@71:     public ArtifactXMLUtilities() {
tim@71:     }
tim@71:     
tim@71:     /**
tim@71:      * @param document
tim@71:      * @return
tim@71:      */
tim@71:     public Element createArtifactElement(Document document, String name) {
tim@71:         Element node = document.createElementNS(ArtifactNamespaceContext.NAMESPACE_URI, name);
tim@71:         node.setPrefix(ArtifactNamespaceContext.NAMESPACE_PREFIX);
tim@71:         return node;
tim@71:     }
tim@71:     
tim@71:     public String writeDocument2String(Document document){
tim@71:         try {
tim@71:             TransformerFactory transformerFactory = TransformerFactory.newInstance();
tim@71:             Transformer transformer = transformerFactory.newTransformer();
tim@71:             DOMSource source = new DOMSource(document);
tim@71:             StringWriter sw = new StringWriter();
tim@71:             StreamResult result =  new StreamResult(sw);
tim@71:             transformer.transform(source, result);
tim@71:             return sw.getBuffer().toString();
tim@71:         } catch (TransformerConfigurationException e) {
tim@71:             log.error(e,e);
tim@71:         } catch (TransformerFactoryConfigurationError e) {
tim@71:             log.error(e,e);
tim@71:         } catch (TransformerException e) {
tim@71:             log.error(e,e);
tim@71:         }
tim@71:         return null;
tim@71:     }
tim@71:     
tim@79: 
tim@79:     
tim@79:     
tim@71:     public Document readDocument(InputStream inputStream){
tim@71:         Document returnValue = null;
tim@71:         try {
tim@71:             DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
tim@71:             DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
tim@71:             returnValue = docBuilder.parse (inputStream);
tim@71:         } catch (ParserConfigurationException e) {
tim@71:             log.error(e,e);
tim@71:         } catch (SAXException e) {
tim@71:             log.error(e,e);
tim@71:         } catch (IOException e) {
tim@71:             log.error(e,e);
tim@71:         }
tim@71:         return returnValue;
tim@71:     }
tim@71:     
tim@71:     public Document reInitDocument(Document document){
tim@79:         try {
tim@79:             byte[] barray = this.writeDocument2String(document).getBytes("UTF-8");
tim@79:             InputStream inputStream = new ByteArrayInputStream(barray); 
tim@79:             return this.readDocument(inputStream);
tim@79:         } catch (UnsupportedEncodingException e) {
tim@79:             log.error(e,e);
tim@79:         }
tim@79:         return document;
tim@71:     }
tim@71:     
tim@76:     public 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@71:     
tim@88:     public Document createExceptionReport(String message, Document document){
tim@88:         log.debug("ArtifactXMLUtilities.createExceptionReport");
tim@88:         Element exceptionReportNode = this.createArtifactElement(document, "exceptionreport");
tim@88:         document.appendChild(exceptionReportNode);
tim@88:         Element exceptionNode = this.createArtifactElement(document, "exception");
tim@88:         exceptionNode.setTextContent(message);
tim@88:         exceptionReportNode.appendChild(exceptionNode);
tim@88:         return document;
tim@88:     }
tim@88:     
tim@89:     public Document createSuccessReport(String message, Document document){
tim@89:         log.debug("ArtifactXMLUtilities.creatSuccessReport");
tim@89:         Element reportNode = this.createArtifactElement(document, "result");
tim@89:         document.appendChild(reportNode);
tim@89:         Element successNode = this.createArtifactElement(document, "success");
tim@89:         successNode.setTextContent(message);
tim@89:         reportNode.appendChild(successNode);
tim@89:         return document;
tim@89:     }
tim@89:     
tim@71: 
tim@71: }