package org.toobsframework.transformpipeline.domain; import java.io.Serializable; import java.util.HashMap; import java.util.Properties; import javax.xml.transform.URIResolver; import org.apache.xml.serializer.OutputPropertiesFactory; import org.toobsframework.util.Configuration; @SuppressWarnings("unchecked") public class XMLTransformerFactory implements Serializable { /** * */ private static final long serialVersionUID = -1019033346323233299L; /** private singleton application gateway object */ private static XMLTransformerFactory xmlTransformerFactorySingleton = new XMLTransformerFactory(); /** Holds Constant for Dynamic Transformer */ public static final String DYNAMIC_XSL = "org.toobsframework.transformpipeline.domain.StaticXSLTransformer"; /** Holds Constant for Static Transformer */ public static final String STATIC_XSL = "org.toobsframework.transformpipeline.domain.StaticXSLTransformer"; /** Holds Constant for Translet Transformer */ public static final String TRANSLET_XSL = "org.toobsframework.transformpipeline.domain.TransletTransformer"; public static final String CHAIN_XSL = "org.toobsframework.transformpipeline.domain.ChainedXSLTransformer"; public static final String TRANSLET_CHAIN_XSL = "org.toobsframework.transformpipeline.domain.ChainedXSLTransletTransformer"; public static final String OUTPUT_FORMAT_XML = "xml"; public static final String OUTPUT_FORMAT_HTML = "html"; private HashMap outputPropertiesMap = null; private boolean useTranslets = false; private boolean useChain = false; private Class defaultTransformerClazz = null; private Class chainTransformerClazz = null; private URIResolver uriResolver; /** * Creates a new DatatableFactory object. */ private XMLTransformerFactory() { this.outputPropertiesMap = new HashMap(); Properties xmlProps = OutputPropertiesFactory.getDefaultMethodProperties("xml"); xmlProps.setProperty("omit-xml-declaration", "yes"); this.outputPropertiesMap.put("xml", xmlProps); Properties htmlProps = OutputPropertiesFactory.getDefaultMethodProperties("html"); this.outputPropertiesMap.put("html", htmlProps); useTranslets = Configuration.getInstance().getUseTranslets(); useChain = Configuration.getInstance().getUseChain(); uriResolver = new XSLUriResolverImpl(); try { if (useTranslets && useChain) { defaultTransformerClazz = java.lang.Class.forName(TRANSLET_XSL); chainTransformerClazz = java.lang.Class.forName(TRANSLET_CHAIN_XSL); } else if (useTranslets) { defaultTransformerClazz = java.lang.Class.forName(TRANSLET_XSL); chainTransformerClazz = java.lang.Class.forName(TRANSLET_XSL); } else if (useChain) { defaultTransformerClazz = java.lang.Class.forName(STATIC_XSL); chainTransformerClazz = java.lang.Class.forName(CHAIN_XSL); } else { defaultTransformerClazz = java.lang.Class.forName(STATIC_XSL); chainTransformerClazz = java.lang.Class.forName(STATIC_XSL); } } catch(Exception e) { try { defaultTransformerClazz = java.lang.Class.forName(STATIC_XSL); chainTransformerClazz = java.lang.Class.forName(STATIC_XSL); } catch(Exception crap) { crap.printStackTrace(); } } } public IXMLTransformer getDefaultTransformer(URIResolver resolver) throws XMLTransformerException { IXMLTransformer transformer = null; try { transformer = (IXMLTransformer) defaultTransformerClazz.newInstance(); transformer.setURIResolver(resolver == null ? this.uriResolver : resolver); } catch(InstantiationException ie) { throw new XMLTransformerException("The transformer class " + defaultTransformerClazz + " can not be instantiated"); } catch(IllegalAccessException iae) { throw new XMLTransformerException("The transformer class " + defaultTransformerClazz + " can not be accessed"); } return transformer; } public IXMLTransformer getChainTransformer(String outputMethod, URIResolver resolver) throws XMLTransformerException { IXMLTransformer transformer = null; try { transformer = (IXMLTransformer) chainTransformerClazz.newInstance(); transformer.setOutputProperties((Properties)outputPropertiesMap.get(outputMethod)); transformer.setURIResolver(resolver == null ? this.uriResolver : resolver); } catch(InstantiationException ie) { throw new XMLTransformerException("The transformer class " + chainTransformerClazz + " can not be instantiated"); } catch(IllegalAccessException iae) { throw new XMLTransformerException("The transformer class " + chainTransformerClazz + " can not be accessed"); } return transformer; } /** * Gets the singleton instance of the DatatableFactory * * @return The singleton instance of the DatatableFactory */ public static XMLTransformerFactory getInstance() { return xmlTransformerFactorySingleton; } /** * Returns a datatable object * * @param userName String * * @return a datatable object IDatatable * * @throws DatatableException DatatableException */ public IXMLTransformer getXMLTransformer(String type) throws XMLTransformerException { IXMLTransformer transformer = null; try { if (null != type) { Class transformerClass = Class.forName(type); transformer = (IXMLTransformer) transformerClass.newInstance(); } else { } } catch(ClassNotFoundException cnfe) { throw new XMLTransformerException("The transformer class " + type + " can not be found"); } catch(InstantiationException ie) { throw new XMLTransformerException("The transformer class " + type + " can not be instantiated"); } catch(IllegalAccessException iae) { throw new XMLTransformerException("The transformer class " + type + " can not be accessed"); } return transformer; } }