package com.opentravelsoft.report.view;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.servlet.ServletContextURIResolver;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import java.io.File;
import javax.xml.transform.URIResolver;
/**
* Apache FOP Factory used to provide a singleton instance of the FopFactory.
* Best pratices recommended the reuse of the factory because of the startup
* time.
*/
public class ApacheFopFactory {
protected static Logger logger = Logger.getLogger(ApacheFopFactory.class);
private static final FopFactory fopFactory;
static {
// Create the factory
fopFactory = FopFactory.newInstance();
// Limit the validation for backwards compatibility
fopFactory.setStrictValidation(false);
try {
String ofbizHome = System.getProperty("gingkgo.home");
URIResolver uriResolver = new ServletContextURIResolver(
ServletActionContext.getServletContext());
File userConfigFile = new File(ofbizHome + File.separatorChar + "WEB-INF"
+ File.separatorChar + "conf" + File.separatorChar + "fop.xconf");
fopFactory.setUserConfig(userConfigFile);
fopFactory.setURIResolver(uriResolver);
String fopFontBaseUrl = "file:///" + ofbizHome + File.separatorChar
+ "WEB-INF" + File.separatorChar + "conf" + File.separatorChar;
logger.info("FOP-FontBaseURL: " + fopFontBaseUrl);
fopFactory.setFontBaseURL(fopFontBaseUrl.replace('\\', '/'));
} catch (Exception e) {
logger.warn("Error reading FOP configuration");
}
}
public static FopFactory instance() {
return fopFactory;
}
}