/** * Copyright (C) 2004 Orbeon, Inc. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU Lesser General Public License as published by the Free Software Foundation; either version * 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * The full text of the license is available at http://www.gnu.org/copyleft/lesser.html */ package org.orbeon.oxf.transformer.xupdate; import org.orbeon.dom4j.Document; import org.orbeon.oxf.transformer.xupdate.dom4j.LocationSAXContentHandler; import org.orbeon.oxf.transformer.xupdate.dom4j.LocationSAXWriter; import org.orbeon.oxf.transformer.xupdate.statement.Utils; import org.xml.sax.SAXException; import javax.xml.transform.*; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.sax.SAXSource; import java.io.IOException; import java.util.Properties; public class TransformerImpl extends Transformer { private TemplatesImpl templates; private URIResolver uriResolver; public TransformerImpl(TemplatesImpl templates) { this.templates = templates; } public void setURIResolver(URIResolver uriResolver) { this.uriResolver = uriResolver; } public URIResolver getURIResolver() { return null; } public void setOutputProperties(Properties oformat) throws IllegalArgumentException { } public Properties getOutputProperties() { return null; } public void setOutputProperty(String name, String value) throws IllegalArgumentException { } public String getOutputProperty(String name) throws IllegalArgumentException { return null; } public void setErrorListener(ErrorListener listener) throws IllegalArgumentException { } public ErrorListener getErrorListener() { return null; } public void transform(Source xmlSource, Result outputTarget) throws TransformerException { try { // Check input parameters if (! (xmlSource instanceof SAXSource)) throw new TransformerException("XUpdate transformer only supports SAXSource"); if (! (outputTarget instanceof SAXResult)) throw new TransformerException("XUpdate transformer only supports SAXResult"); SAXSource saxSource = (SAXSource) xmlSource; SAXResult saxResult = (SAXResult) outputTarget; // Read input document LocationSAXContentHandler documentContentHandler = new LocationSAXContentHandler(); saxSource.getXMLReader().setContentHandler(documentContentHandler); saxSource.getXMLReader().parse(saxSource.getInputSource()); Document document = documentContentHandler.getDocument(); // Execute operations Utils.execute(uriResolver, document, new VariableContextImpl(), new DocumentContext(), templates.getStatements()); // Send document to output LocationSAXWriter locationSAXWriter = new LocationSAXWriter(); locationSAXWriter.setContentHandler(saxResult.getHandler()); locationSAXWriter.write(document); } catch (IOException e) { throw new TransformerException(e); } catch (SAXException e) { throw new TransformerException(e); } } public void setParameter(String name, Object value) { } public Object getParameter(String name) { return null; } public void clearParameters() { } }