/* * Copyright (C) 2006 by Open Source Software Solutions, LLC and Contributors * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 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 General Public License for * more details. * * You should have reserved a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston, MA 02111-1307, USA. * * Original Author : Roberto Nibali - rnibali@pyx.ch * Contributor(s) : Erik Swenson - erik@oreports.com * */ package org.efs.openreports.providers; import java.util.logging.Level; import javax.servlet.ServletContext; import org.apache.log4j.Logger; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.core.framework.IPlatformContext; import org.eclipse.birt.core.framework.Platform; import org.eclipse.birt.core.framework.PlatformConfig; import org.eclipse.birt.core.framework.PlatformFileContext; import org.eclipse.birt.core.framework.PlatformServletContext; import org.eclipse.birt.report.engine.api.EngineConfig; import org.eclipse.birt.report.engine.api.HTMLActionHandler; import org.eclipse.birt.report.engine.api.HTMLRenderOption; import org.eclipse.birt.report.engine.api.HTMLServerImageHandler; import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.engine.api.IReportEngineFactory; import org.springframework.beans.factory.DisposableBean; /** * Provides the init and startup of the birt engine and config. * * @author Roberto Nibali * @author Erik Swenson * */ public class BirtProvider implements DisposableBean { protected static Logger log = Logger.getLogger(BirtProvider.class); private static IReportEngine birtEngine = null; public BirtProvider() { // } public BirtProvider(DirectoryProvider directoryProvider) { PlatformConfig platformConfig = new PlatformConfig(); platformConfig.setBIRTHome(directoryProvider.getReportDirectory() + "platform"); IPlatformContext context = new PlatformFileContext(platformConfig); startBirtEngine(context); } public BirtProvider(ServletContext servletContext) { log.info(servletContext.toString()); IPlatformContext context = new PlatformServletContext(servletContext); startBirtEngine(context); } public static synchronized IReportEngine getBirtEngine(String birtHome) { if (birtEngine == null) { PlatformConfig platformConfig = new PlatformConfig(); platformConfig.setBIRTHome(birtHome); IPlatformContext context = new PlatformFileContext(platformConfig); startBirtEngine(context); } return birtEngine; } @SuppressWarnings("unchecked") public static synchronized void startBirtEngine(IPlatformContext context) { log.info("Starting BIRT Engine and OSGI Platform using: " + context.getClass().getName()); HTMLServerImageHandler imageHandler = new HTMLServerImageHandler(); HTMLRenderOption emitterConfig = new HTMLRenderOption(); emitterConfig.setActionHandler(new HTMLActionHandler()); emitterConfig.setImageHandler(imageHandler); EngineConfig config = new EngineConfig(); config.setEngineHome(""); config.setPlatformContext(context); config.setLogConfig(null, Level.ALL); config.getEmitterConfigs().put("html", emitterConfig); try { Platform.startup(config); } catch (BirtException e) { log.error("BirtException", e); } IReportEngineFactory factory = (IReportEngineFactory) Platform .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY); birtEngine = factory.createReportEngine(config); log.info("BIRT Engine Started"); birtEngine.changeLogLevel(Level.SEVERE); } public void destroy() { if (birtEngine == null) return; birtEngine.destroy(); Platform.shutdown(); birtEngine = null; log.info("BIRT Engine and OSGI Platform Shutdown"); } }