我正在基于birt报告的项目中工作,我对该项目进行了更新并使用了tomcat 7,并且在该birt报告无法工作且旧版本为2.6.2之后,有人可以建议我如何使用以下方法升级birt报告:最新版本以及如何将其部署在tomcat 7服务器上
提前感谢
web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>BirtDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>loadReport</servlet-name>
<servlet-class>BirtIntegration.Controller.BirtReportController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loadReport</servlet-name>
<url-pattern>/loadReport</url-pattern>
</servlet-mapping>
</web-app>
BirtIntegration.BirtViewer
package BirtIntegration.BirtViewer;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.Locale;
import org.eclipse.birt.core.format.DateFormatter;
import org.eclipse.birt.core.format.NumberFormatter;
import org.eclipse.birt.core.format.StringFormatter;
import org.eclipse.birt.report.engine.api.IScalarParameterDefn;
import com.ibm.icu.util.TimeZone;
import com.ibm.icu.util.ULocale;
/**
* Utilites class to convert report parameter value between object and string.
*/
public class ReportParameterConverter
{
private String format = null;
private ULocale uLocale = null;
private TimeZone timeZone = TimeZone.getDefault( );
private StringFormatter sf = null;
private DateFormatter df = null;
private NumberFormatter nf = null;
/**
* @param format format to format report parameter, or recover parameter value as object
* given a string as report parameter value
* @param locale the locale to format/parse the parameter value
*/
public ReportParameterConverter( String format, Locale locale )
{
this( format, ULocale.forLocale( locale ) );
}
/**
* Constructor.
*
* @param format
* @param uLocale
*/
public ReportParameterConverter( String format, ULocale uLocale )
{
this( format, uLocale, null );
}
/**
* Constructor.
*
* @param format
* @param uLocale
* @param timeZone
*/
public ReportParameterConverter( String format, ULocale uLocale,
TimeZone timeZone )
{
this.format = format;
this.uLocale = uLocale;
if ( timeZone != null )
{
this.timeZone = timeZone;
}
}
/**
* Get string formatter.
*
* @return StringFormatter object
*/
private StringFormatter getStringFormatter( )
{
if ( sf == null && uLocale != null )
{
sf = new StringFormatter( uLocale );
if ( format != null )
{
sf.applyPattern( format );
}
}
return sf;
}
/**
* Get number formatter.
*
* @return NumberFormatter object
*/
private NumberFormatter getNumberFormatter( )
{
if ( nf == null && uLocale != null )
{
nf = new NumberFormatter( uLocale );
if ( format != null )
{
nf.applyPattern( format );
}
}
return nf;
}
/**
* Get date formatter.
*
* @return DateFormatter object
*/
private DateFormatter getDateFormatter( )
{
if ( df == null && uLocale != null )
{
df = new DateFormatter( uLocale, timeZone );
if ( format != null )
{
df.applyPattern( format );
}
}
return df;
}
/**
* Convert report parameter value object into string.
*
* @param reportParameterObj report parameter value object.
* @return parameter value in string.
*/
public String format( Object reportParameterObj )
{
String reportParameterValue = null;
if ( reportParameterObj != null && uLocale != null )
{
if ( reportParameterObj instanceof String )
{
StringFormatter sf = getStringFormatter( );
if ( sf != null )
{
reportParameterValue = sf.format( ( String ) reportParameterObj );
}
else
{
reportParameterValue = reportParameterObj.toString( );
}
}
else if ( reportParameterObj instanceof Date )
{
DateFormatter df = getDateFormatter( );
if ( df != null )
{
reportParameterValue = df.format( ( Date ) reportParameterObj );
}
else
{
reportParameterValue = reportParameterObj.toString( );
}
}
else if ( reportParameterObj instanceof Double )
{
NumberFormatter nf = getNumberFormatter( );
if ( nf != null )
{
reportParameterValue = nf
.format( ( (Double) reportParameterObj )
.doubleValue( ) );
}
else
{
reportParameterValue = reportParameterObj.toString( );
}
}
else if ( reportParameterObj instanceof BigDecimal )
{
NumberFormatter nf = getNumberFormatter( );
if ( nf != null )
{
reportParameterValue = nf
.format( (BigDecimal) reportParameterObj );
}
else
{
reportParameterValue = reportParameterObj.toString( );
}
}
else if ( reportParameterObj instanceof Boolean )
{
reportParameterValue = ( ( Boolean ) reportParameterObj ).toString( );
}
else if ( reportParameterObj instanceof Number )
{
NumberFormatter nf = getNumberFormatter( );
if ( nf != null )
{
reportParameterValue = nf.format( ( ( Number ) reportParameterObj ) );
}
else
{
reportParameterValue = reportParameterObj.toString( );
}
}
else
{
reportParameterValue = ( reportParameterObj.toString( ) );
}
}
return reportParameterValue;
}
/**
* Convert report parameter from string into object. Need to be pointed out
* is it return a Double object when the value type is Float.
*
* @param reportParameterValue
* report parameter value in string.
* @param parameterValueType
* report parameter type.
* @return parameter value object.
*/
public Object parse( String reportParameterValue, int parameterValueType )
{
Object parameterValueObj = null;
if ( reportParameterValue != null && uLocale != null )
{
switch ( parameterValueType )
{
case IScalarParameterDefn.TYPE_STRING:
{
StringFormatter sf = getStringFormatter( );
if ( sf == null )
{
parameterValueObj = null;
break;
}
try
{
parameterValueObj = sf.parser( reportParameterValue );
}
catch ( ParseException e )
{
parameterValueObj = reportParameterValue;
}
break;
}
case IScalarParameterDefn.TYPE_DATE_TIME:
{
parameterValueObj = parseDateTime( reportParameterValue );
break;
}
case IScalarParameterDefn.TYPE_FLOAT:
{
NumberFormatter nf = getNumberFormatter( );
if ( nf == null )
{
parameterValueObj = null;
break;
}
try
{
Number num = nf.parse( reportParameterValue );
if ( num != null )
{
parameterValueObj = new Double( num.toString( ) );
}
}
catch ( ParseException e )
{
nf.applyPattern( "General Number" );
try
{
Number num = nf.parse( reportParameterValue );
if ( num != null )
{
parameterValueObj = new Double( num.toString( ) );
}
}
catch ( ParseException ex )
{
parameterValueObj = null;
}
}
break;
}
case IScalarParameterDefn.TYPE_DECIMAL:
{
NumberFormatter nf = getNumberFormatter( );
if ( nf == null )
{
parameterValueObj = null;
break;
}
try
{
Number num = nf.parse( reportParameterValue );
if ( num != null )
{
parameterValueObj = new BigDecimal( num.toString( ) );
}
}
catch ( ParseException e )
{
nf.applyPattern( "General Number" );
try
{
Number num = nf.parse( reportParameterValue );
if ( num != null )
{
parameterValueObj = new BigDecimal( num.toString( ) );
}
}
catch ( ParseException ex )
{
parameterValueObj = null;
}
}
break;
}
case IScalarParameterDefn.TYPE_BOOLEAN:
{
parameterValueObj = Boolean.valueOf( reportParameterValue );
break;
}
case IScalarParameterDefn.TYPE_DATE:
{
try
{
parameterValueObj = java.sql.Date
.valueOf( reportParameterValue );
}
catch ( IllegalArgumentException ie )
{
parameterValueObj = parseDateTime( reportParameterValue );
if ( parameterValueObj != null )
{
parameterValueObj = new java.sql.Date(
( (Date) parameterValueObj ).getTime( ) );
}
}
break;
}
case IScalarParameterDefn.TYPE_TIME:
{
try
{
parameterValueObj = java.sql.Time
.valueOf( reportParameterValue );
}
catch ( IllegalArgumentException ie )
{
parameterValueObj = parseDateTime( reportParameterValue );
if ( parameterValueObj != null )
{
parameterValueObj = new java.sql.Time(
( (Date) parameterValueObj ).getTime( ) );
}
}
break;
}
//can use class DataTypeUtil to convert
case IScalarParameterDefn.TYPE_INTEGER:
{
NumberFormatter nf = getNumberFormatter( );
if ( nf == null )
{
parameterValueObj = null;
break;
}
try
{
Number num = nf.parse( reportParameterValue );
if ( num != null )
{
parameterValueObj = Integer.valueOf( num.intValue( ) );
}
}
catch( ParseException ex )
{
nf.applyPattern( "General Number" );
try
{
Number num = nf.parse( reportParameterValue );
if ( num != null )
{
parameterValueObj = Integer.valueOf( num.intValue( ) );
}
}
catch( ParseException pex )
{
try
{
parameterValueObj = Integer.valueOf( reportParameterValue );
}
catch( NumberFormatException nfe )
{
parameterValueObj = null;
}
}
}
}
}
}
return parameterValueObj;
}
/**
* Parse the input string to an object.
*
* @param reportParameterValue
* input string to parse
* @return an object
*/
protected Object parseDateTime( String reportParameterValue )
{
DateFormatter df = getDateFormatter( );
if ( df == null )
{
return null;
}
try
{
return df.parse( reportParameterValue );
}
catch ( ParseException e )
{
df = new DateFormatter( "Short Date", uLocale );
try
{
return df.parse( reportParameterValue );
}
catch ( ParseException ex )
{
df = new DateFormatter( "Medium Time", uLocale );
try
{
return df.parse( reportParameterValue );
}
catch ( ParseException exx )
{
return null;
}
}
}
}
}
package BirtIntegration.BirtViewer;
import java.io.File;
import java.util.logging.Level;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import BirtIntegration.factory.BirtEngineFactory;
/**
* This class is responsible for initlizing birt engine configuring birt engine,and processing and rendering reports.
*
*/
public class ReportProcessor {
private BirtEngineFactory birtEngineFactory;
private ReportRenderer reportRenderer;
private static ReportProcessor reportProcessor =null;
//private constructor for single tone object.
private ReportProcessor(){
}
public boolean initilizeBirtEngine(){
boolean isInitialized =true;
reportRenderer = new ReportRenderer();
reportRenderer.setBirtEngine( this.getBitEngineFactory().getEngine() );
System.out.println("Bit Engine Successfully Started.");
return isInitialized;
}
/**
* Annotated with @ bean and will create BirtEngineFactory bean.
* @return
*/
private BirtEngineFactory getBitEngineFactory(){
birtEngineFactory = BirtEngineFactory.getBirtEngineFactory() ;
//uncomment to use logging
//birtEngineFactory.setLogLevel( Level.FINEST);
//birt engine logs will be created under this directory.
//currently this line is commented
//birtEngineFactory.setLogDirectory( new File("E:/WorkSpaces/PracticeWorkspace/BirtIntegration/birtlogs"));
return birtEngineFactory;
}
public void shutDownBirtEngine(){
birtEngineFactory.destroy();
}
public void processReport(HttpServletRequest request,
HttpServletResponse response) {
reportRenderer.processReportDesignDocAndRenderReport(request, response);
}
public static ReportProcessor getReportProcessor() {
if(reportProcessor !=null){
return reportProcessor;
}
reportProcessor = new ReportProcessor();
return reportProcessor;
}
}
package BirtIntegration.BirtViewer;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.birt.report.engine.api.EXCELRenderOption;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
import org.eclipse.birt.report.engine.api.HTMLServerImageHandler;
import org.eclipse.birt.report.engine.api.IGetParameterDefinitionTask;
import org.eclipse.birt.report.engine.api.IPDFRenderOption;
import org.eclipse.birt.report.engine.api.IParameterDefnBase;
import org.eclipse.birt.report.engine.api.IRenderOption;
import org.eclipse.birt.report.engine.api.IRenderTask;
import org.eclipse.birt.report.engine.api.IReportDocument;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunTask;
import org.eclipse.birt.report.engine.api.IScalarParameterDefn;
import org.eclipse.birt.report.engine.api.PDFRenderOption;
import org.eclipse.birt.report.engine.api.RenderOption;
/**
* This class is responsible for processing the reports and rendering or downloading the reports.
* It handles the request for rendering the report.
* The method processReportDesignDocAndRenderReport writes the content in response output stream.
*
*/
public class ReportRenderer {
public static final String PARAM_ISNULL = "__isnull";
public static final String UTF_8_ENCODE = "UTF-8";
private IReportEngine birtEngine;
private String reportNameRequestParameter = "ReportName" ;
private String reportFormatRequestParameter = "ReportFormat";
private IRenderOption renderOptions ;
//private static final Logger logger = Logger.getLogger(BirtView.class);
public void setRenderOptions(IRenderOption ro) {
this.renderOptions = ro;
}
/**
* This is overridden method which responsible for processing report i.e .rptdesign document.and also rendering the report.
* <br>It also handles downloading the report.
*
*/
protected void processReportDesignDocAndRenderReport(HttpServletRequest request,
HttpServletResponse response) {
try{
//get report name from request object.
String reportName = request.getParameter( this.reportNameRequestParameter );
//logger.info("Processing report:"+reportName);
//get format in which we are going to render report i.e:html,pdf,excel
String format = request.getParameter( this.reportFormatRequestParameter );
//pagination handling
String pageNumber = request.getParameter("pageNumber");
int currentPageNumber=0;
if(pageNumber!=null&&!pageNumber.equals(""))
{
currentPageNumber = Integer.valueOf(pageNumber);
}
//give the download report Name here.
String downloadFileName = "MyReport";
//Base URL
String baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+request.getContextPath();
ServletContext sc = request.getSession().getServletContext();
if( format == null ){
format="html";//default format
}
IReportRunnable runnable = null;
//opend design document
runnable = birtEngine.openReportDesign( sc.getRealPath("/Reports")+"/"+reportName );
//first process the report using Iruntask which will create the temp.rptdocument
IRunTask iRunTask = birtEngine.createRunTask(runnable);
iRunTask.getAppContext().put( EngineConstants.APPCONTEXT_BIRT_VIEWER_HTTPSERVET_REQUEST, request );
//put the parameter values from request to the report parameter
iRunTask.setParameterValues(discoverAndSetParameters( runnable, request ));
//create temp rpddocument
iRunTask.run(sc.getRealPath("/Reports")+"/temp.rptdocument");
iRunTask.close();
//now do the rendering operation
IReportDocument reportDoc = birtEngine.openReportDocument( sc.getRealPath("/Reports")+"/temp.rptdocument" );
IRenderTask iRenderTask= birtEngine.createRenderTask(reportDoc);
//set the format
response.setContentType( birtEngine.getMIMEType( format ));
IRenderOption options = null == this.renderOptions ? new RenderOption() : this.renderOptions;
//if html set html related options
if( format.equalsIgnoreCase("html")){
HTMLRenderOption htmlOptions = new HTMLRenderOption( options);
htmlOptions.setOutputFormat("html");
htmlOptions.setOutputStream(response.getOutputStream());
htmlOptions.setImageHandler(new HTMLServerImageHandler());
htmlOptions.setHtmlPagination(true);
htmlOptions.setBaseImageURL(baseUrl+"/images");//TODO:Change from local host to actual path
htmlOptions.setImageDirectory(sc.getRealPath("/images"));
htmlOptions.setSupportedImageFormats("PNG");
htmlOptions.setEmbeddable(true);
iRenderTask.setRenderOption(htmlOptions);
//if pdf set pdf related downloading options
}else if( format.equalsIgnoreCase("pdf") ){
PDFRenderOption pdfOptions = new PDFRenderOption( options );
pdfOptions.setSupportedImageFormats("PNG;GIF;JPG;BMP");
pdfOptions.setOutputFormat("pdf");
pdfOptions.setImageHandler(new HTMLServerImageHandler());
pdfOptions.setBaseURL(baseUrl);
//pdfOptions.setOutputFileName("my.pdf");
pdfOptions.setOption(IPDFRenderOption.PAGE_OVERFLOW, IPDFRenderOption.FIT_TO_PAGE_SIZE);
response.setHeader( "Content-Disposition", "attachment; filename="+downloadFileName );
pdfOptions.setOutputStream(response.getOutputStream());
iRenderTask.setRenderOption(pdfOptions);
//if XLS set XLS related downloading options
}else if(format.equalsIgnoreCase("xls")){
EXCELRenderOption xlsOptions = new EXCELRenderOption(options);
xlsOptions.setOutputFormat("xls");
response.setHeader( "Content-Disposition", "attachment; filename="+downloadFileName);
xlsOptions.setImageHandler(new HTMLServerImageHandler());
xlsOptions.setOutputStream(response.getOutputStream());
//xlsOptions.setOption(IRenderOption.EMITTER_ID, "org.uguess.birt.report.engine.emitter.xls");
xlsOptions.setOption(IRenderOption.EMITTER_ID, "org.eclipse.birt.report.engine.emitter.prototype.excel");
iRenderTask.setRenderOption(xlsOptions);
}else{
response.setHeader( "Content-Disposition", "attachment; filename=\"" + downloadFileName + "\"" );
options.setOutputStream(response.getOutputStream());
options.setOutputFormat(format);
iRenderTask.setRenderOption(options);
}
/*
* This is used for pagination and setting the page number we want to display
*/
long pageCount = iRenderTask.getTotalPage();
if(currentPageNumber!=0)
{
if(pageCount >=currentPageNumber){
iRenderTask.setPageNumber(currentPageNumber);
}
}
//save the page count in session to use for pagination.
//using this page count we can implement pagination.
request.getSession().setAttribute("pageCount", pageCount);
//render report
iRenderTask.render();
//close task and doc
iRenderTask.close();
reportDoc.close();
//logger.info("Processing report completed successfully:"+reportName);
}catch (Exception e) {
//logger.error("Exception while proceessing report ",e);
e.printStackTrace();
}
}
/**
* Set parameters from request to the report parameter.
*
* @param report
* @param request
* @return
* @throws Exception
*/
protected HashMap discoverAndSetParameters( IReportRunnable report, HttpServletRequest request ) throws Exception{
HashMap<String, Object> parms = new HashMap<String, Object>();
IGetParameterDefinitionTask task = birtEngine.createGetParameterDefinitionTask( report );
@SuppressWarnings("unchecked")
Collection<IParameterDefnBase> params = task.getParameterDefns( true );
Iterator<IParameterDefnBase> iter = params.iterator( );
while ( iter.hasNext( ) )
{
IParameterDefnBase param = (IParameterDefnBase) iter.next( );
IScalarParameterDefn scalar = (IScalarParameterDefn) param;
if( request.getParameter(param.getName()) != null && !request.getParameter(param.getName()).trim().equals("")){
parms.put( param.getName(), getParamValueObject( request, scalar));
}
}
task.close();
return parms;
}
/**
* Get parameter value
* @param request
* @param parameterObj
* @return
* @throws Exception
*/
protected Object getParamValueObject( HttpServletRequest request,
IScalarParameterDefn parameterObj ) throws Exception
{
String paramName = parameterObj.getName( );
String format = parameterObj.getDisplayFormat( );
if ( doesReportParameterExist( request, paramName ) )
{
ReportParameterConverter converter = new ReportParameterConverter(format, request.getLocale( ) );
// Get value from http request
String paramValue = getReportParameter( request,
paramName, null );
return converter.parse( paramValue, parameterObj.getDataType( ) );
}
return null;
}
public static String getReportParameter( HttpServletRequest request,
String name, String defaultValue )
{
assert request != null && name != null;
String value = getParameter( request, name );
if ( value == null || value.length( ) <= 0 ) // Treat
// it as blank value.
{
value = ""; //$NON-NLS-1$
}
Map paramMap = request.getParameterMap( );
if ( paramMap == null || !paramMap.containsKey( name ) )
{
value = defaultValue;
}
Set nullParams = getParameterValues( request, PARAM_ISNULL );
if ( nullParams != null && nullParams.contains( name ) )
{
value = null;
}
return value;
}
/**
* Check if report parameter exist
* @param request
* @param name
* @return
*/
public static boolean doesReportParameterExist( HttpServletRequest request,
String name )
{
assert request != null && name != null;
boolean isExist = false;
Map paramMap = request.getParameterMap( );
if ( paramMap != null )
{
isExist = ( paramMap.containsKey( name ) );
}
Set nullParams = getParameterValues( request, PARAM_ISNULL );
if ( nullParams != null && nullParams.contains( name ) )
{
isExist = true;
}
return isExist;
}
/**
* Get paramter value from request object
* @param request
* @param parameterName
* @return
*/
public static String getParameter( HttpServletRequest request,
String parameterName )
{
if ( request.getCharacterEncoding( ) == null )
{
try
{
request.setCharacterEncoding( UTF_8_ENCODE );
}
catch ( UnsupportedEncodingException e )
{
}
}
return request.getParameter( parameterName );
}
//allows setting parameter values to null using __isnull
public static Set getParameterValues( HttpServletRequest request,
String parameterName )
{
Set<String> parameterValues = null;
String[] parameterValuesArray = request.getParameterValues( parameterName );
if ( parameterValuesArray != null )
{
parameterValues = new LinkedHashSet<String>( );
for ( int i = 0; i < parameterValuesArray.length; i++ )
{
parameterValues.add( parameterValuesArray[i] );
}
}
return parameterValues;
}
/**
* Setter for birtEngine
* @param birtEngine
*/
public void setBirtEngine(IReportEngine birtEngine) {
this.birtEngine = birtEngine;
}
}
BirtIntegration.Controller
package BirtIntegration.Controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import BirtIntegration.BirtViewer.ReportProcessor;
public class BirtReportController extends HttpServlet {
//this is the single tone class.
private ReportProcessor processor ;
@Override
public void init(){
processor = ReportProcessor.getReportProcessor();
processor.initilizeBirtEngine();
System.out.println("Engine Initilized!!");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("processing report complete");
processor.processReport(request, response);
}
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
@Override
public void destroy(){
processor.shutDownBirtEngine();
}
}
BirtIntegration.factory
package BirtIntegration.factory;
import java.io.File;
import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
/**
*
*Factory class for the instance of the {@link IReportEngine report engine}.
*Responsible for creating IReportEngine and also destroying the engine.
*
*/
public class BirtEngineFactory {
public boolean isSingleton(){ return true ; }
private IReportEngine birtEngine ;
private File _resolvedDirectory ;
private java.util.logging.Level logLevel ;
private static BirtEngineFactory birtEngineFactory;
private BirtEngineFactory(){
}
public static BirtEngineFactory getBirtEngineFactory(){
if(birtEngineFactory == null){
birtEngineFactory = new BirtEngineFactory();
}
return birtEngineFactory;
}
/**
* Destroy birt engine.
* and shut down platform
*
* call this method while destroying your application context.
*/
public void destroy() {
try{
birtEngine.destroy();
Platform.shutdown() ;
System.out.println("Engine successfully destroyed and platform is shutdown!!");
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* Set log level
* @param ll
*/
public void setLogLevel( java.util.logging.Level ll){
this.logLevel = ll ;
}
/**
* Setting log file.
* if log directory is not present.It will be created
* @param f
*/
public void setLogDirectory ( java.io.File f ){
//TODO: if puts wrong path please validate that here.
if(!f.exists()){
f.mkdirs();
}
this._resolvedDirectory = f;
}
/**
* Factory method for birt engine.
*/
public IReportEngine getEngine(){
if(birtEngine !=null){
}
EngineConfig config = getEngineConfig();
try {
Platform.startup( config );
}
catch ( BirtException e ) {
e.printStackTrace();
}
IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
IReportEngine be = factory.createReportEngine( config );
this.birtEngine = be ;
return be ;
}
/**
* Set engine configuration like logs and other things as per the need
* @return
*/
public EngineConfig getEngineConfig(){
EngineConfig config = new EngineConfig();
//This line injects the Spring Context into the BIRT Context
//Put what ever you want to put in Birt Context which will be avail thought out the life cycle of birt engine context
//config.getAppContext().put("struts", springContext );
//config.setLogConfig( null != this._resolvedDirectory ? this._resolvedDirectory.getAbsolutePath() : null , this.logLevel);
//please take care of how many log files are created and with how much size
//below code some how not taking of it.Check javaDoc of EngineConfig
//config.setLogMaxBackupIndex(5);
//config.setLogRollingSize(5242880); //5mb
return config;
}
public Class<?> getObjectType() {
return IReportEngine.class;
}
}
JSP / reports.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Reports</TITLE>
<script type="text/javascript" src="/BirtDemo/js/jquery-1.7.1.js"></script>
<script type="text/javascript" src="/BirtDemo/js/report.js"> </script>
</HEAD>
<BODY style="background-color: #F0F0F0;">
<div>
<h3 align="center" style="color:#84A9CF">Birt Integration With Web Application Using Ajax</h3>
<div style="float: left;width: 25%;">
<fieldset style="background-color: white;">
<legend >
<b style="color:#84A9CF">Select Reports</b>
</legend>
<ul>
<li> <a href="#" onclick="generateReport('First_Report.rptdesign')" >Hello World Report</a></li>
<li> <a href="#" onclick="generateReport('books_report.rptdesign')">Books Details Report</a></li>
</ul>
</fieldset>
</div>
<fieldset style="background-color: white;">
<legend>
<b style="color:#84A9CF">Report Details:</b>
</legend>
<div id="downloadOptions" align="right">
<div id="paginationDiv"></div>
Dwonload Report as:
<a href="#" onclick="downloadReport('pdf')" >pdf</a>,
<a href="#" onclick="downloadReport('xls')" >xls</a>,
<a href="#" onclick="downloadReport('doc')" >doc</a>,
</div>
<button onclick="getPageCount()">Page count</button>
<div id="reportData" style="height: auto; background-color: white;float: left;min-width: 70%;text-align: center;" align="center">
<br>
Reports will be loaded here when user selects report from left navigation.
</div>
</fieldset>
</div>
</BODY>
</HTML>
JS / report.js
/**
* This js contains two method
* 1)generateReport(reportName) : Requesting to load the report content in div.
* 2)downloadReport(format): Downloading the current report in given format.
*/
//this will hold the currently loaded report name.
currentReportName="";
currentPageNumber =1;
paginationFlag=false;
/**
* This method is responsible for loading the reports in the report div.
* @param localReportName
*/
function generateReport(reportName) {
// here relative url is given if relative url is not working try giving full url
var reporturl ="/BirtDemo/loadReport?ReportName="+reportName+"&ReportFormat=html"+"&pageNumber="+currentPageNumber;
$("#reportData").html("Loading...<br><img src='/BirtDemo/images/loading.gif' align='middle' >");
$('#reportData').load(reporturl ,function(response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error getting details ! ";
$("#reportData").html(msg + xhr.status + " " + xhr.statusText);
}
});
currentReportName=reportName;
//once you set pagination skip pagination next time
if(currentReportName =="books_report.rptdesign" && paginationFlag==false){
setPagePagination();
paginationFlag=true;
}
}
/**
* Download report function
*
* @param format
*/
function downloadReport(format){
if(currentReportName==""){
alert("Please Select the report.");
return;
}
//here relative url is given if relative url is not working try giving full url
var reporturl ="/BirtDemo/loadReport?ReportName="+currentReportName+"&ReportFormat="+format;
window.location.href = reporturl;
}
function setPagePagination(){
var reporturl ="/BirtDemo/getPageCount";
$.ajax({
type : 'GET',//GET Or POST
url : reporturl,
cache: false, //get fresh copy of details.html instead of cahced one
success: function(response, textStatus, jqXHR){
alert("Total number pagination pages are :"+response);
var pageCount = response;
var paginationHtml="";
//create pagincation html
for(var i=1;i<=pageCount;i++){
paginationHtml = paginationHtml +" <b><a href='#' >"+i+"</a></b>" +" |";
}
$("#paginationDiv").html("pagination -->"+paginationHtml);
$("#paginationDiv a").click(function(){
alert("---"+$(this).text()+"---");
currentPageNumber =$(this).text();
generateReport(currentReportName);
});
}
});
}
报告