+/*
+ * Copyright 2005 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.wamblee.xml;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamSource;
+
+import org.w3c.dom.Document;
+
+/**
+ * XSLT utilities.
+ */
+public class XSLT {
+
+ /**
+ * Transforms a DOM document into another DOM document using a given XSLT
+ * transformation.
+ *
+ * @param aDocument
+ * Document to transform.
+ * @param aXslt
+ * XSLT to use.
+ * @return Transformed document.
+ */
+ public static Document transform( Document aDocument, File aXslt ) {
+ Source source = new DOMSource( aDocument );
+ DOMResult result = new DOMResult( );
+ transform( source, result, aXslt );
+ return (Document) result.getNode( );
+ }
+
+ public static Document transform(byte[] aDocument, File aXslt ) {
+ Source source = new StreamSource( new ByteArrayInputStream(aDocument) );
+ DOMResult result = new DOMResult( );
+ transform( source, result, aXslt );
+ return (Document) result.getNode( );
+ }
+
+ /**
+ * Transforms a DOM document into another DOM document using a given XSLT
+ * transformation.
+ *
+ * @param aDocument
+ * Document to transform.
+ * @param aXslt
+ * XSLT to use.
+ * @return Transformed document.
+ */
+ public static void transform( Source aSource, Result aResult,
+ File aXslt ) {
+ try {
+ Source xslt = new StreamSource( aXslt );
+ Transformer transformer = TransformerFactory.newInstance( )
+ .newTransformer( xslt );
+ transformer.transform( aSource, aResult );
+ } catch ( TransformerConfigurationException e ) {
+ throw new RuntimeException(
+ "Configuration problem of XSLT transformation", e );
+ } catch ( TransformerException e ) {
+ throw new RuntimeException( "Error transforming document", e );
+ }
+ }
+}