Jump to: navigation, search

Difference between revisions of "Dynamic Report Servlet"

(Replacing page with '== Dynamic Report Servlet == Moved to the new examples area. Java - Dynamic Report Servlet (BIRT) Category:BIRT Category:BIRT Example OLD')
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== Dynamic Report Servlet ==
 
== Dynamic Report Servlet ==
  
This example demonstrate using the DE API to add a table to an existing report or template while running it within a servlet.
+
Moved to the new examples area. [[Java - Dynamic Report Servlet (BIRT)]]
This example should be setup as described in the Report Engine API [[Servlet Example]].  This class should replace the WebReport class.
+
Add comments at the bottom of the example.
+
  
[[BIRT Design Engine API]] Return to the BIRT Design Engine API examples
 
  
== Source ==
+
[[Category:BIRT]]
===Dynamic.html===
+
[[Category:BIRT Example OLD]]
Place this file in the webapps/DynamicReport directory.
+
<html>
+
<head>
+
</head>
+
<body>
+
The Query that is used for this example is Select * From OFFICES
+
<form id="form1" method="get" action="http://localhost:8080/DynamicReport/run">
+
<select name="dyna1" multiple size="8" >
+
<option value="COUNTRY">COUNTRY</option>
+
<option value="CITY">CITY</option>
+
<option value="STATE">STATE</option>
+
<option value="OFFICECODE">OFFICECODE</option>
+
<option value="ADDRESSLINE1">ADDRESSLINE1</option>
+
<option value="ADDRESSLINE2">ADDRESSLINE2</option>
+
<option value="POSTALCODE">POSTALCODE</option>
+
<option value="TERRITORY">TERRITORY</option>
+
</select><br>
+
<INPUT TYPE="SUBMIT" VALUE="Run Dynamic Report">
+
<INPUT TYPE="HIDDEN" NAME="ReportName" Value="DynamicTableExample.rpttemplate">
+
</form>
+
</body>
+
</html>
+
===DynamicReport.java===
+
+
import java.io.IOException;
+
import java.io.PrintWriter;
+
import java.util.ArrayList;
+
import java.util.HashMap;
+
import java.util.logging.Level;
+
import java.util.logging.Logger;
+
+
import javax.servlet.ServletContext;
+
import javax.servlet.ServletException;
+
import javax.servlet.http.HttpServlet;
+
import javax.servlet.http.HttpServletRequest;
+
import javax.servlet.http.HttpServletResponse;
+
+
import org.eclipse.birt.report.engine.api.EngineConstants;
+
import org.eclipse.birt.report.engine.api.HTMLRenderContext;
+
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
+
import org.eclipse.birt.report.engine.api.IReportRunnable;
+
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
+
import org.eclipse.birt.report.engine.api.IReportEngine;
+
import org.eclipse.birt.report.model.api.CellHandle;
+
import org.eclipse.birt.report.model.api.DataItemHandle;
+
import org.eclipse.birt.report.model.api.ElementFactory;
+
import org.eclipse.birt.report.model.api.LabelHandle;
+
import org.eclipse.birt.report.model.api.OdaDataSetHandle;
+
import org.eclipse.birt.report.model.api.OdaDataSourceHandle;
+
import org.eclipse.birt.report.model.api.PropertyHandle;
+
import org.eclipse.birt.report.model.api.ReportDesignHandle;
+
import org.eclipse.birt.report.model.api.RowHandle;
+
import org.eclipse.birt.report.model.api.StructureFactory;
+
import org.eclipse.birt.report.model.api.TableHandle;
+
import org.eclipse.birt.report.model.api.activity.SemanticException;
+
import org.eclipse.birt.report.model.api.elements.structures.ComputedColumn;
+
+
+
public class DynamicReport extends HttpServlet {
+
+
/**
+
*
+
*/
+
private static final long serialVersionUID = 1L;
+
/**
+
* Constructor of the object.
+
*/
+
private IReportEngine birtReportEngine = null;
+
protected static Logger logger = Logger.getLogger( "org.eclipse.birt" );
+
+
public DynamicReport() {
+
super();
+
}
+
+
/**
+
* Destruction of the servlet. <br>
+
*/
+
public void destroy() {
+
super.destroy();
+
BirtEngine.destroyBirtEngine();
+
}
+
+
+
/**
+
* The doGet method of the servlet. <br>
+
*
+
*/
+
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
+
throws ServletException, IOException {
+
+
//get report name and launch the engine
+
resp.setContentType("text/html");
+
//resp.setContentType( "application/pdf" );
+
//resp.setHeader ("Content-Disposition","inline; filename=test.pdf");
+
String reportName = req.getParameter("ReportName");
+
String[] cols = (String[])req.getParameterMap().get("dyna1");
+
ServletContext sc = req.getSession().getServletContext();
+
this.birtReportEngine = BirtEngine.getBirtEngine(sc);
+
+
//setup image directory
+
HTMLRenderContext renderContext = new HTMLRenderContext();
+
renderContext.setBaseImageURL(req.getContextPath()+"/images");
+
  renderContext.setImageDirectory(sc.getRealPath("/images"));
+
+
logger.log( Level.FINE, "image directory " + sc.getRealPath("/images"));
+
System.out.println("stdout image directory " + sc.getRealPath("/images"));
+
+
HashMap contextMap = new HashMap();
+
  contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext );
+
+
IReportRunnable design;
+
try
+
{
+
//Open report design
+
design = birtReportEngine.openReportDesign( sc.getRealPath("/Reports")+"/"+reportName );
+
  ReportDesignHandle report = (ReportDesignHandle) design.getDesignHandle( );
+
buildReport( cols,  report );
+
+
//create task to run and render report
+
IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask( design );
+
task.setAppContext( contextMap );
+
+
//set output options
+
HTMLRenderOption options = new HTMLRenderOption();
+
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
+
  //options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);
+
options.setOutputStream(resp.getOutputStream());
+
task.setRenderOption(options);
+
+
//run report
+
task.run();
+
task.close();
+
}catch (Exception e){
+
+
  e.printStackTrace();
+
  throw new ServletException( e );
+
}
+
}
+
+
public void buildReport(String[] cols, ReportDesignHandle designHandle){
+
+
 
+
try{
+
ElementFactory designFactory = designHandle.getElementFactory( );
+
+
buildDataSource(designFactory, designHandle);
+
+
+
//ArrayList cols = new ArrayList();
+
//cols.add("OFFICECODE");
+
//cols.add("CITY");
+
//cols.add("COUNTRY");
+
+
buildDataSet(cols, "From Offices", designFactory, designHandle);
+
+
TableHandle table = designFactory.newTableItem( "table", cols.length );
+
table.setWidth( "100%" );
+
table.setDataSet( designHandle.findDataSet( "ds" ) );
+
+
+
PropertyHandle computedSet = table.getColumnBindings( );
+
ComputedColumn  cs1 = null;
+
+
for( int i=0; i < cols.length; i++){
+
  cs1 = StructureFactory.createComputedColumn();
+
cs1.setName((String)cols[i]);
+
cs1.setExpression("dataSetRow[\"" + (String)cols[i] + "\"]");
+
computedSet.addItem(cs1);
+
}
+
+
+
// table header
+
RowHandle tableheader = (RowHandle) table.getHeader( ).get( 0 );
+
+
+
for( int i=0; i < cols.length; i++){
+
LabelHandle label1 = designFactory.newLabel( (String)cols[i] );
+
label1.setText((String)cols[i]);
+
CellHandle cell = (CellHandle) tableheader.getCells( ).get( i );
+
cell.getContent( ).add( label1 );
+
}
+
+
// table detail
+
RowHandle tabledetail = (RowHandle) table.getDetail( ).get( 0 );
+
for( int i=0; i < cols.length; i++){
+
CellHandle cell = (CellHandle) tabledetail.getCells( ).get( i );
+
DataItemHandle data = designFactory.newDataItem( "data_"+(String)cols[i] );
+
data.setResultSetColumn( (String)cols[i]);
+
cell.getContent( ).add( data );
+
}
+
+
+
 
+
designHandle.getBody( ).add( table );
+
}catch(Exception e){
+
e.printStackTrace();
+
}
+
 
+
}
+
+
void buildDataSource( ElementFactory designFactory, ReportDesignHandle designHandle ) throws SemanticException
+
{
+
+
OdaDataSourceHandle dsHandle = designFactory.newOdaDataSource(
+
"Data Source", "org.eclipse.birt.report.data.oda.jdbc" );
+
dsHandle.setProperty( "odaDriverClass",
+
  "org.eclipse.birt.report.data.oda.sampledb.Driver" );
+
dsHandle.setProperty( "odaURL", "jdbc:classicmodels:sampledb" );
+
dsHandle.setProperty( "odaUser", "ClassicModels" );
+
dsHandle.setProperty( "odaPassword", "" );
+
+
designHandle.getDataSources( ).add( dsHandle );
+
+
}
+
+
void buildDataSet(String[] cols, String fromClause, ElementFactory designFactory, ReportDesignHandle designHandle ) throws SemanticException
+
{
+
 
+
OdaDataSetHandle dsHandle = designFactory.newOdaDataSet( "ds",
+
"org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet" );
+
dsHandle.setDataSource( "Data Source" );
+
String qry = "Select ";
+
for( int i=0; i < cols.length; i++){
+
qry += " " + cols[i];
+
if( i != (cols.length -1) ){
+
qry += ",";
+
}
+
+
}
+
qry += " " + fromClause;
+
+
dsHandle.setQueryText( qry );
+
 
+
  designHandle.getDataSets( ).add( dsHandle );
+
+
 
+
}
+
  /**
+
  * The doPost method of the servlet. <br>
+
  *
+
  */
+
  public void doPost(HttpServletRequest request, HttpServletResponse response)
+
  throws ServletException, IOException {
+
+
response.setContentType("text/html");
+
PrintWriter out = response.getWriter();
+
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
+
out.println("<HTML>");
+
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
+
out.println("  <BODY>");
+
out.println(" Post Not Supported");
+
out.println("  </BODY>");
+
out.println("</HTML>");
+
out.flush();
+
out.close();
+
}
+
+
/**
+
* Initialization of the servlet. <br>
+
*
+
* @throws ServletException if an error occure
+
*/
+
  public void init() throws ServletException {
+
BirtEngine.initBirtConfig();
+
+
}
+
+
}
+
+
===web.xml===
+
<?xml version="1.0" encoding="utf-8"?>
+
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
+
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
+
<web-app>
+
+
    <display-name>DynamicReport</display-name>
+
+
+
<servlet>
+
<servlet-name>DynamicReport</servlet-name>
+
<servlet-class>DynamicReport</servlet-class>
+
</servlet>
+
+
<servlet-mapping>
+
<servlet-name>DynamicReport</servlet-name>
+
<url-pattern>/run</url-pattern>
+
</servlet-mapping>
+
+
+
</web-app>
+
----
+
 
+
== Comments ==
+
Please enter comments below by selecting the edit icon to the right.
+
You will need a Bugzilla account to add comments.
+
 
+
----
+

Latest revision as of 12:12, 9 April 2007

Dynamic Report Servlet

Moved to the new examples area. Java - Dynamic Report Servlet (BIRT)