org.exist.xquery.modules.xslfo.RenderXXepProcessorAdapter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of exist-xslfo Show documentation
Show all versions of exist-xslfo Show documentation
eXist-db XQuery XSL:FO Module
package org.exist.xquery.modules.xslfo;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import org.exist.storage.DBBroker;
import org.exist.xquery.XPathException;
import org.exist.xquery.value.NodeValue;
import org.w3c.dom.Node;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
/**
*
* @author Adam Retter
*/
public class RenderXXepProcessorAdapter implements ProcessorAdapter {
private Object formatter = null;
@Override
public ContentHandler getContentHandler(DBBroker broker, NodeValue configFile, Properties parameters, String mimeType, OutputStream os) throws XPathException, SAXException {
if(configFile == null) {
throw new XPathException("XEP requires a configuration file");
}
try {
Class formatterImplClazz = Class.forName("com.renderx.xep.FormatterImpl");
if(parameters == null) {
Constructor formatterImplCstr = formatterImplClazz.getConstructor(Source.class);
formatter = formatterImplCstr.newInstance(new DOMSource((Node)configFile));
} else {
Constructor formatterImplCstr = formatterImplClazz.getConstructor(Source.class, Properties.class);
formatter = formatterImplCstr.newInstance(new DOMSource((Node)configFile), parameters);
}
String backendType = mimeType.substring(mimeType.indexOf("/")+1).toUpperCase();
Class foTargetClazz = Class.forName("com.renderx.xep.FOTarget");
Constructor foTargetCstr = foTargetClazz.getConstructor(OutputStream.class, String.class);
Object foTarget = foTargetCstr.newInstance(os, backendType);
Method createContentHandlerMethod = formatterImplClazz.getMethod("createContentHandler", String.class, foTargetClazz);
return (ContentHandler) createContentHandlerMethod.invoke(formatter, null, foTarget);
} catch (Exception e) {
throw new SAXException(e.getMessage(), e);
}
}
@Override
public void cleanup() {
if(formatter != null) {
try{
Class formatterImplClazz = Class.forName("com.renderx.xep.FormatterImpl");
Method cleanupMethod = formatterImplClazz.getMethod("cleanup");
cleanupMethod.invoke(formatter);
} catch(Exception e) {
// do nothing
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy