Subversion Repositories bacoAlunos

Rev

Rev 1310 | Rev 1571 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.utils;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.*;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import pt.estgp.estgweb.Globals;

import javax.xml.transform.*;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamSource;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;



/**
 * Class Description
 *
 * @author Jorge Machado <machadofisher@gmail.com>
 * @see ;
 */


public class Dom4jUtil
{
    public static 5+0%2Fdocs%2Fapi+Document">Document parse(1.5.0/docs/api/java/net/URL.html">URL url) throws DocumentException
    {
        SAXReader reader = new SAXReader();
        createIgnoreErrorHandler(reader);
        return reader.read(url);
    }

    public static 5+0%2Fdocs%2Fapi+Document">Document parse(1.5.0/docs/api/java/lang/String.html">String xml) throws DocumentException
    {
        SAXReader reader = new SAXReader();
        createIgnoreErrorHandler(reader);
        return reader.read(new 1.5.0/docs/api/java/io/StringReader.html">StringReader(xml));
    }

    public static void createIgnoreErrorHandler(SAXReader reader)
    {
        reader.setValidation(false);
        reader.setErrorHandler(new 1.5.0/docs/api/org/xml/sax/ErrorHandler.html">ErrorHandler()
        {

            public void warning(1.5.0/docs/api/org/xml/sax/SAXParseException.html">SAXParseException exception) throws 1.5.0/docs/api/org/xml/sax/SAXException.html">SAXException
            {
                1.5.0/docs/api/java/lang/System.html">System.out.println(exception);
            }

            public void error(1.5.0/docs/api/org/xml/sax/SAXParseException.html">SAXParseException exception) throws 1.5.0/docs/api/org/xml/sax/SAXException.html">SAXException
            {
                1.5.0/docs/api/java/lang/System.html">System.out.println(exception);
            }

            public void fatalError(1.5.0/docs/api/org/xml/sax/SAXParseException.html">SAXParseException exception) throws 1.5.0/docs/api/org/xml/sax/SAXException.html">SAXException
            {
                1.5.0/docs/api/java/lang/System.html">System.out.println(exception);
            }
        });
    }

    private static Map<String,byte[]> sourceXmls = new HashMap<String,byte[]>();

    /**
     * Search for Source Document in cache
     *
     * @param file in src tree
     * @return bytes
     * @throws java.io.IOException on read error
     */

    public static byte[] getSourceFile(1.5.0/docs/api/java/lang/String.html">String file) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        byte[] bytes;
        if((bytes = sourceXmls.get(file)) != null)
        {
            return bytes;
        }

        5+0%2Fdocs%2Fapi+InputStream">InputStream stream = 1.5.0/docs/api/java/lang/Thread.html">Thread.currentThread().getContextClassLoader().getResourceAsStream(file);
        1.5.0/docs/api/java/io/ByteArrayOutputStream.html">ByteArrayOutputStream output = new 1.5.0/docs/api/java/io/ByteArrayOutputStream.html">ByteArrayOutputStream();
        int read;
        byte[] buffer = new byte[1024];
        while((read = stream.read(buffer)) > 0)
        {
            output.write(buffer,0,read);
        }
        output.close();
        stream.close();
        bytes = output.toByteArray();
        sourceXmls.put(file, bytes);
        return bytes;
    }

    public static 5+0%2Fdocs%2Fapi+Document">Document parseSourceFileFromCache(1.5.0/docs/api/java/lang/String.html">String file) throws DocumentException, 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        byte[] bytes = getSourceFile(file);
        SAXReader reader = new SAXReader();
        reader.setValidation(false);
        createIgnoreErrorHandler(reader);
        return reader.read(new 1.5.0/docs/api/java/io/ByteArrayInputStream.html">ByteArrayInputStream(bytes));
    }

    public static 5+0%2Fdocs%2Fapi+Document">Document parseSourceFile(1.5.0/docs/api/java/lang/String.html">String file) throws DocumentException, 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        5+0%2Fdocs%2Fapi+InputStream">InputStream stream = 1.5.0/docs/api/java/lang/Thread.html">Thread.currentThread().getContextClassLoader().getResourceAsStream(file);
       
        SAXReader reader = new SAXReader();
        reader.setValidation(false);
        createIgnoreErrorHandler(reader);
        5+0%2Fdocs%2Fapi+Document">Document dom = reader.read(stream);
        stream.close();
        return dom;
    }

    public static 5+0%2Fdocs%2Fapi+Document">Document parse(1.5.0/docs/api/java/io/File.html">File file) throws DocumentException, 1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException
    {
        SAXReader reader = new SAXReader();
        reader.setValidation(false);
        createIgnoreErrorHandler(reader);
        return reader.read(file);
    }

    public static 5+0%2Fdocs%2Fapi+Document">Document parse(1.5.0/docs/api/org/xml/sax/InputSource.html">InputSource source) throws DocumentException, 1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException
    {
        SAXReader reader = new SAXReader();
        createIgnoreErrorHandler(reader);
        return reader.read(source);
    }

    public static 5+0%2Fdocs%2Fapi+Document">Document parse(5+0%2Fdocs%2Fapi+InputStream">InputStream stream) throws DocumentException, 1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException
    {
        SAXReader reader = new SAXReader();
        createIgnoreErrorHandler(reader);
        return reader.read(stream);
    }




    public static void write(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/lang/String.html">String fileDest) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        // lets write to a file
        XMLWriter writer = new XMLWriter(
                new 1.5.0/docs/api/java/io/FileWriter.html">FileWriter( fileDest )
        );
        writer.write( document );
        writer.close();
    }

    public static void writeSout(5+0%2Fdocs%2Fapi+Document">Document document) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        // Compact format to System.out
        OutputFormat format = OutputFormat.createCompactFormat();
        XMLWriter writer = new XMLWriter( 1.5.0/docs/api/java/lang/System.html">System.out, format );
        writer.write( document );
    }

    public static void write(5+0%2Fdocs%2Fapi+Document">Document document,5+0%2Fdocs%2Fapi+OutputStream">OutputStream stream) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        // lets write to a file
        XMLWriter writer = new XMLWriter(stream);
        writer.write( document );
        writer.close();
    }

    public static void write(5+0%2Fdocs%2Fapi+Element">Element document,5+0%2Fdocs%2Fapi+OutputStream">OutputStream stream) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        // lets write to a file
        XMLWriter writer = new XMLWriter(stream);
        writer.write( document );
        writer.close();
    }

    public static void write(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/io/Writer.html">Writer writerStream) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        write(document,writerStream,false);
    }
    public static void write(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/io/Writer.html">Writer writerStream,boolean omitXmlDecl) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {

        // lets write to a file
        XMLWriter writer;
        if(omitXmlDecl)
        {
            OutputFormat format = new OutputFormat();
            format.setSuppressDeclaration(true);
            writer = new XMLWriter(writerStream,format);
        }
        else
            writer = new XMLWriter(writerStream);

        writer.write( document );
        writer.close();
    }
    public static void write(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/io/Writer.html">Writer writerStream, OutputFormat outputFormat) throws 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        // lets write to a file
        XMLWriter writer = new XMLWriter(writerStream,outputFormat);
        writer.write( document );
        writer.close();
    }


    private static 1.5.0/docs/api/javax/xml/transform/TransformerFactory.html">TransformerFactory transFact = 1.5.0/docs/api/javax/xml/transform/TransformerFactory.html">TransformerFactory.newInstance();
    private static Map<String,Templates> templates =new Hashtable<String,Templates>();


    /**
     *
     * @param document to transform
     * @param stylesheet relative to classPath
     * @return transformed document
     * @throws Exception parsing stylesheet
     */

    public static 1.5.0/docs/api/java/lang/String.html">String styleDocument(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/lang/String.html">String stylesheet) throws 1.5.0/docs/api/java/lang/Exception.html">Exception {
        return styleDocument(document,stylesheet, (Map<String,Object>) null);
    }
    public static 1.5.0/docs/api/java/lang/String.html">String styleDocument(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/lang/String.html">String stylesheet, Map<String,Object> parameters) throws 1.5.0/docs/api/java/lang/Exception.html">Exception
    {
        return styleDocument( document, stylesheet, parameters,false);
    }

    public static 1.5.0/docs/api/java/lang/String.html">String styleDocument(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/lang/String.html">String stylesheet, Map<String,Object> parameters,boolean omitXmlDecl) throws 1.5.0/docs/api/java/lang/Exception.html">Exception {

        1.5.0/docs/api/javax/xml/transform/Transformer.html">Transformer transformer = getTransformerFromSystem(stylesheet);
        if(parameters != null)
        {
            for(1.5.0/docs/api/java/util/Map.html">Map.Entry<String,Object> entry: parameters.entrySet())
            {
                transformer.setParameter(entry.getKey(),entry.getValue());
            }
        }
        // now lets style the given document
        DocumentSource source = new DocumentSource( document );
        DocumentResult result = new DocumentResult();
        transformer.transform( source, result );
        // return the transformed document
        5+0%2Fdocs%2Fapi+Document">Document transformedDoc = result.getDocument();
        1.5.0/docs/api/java/io/StringWriter.html">StringWriter writer = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
        write(transformedDoc,writer,omitXmlDecl);
        return writer.toString();
    }

    /**
     *
     * @param document to transform
     * @param stylesheet relative to classPath
     * @param fileDest to write the destination file
     * @return transformed document
     * @throws Exception parsing stylesheet
     */

    public static 5+0%2Fdocs%2Fapi+Document">Document styleDocument(5+0%2Fdocs%2Fapi+Document">Document document,1.5.0/docs/api/java/lang/String.html">String stylesheet, 1.5.0/docs/api/java/lang/String.html">String fileDest) throws 1.5.0/docs/api/java/lang/Exception.html">Exception {

        1.5.0/docs/api/javax/xml/transform/Transformer.html">Transformer transformer = getTransformerFromSystem(stylesheet);
        // now lets style the given document
        DocumentSource source = new DocumentSource( document );
        DocumentResult result = new DocumentResult();
        transformer.transform( source, result );
        // return the transformed document
        5+0%2Fdocs%2Fapi+Document">Document transformedDoc = result.getDocument();
        write(transformedDoc,fileDest);
        return transformedDoc;
    }


    private static 1.5.0/docs/api/javax/xml/transform/Transformer.html">Transformer getTransformerFromSystem(1.5.0/docs/api/java/lang/String.html">String xsltFile) throws 1.5.0/docs/api/javax/xml/transform/TransformerConfigurationException.html">TransformerConfigurationException, 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        1.5.0/docs/api/javax/xml/transform/Templates.html">Templates tpl = null;
        if(Globals.USE_XSL_CACHE)
            tpl = templates.get(xsltFile);
        if (tpl==null)
        {
            1.5.0/docs/api/java/lang/String.html">String path = Globals.CLASSES_ABSOLUTE_PATH + xsltFile;
            1.5.0/docs/api/javax/xml/transform/Source.html">Source xsltSource = new 1.5.0/docs/api/javax/xml/transform/stream/StreamSource.html">StreamSource(path);
            tpl = transFact.newTemplates(xsltSource);
            templates.put(xsltFile,tpl);
        }
        return tpl.newTransformer();
    }


     public static org.w3c.dom.5+0%2Fdocs%2Fapi+Document">Document toW3c(org.dom4j.5+0%2Fdocs%2Fapi+Document">Document dom4jDoc) throws 1.5.0/docs/api/javax/xml/transform/TransformerException.html">TransformerException {
        1.5.0/docs/api/javax/xml/transform/TransformerFactory.html">TransformerFactory transformerFactory = 1.5.0/docs/api/javax/xml/transform/TransformerFactory.html">TransformerFactory.newInstance();
        1.5.0/docs/api/javax/xml/transform/sax/SAXSource.html">SAXSource source = new DocumentSource(dom4jDoc);
        1.5.0/docs/api/javax/xml/transform/dom/DOMResult.html">DOMResult result = new 1.5.0/docs/api/javax/xml/transform/dom/DOMResult.html">DOMResult();

        1.5.0/docs/api/javax/xml/transform/Transformer.html">Transformer transformer = transformerFactory.newTransformer();

        transformer.transform(source, result);
        return (org.w3c.dom.5+0%2Fdocs%2Fapi+Document">Document) result.getNode();
    }

    public static void main(1.5.0/docs/api/java/lang/String.html">String [] args) throws 1.5.0/docs/api/java/lang/Exception.html">Exception
    {

        1.5.0/docs/api/java/lang/System.html">System.out.println(Dom4jUtil.styleDocument(Dom4jUtil.parse(new 1.5.0/docs/api/java/io/File.html">File("C:\\Servidores\\workspace\\baco\\impl\\src\\xsd\\curso_EI.xml")),"/template/xsd/curso.xsl"));
    }
}