/** * */ package cz.cuni.mff.peckam.java.origamist.jaxb; import javax.xml.transform.ErrorListener; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.URIResolver; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TemplatesHandler; import javax.xml.transform.sax.TransformerHandler; import org.xml.sax.XMLFilter; /** * A {@link SAXTransformerFactory} upgraded to return {@link CustomTransformerHandler} objects instead of * {@link TransformerHandler} ones. * * @author Martin Pecka */ public class CustomTransformerFactory extends SAXTransformerFactory { /** The delegated factory. */ protected final SAXTransformerFactory factory; /** * Use the default SAX transformer factory returned by {@link SAXTransformerFactory#newInstance()}. */ public CustomTransformerFactory() { this(null); } /** * Create the custom factory over the given one. If the given factory is <code>null</code>, the default factory as * returned by {@link SAXTransformerFactory#newInstance()} is used. * * @param factory The factory to use. */ public CustomTransformerFactory(SAXTransformerFactory factory) { if (factory != null) this.factory = factory; else this.factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); } @Override public CustomTransformerHandler newTransformerHandler(Source src) throws TransformerConfigurationException { return convert(factory.newTransformerHandler(src)); } @Override public CustomTransformerHandler newTransformerHandler(Templates templates) throws TransformerConfigurationException { return convert(factory.newTransformerHandler(templates)); } @Override public CustomTransformerHandler newTransformerHandler() throws TransformerConfigurationException { return convert(factory.newTransformerHandler()); } @Override public TemplatesHandler newTemplatesHandler() throws TransformerConfigurationException { return factory.newTemplatesHandler(); } @Override public XMLFilter newXMLFilter(Source src) throws TransformerConfigurationException { return factory.newXMLFilter(src); } @Override public XMLFilter newXMLFilter(Templates templates) throws TransformerConfigurationException { return factory.newXMLFilter(templates); } @Override public Transformer newTransformer(Source source) throws TransformerConfigurationException { return factory.newTransformer(source); } @Override public Transformer newTransformer() throws TransformerConfigurationException { return factory.newTransformer(); } @Override public Templates newTemplates(Source source) throws TransformerConfigurationException { return factory.newTemplates(source); } @Override public Source getAssociatedStylesheet(Source source, String media, String title, String charset) throws TransformerConfigurationException { return factory.getAssociatedStylesheet(source, media, title, charset); } @Override public void setURIResolver(URIResolver resolver) { factory.setURIResolver(resolver); } @Override public URIResolver getURIResolver() { return factory.getURIResolver(); } @Override public void setFeature(String name, boolean value) throws TransformerConfigurationException { factory.setFeature(name, value); } @Override public boolean getFeature(String name) { return factory.getFeature(name); } @Override public void setAttribute(String name, Object value) { factory.setAttribute(name, value); } @Override public Object getAttribute(String name) { return factory.getAttribute(name); } @Override public void setErrorListener(ErrorListener listener) { factory.setErrorListener(listener); } @Override public ErrorListener getErrorListener() { return factory.getErrorListener(); } /** * Upcast the given {@link TransformerHandler} to {@link CustomTransformerHandler} by just delegating all methods to * it. * * @param handler The handler to upcast. * @return The upcasted handler. */ protected CustomTransformerHandler convert(TransformerHandler handler) { return new CustomTransformerHandlerImpl(handler); } }