Package it.eng.spagobi.engines.jasperreport.services

Source Code of it.eng.spagobi.engines.jasperreport.services.JasperReportEngineStartAction

/**

SpagoBI - The Business Intelligence Free Platform

Copyright (C) 2005-2009 Engineering Ingegneria Informatica S.p.A.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library 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
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

**/
package it.eng.spagobi.engines.jasperreport.services;

import java.io.File;

import org.apache.log4j.Logger;

import it.eng.spagobi.engines.jasperreport.JasperReportEngine;
import it.eng.spagobi.engines.jasperreport.JasperReportEngineInstance;
import it.eng.spagobi.engines.jasperreport.JasperReportEngineTemplate;
import it.eng.spagobi.services.proxy.DataSetServiceProxy;
import it.eng.spagobi.tools.dataset.bo.IDataSet;
import it.eng.spagobi.tools.datasource.bo.IDataSource;
import it.eng.spagobi.utilities.engines.AbstractEngineStartServlet;
import it.eng.spagobi.utilities.engines.EngineConstants;
import it.eng.spagobi.utilities.engines.EngineStartServletIOManager;
import it.eng.spagobi.utilities.engines.SpagoBIEngineException;

/**
* @authors
* Andrea Gioia (andrea.gioia@eng.it)
* Davide Zerbetto (davide.zerbetto@eng.it)
*/
public class JasperReportEngineStartAction extends AbstractEngineStartServlet {
 
  private static String CONNECTION_NAME="connectionName";
  private static String OUTPUT_TYPE = "outputType";
 
     
  /** Logger component. */
    private static transient Logger logger = Logger.getLogger(JasperReportEngineStartAction.class);
   
 
  public void doService( EngineStartServletIOManager servletIOManager ) throws SpagoBIEngineException {
   
    IDataSource dataSource;
        IDataSet dataSet;
        String connectionName;
        String outputType;
       
        JasperReportEngineTemplate template;
        JasperReportEngineInstance engineInstance;
 
        logger.debug("IN");
       
        try {
          // log some contextual infos
          logger.debug("User: [" + servletIOManager.getUserId() + "]");
          logger.debug("Document: [" + servletIOManager.getDocumentId() + "]");
         
          dataSource = servletIOManager.getDataSource();
          logger.debug("Datasource: [" + (dataSource == null? dataSource: dataSource.getLabel()) + "]");
          if (dataSource==null){
            logger.warn("This document doesn't have the Data Source");
          }
          
          dataSet = servletIOManager.getDataSet();
          logger.debug("Dataset: [" + (dataSet == null? dataSource: dataSet.getName()) + "]");
         
          // read and log builtin parameters
          connectionName = servletIOManager.getParameterAsString(CONNECTION_NAME);
          logger.debug("Parameter [" + CONNECTION_NAME + "] is equal to [" + connectionName + "]");
         
          outputType = servletIOManager.getParameterAsString(OUTPUT_TYPE);
          logger.debug("Parameter [" + OUTPUT_TYPE + "] is equal to [" + outputType + "]");
          if(outputType == null) {
            outputType = JasperReportEngine.getConfig().getDefaultOutputType();
            servletIOManager.getEnv().put(OUTPUT_TYPE, outputType);
            logger.debug("Parameter [" + OUTPUT_TYPE + "] has been set to the default value [" + servletIOManager.getEnv().get(OUTPUT_TYPE) + "]");
          }
         
          // this proxy is used by ScriptletChart to execute and embed external chart into report
          servletIOManager.getEnv().put(EngineConstants.ENV_DOCUMENT_EXECUTE_SERVICE_PROXY, servletIOManager.getDocumentExecuteServiceProxy());
         
          servletIOManager.auditServiceStartEvent();
         
         
          template = new JasperReportEngineTemplate(servletIOManager.getTemplateName(), servletIOManager.getTemplate());
         
         
          File reportOutputDir = JasperReportEngine.getConfig().getReportOutputDir();
          File reportFile = File.createTempFile("report", "." + outputType, reportOutputDir);
          DataSetServiceProxy proxyDataset = servletIOManager.getDataSetServiceProxy();
         
          engineInstance = JasperReportEngine.createInstance( template, servletIOManager.getEnv() , proxyDataset);
          engineInstance.setId(servletIOManager.getParameterAsString("SBI_EXECUTION_ID"));
          servletIOManager.getHttpSession().setAttribute(engineInstance.getId(), engineInstance);
         
         
         
          engineInstance.runReport(reportFile, servletIOManager.getRequest());
         
            
          servletIOManager.writeBackToClient(200, reportFile, true, "report." + outputType, JasperReportEngine.getConfig().getMIMEType(outputType));
         
          // instant cleaning
          reportFile.delete();

          servletIOManager.auditServiceEndEvent();
        } catch(Throwable t) {
          throw new SpagoBIEngineException("An error occurred while executing report. Check log file for more information", t);
        } finally {
          logger.debug("OUT");          
        }       

  }

}
TOP

Related Classes of it.eng.spagobi.engines.jasperreport.services.JasperReportEngineStartAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.