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.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
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
(org.
w3c.
dom.
5+0%2Fdocs%2Fapi+Document">Document doc
) throws 1.5.0/docs/api/java/io/IOException.html">IOException,
1.5.0/docs/api/javax/xml/transform/TransformerException.html">TransformerException {
1.5.0/docs/api/javax/xml/transform/TransformerFactory.html">TransformerFactory tf =
1.5.0/docs/api/javax/xml/transform/TransformerFactory.html">TransformerFactory.
newInstance();
1.5.0/docs/api/javax/xml/transform/Transformer.html">Transformer transformer = tf.
newTransformer();
transformer.
setOutputProperty(1.5.0/docs/api/javax/xml/transform/OutputKeys.html">OutputKeys.
OMIT_XML_DECLARATION,
"no");
transformer.
setOutputProperty(1.5.0/docs/api/javax/xml/transform/OutputKeys.html">OutputKeys.
METHOD,
"xml");
transformer.
setOutputProperty(1.5.0/docs/api/javax/xml/transform/OutputKeys.html">OutputKeys.
INDENT,
"yes");
transformer.
setOutputProperty(1.5.0/docs/api/javax/xml/transform/OutputKeys.html">OutputKeys.
ENCODING,
"UTF-8");
transformer.
setOutputProperty("{http://xml.apache.org/xslt}indent-amount",
"4");
transformer.
transform(new 1.5.0/docs/api/javax/xml/transform/dom/DOMSource.html">DOMSource(doc
),
new 1.5.0/docs/api/javax/xml/transform/stream/StreamResult.html">StreamResult(new 1.5.0/docs/api/java/io/OutputStreamWriter.html">OutputStreamWriter(1.5.0/docs/api/java/lang/System.html">System.
out,
"UTF-8")));
}
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"));
}
}