Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Dynamic Table"

 
Line 3: Line 3:
 
This example opens an existing report and adds a data source, data set and a table.
 
This example opens an existing report and adds a data source, data set and a table.
 
The table columns are dynamically created based on an ArrayList that is passed in.  The columns must
 
The table columns are dynamically created based on an ArrayList that is passed in.  The columns must
exist in the query that is passed in as well.
+
exist in the query that is passed in.
  
 
Add comments at the bottom of the example.
 
Add comments at the bottom of the example.

Revision as of 23:20, 11 October 2006

Dynamic Table

This example opens an existing report and adds a data source, data set and a table. The table columns are dynamically created based on an ArrayList that is passed in. The columns must exist in the query that is passed in.

Add comments at the bottom of the example.

BIRT Design Engine API Return to the BIRT Design Engine API examples

Source

DECreateDynamicTable.java

import java.io.IOException;
import java.util.ArrayList; 

import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.model.api.CellHandle;
import org.eclipse.birt.report.model.api.DataItemHandle;
import org.eclipse.birt.report.model.api.DesignConfig; 
import org.eclipse.birt.report.model.api.ElementFactory;
import org.eclipse.birt.report.model.api.IDesignEngine;
import org.eclipse.birt.report.model.api.IDesignEngineFactory;
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.SessionHandle;
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;

import com.ibm.icu.util.ULocale;

/**
 * Dynamic Table BIRT Design Engine API (DEAPI) demo.
 */

public class DECreateDynamicTable
{
	ReportDesignHandle designHandle = null;
	ElementFactory designFactory = null;
	StructureFactory structFactory = null;	
 
	public static void main( String[] args )
	{
		try
		{
			DECreateDynamicTable de = new DECreateDynamicTable();
			ArrayList al = new ArrayList();
			al.add("OFFICECODE");
			al.add("CITY");
			al.add("COUNTRY");
			
			de.buildReport(al, "From Offices" );
		}
		catch ( IOException e )
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch ( SemanticException e )
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	void buildDataSource( ) 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(ArrayList cols, String fromClause ) 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.size(); i++){
			qry += " " + cols.get(i);
			if( i != (cols.size() -1) ){
				qry += ",";
			}
			
		}
		qry += " " + fromClause;
		
		dsHandle.setQueryText( qry );

		designHandle.getDataSets( ).add( dsHandle );
		
 		
		
	}
	void buildReport(ArrayList cols, String fromClause ) throws IOException, SemanticException
	{


		//Configure the Engine and start the Platform
		DesignConfig config = new DesignConfig( );

		config.setProperty("BIRT_HOME", "C:/birt-runtime-2_1_1/birt-runtime-2_1_1/ReportEngine");
 		IDesignEngine engine = null;
		try{


			Platform.startup( config );
			IDesignEngineFactory factory = (IDesignEngineFactory) Platform
			.createFactoryObject( IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY );
			engine = factory.createDesignEngine( config );

		}catch( Exception ex){
 			ex.printStackTrace();
		}		


		SessionHandle session = engine.newSessionHandle( ULocale.ENGLISH ) ;

	

		try{
			//open a design or a template
			designHandle = session.openDesign("c:/tmp/testdeapi.rptdesign");

			designFactory = designHandle.getElementFactory( );
 
			buildDataSource();
 			buildDataSet(cols, fromClause);
 
			TableHandle table = designFactory.newTableItem( "table", cols.size() );
			table.setWidth( "100%" );
 			table.setDataSet( designHandle.findDataSet( "ds" ) );
 
			 
   			PropertyHandle computedSet = table.getColumnBindings( ); 
			ComputedColumn  cs1 = null;

			for( int i=0; i < cols.size(); i++){
				cs1 = StructureFactory.createComputedColumn();
 				cs1.setName((String)cols.get(i));
				cs1.setExpression("dataSetRow[\"" + (String)cols.get(i) + "\"]");
				computedSet.addItem(cs1);
			}
		
			
			// table header
			RowHandle tableheader = (RowHandle) table.getHeader( ).get( 0 );

 			
 			for( int i=0; i < cols.size(); i++){
 				LabelHandle label1 = designFactory.newLabel( (String)cols.get(i) );	
 				label1.setText((String)cols.get(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.size(); i++){
				CellHandle cell = (CellHandle) tabledetail.getCells( ).get( i );
  				DataItemHandle data = designFactory.newDataItem( "data_"+(String)cols.get(i) );
  				data.setResultSetColumn( (String)cols.get(i));
   				cell.getContent( ).add( data );
 			}
 
 			designHandle.getBody( ).add( table );
 
			// Save the design and close it. 

			designHandle.saveAs( "c:/temp/sample.rptdesign" ); //$NON-NLS-1$
			designHandle.close( );
 			System.out.println("Finished");
		}catch (Exception e){
			e.printStackTrace();
		}		

	}
 }

Comments

Please enter comments below by selecting the edit icon to the right. You will need a Bugzilla account to add comments.


Back to the top