Setting BIRT datasource through its API

birt, java, jdbc

Solution

Researching this deeper I found the solution to my own question and thought I'd share the answer.

To clarify I was looking for a way to connect my code to a `datasource`, so my `BIRT` report queries would run. I found that, I can pass in a connection via the `IGetParameterDefinitionTask` object by getting the application context then setting the connection in this object through a key value pair setting.

See this line in the code below... `task.getAppContext().put("OdaJDBCDriverPassInConnection", conn);`

public class ReportGenerator {
public static void main(String args[]) throws EngineException {
    ReportGenerator reportGenerator = new ReportGenerator();
    reportGenerator.executeReport();
}

public void executeReport() throws EngineException {

    IReportEngine engine=null;
    EngineConfig config = null;

    try{
        config = new EngineConfig( );           
        config.setBIRTHome("C:\\birt-rcp-report-designer-3_7_2\\ReportEngine");
        config.setLogConfig("c:/temp/test", Level.FINEST);
        Platform.startup( config );
        IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
        engine = factory.createReportEngine( config );      

        IReportRunnable design = null;
        //Open the report design
        design = engine.openReportDesign("ReportTemplates/testNoData.rptdesign"); 
        IRunAndRenderTask task = engine.createRunAndRenderTask(design);
        task.setParameterValue("AuthorName", "Dale DeMott");
        HTMLRenderOption options = new HTMLRenderOption();      
        options.setOutputFileName("output/resample/Parmdisp.html");
        options.setOutputFormat("html");

        task.setRenderOption(options);

        //Connection helper is a utility class used to create a connection to your
        //database and return it.  
        ConnectionHelper connectionHelper = new ConnectionHelper();
        Connection conn = connectionHelper.getConnection();
        task.getAppContext().put("OdaJDBCDriverPassInConnection", conn);

        task.run();
        task.close();
        engine.destroy();
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        Platform.shutdown();
    }
}
}

Problem

I'm looking for some direction for coding the BIRT API w/ a datasource. I'm unsure of how to configure my application to access a created datasource. If I can get some help w/this it would be great. Here's where I am. I've already created a report through BIRT RCP. Now I'm looking to generate the report using a regular java application AND a web application. Both will be passing in date parameters through a GUI that I'll be creating. Both need to have a datasource. I've have seen some examples here that use the Report Designer however I am not using that. I'm also NOT using the BIRT Report Creator (RCP) GUI to generate this. Thanks ``` import java.util.logging.Level; import org.eclipse.birt.core.framework.Platform; import org.eclipse.birt.report.engine.api.EngineConfig; import org.eclipse.birt.report.engine.api.EngineException; import org.eclipse.birt.report.engine.api.HTMLRenderOption; import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.engine.api.IReportEngineFactory; import org.eclipse.birt.report.engine.api.IReportRunnable; import org.eclipse.birt.report.engine.api.IRunAndRenderTask; public class ReportGenerator { public static void main(String args[]) throws EngineException { ReportGenerator reportGenerator = new ReportGenerator(); reportGenerator.executeReport(); } public void executeReport() throws EngineException { IReportEngine engine=null; EngineConfig config = null; try{ config = new EngineConfig( ); config.setBIRTHome("C:\\birt-rcp-report-designer-3_7_2\\ReportEngine"); config.setLogConfig("c:/temp/test", Level.FINEST); Platform.startup( config ); IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY ); engine = factory.createReportEngine( config ); IReportRunnable design = null; //Open the report design design = engine.openReportDesign("ReportTemplates/testNoData.rptdesign"); IRunAndRenderTask task = engine.createRunAndRenderTask(design); task.setParameterValue("AuthorName", "Dale DeMott"); HTMLRenderOption options = new HTMLRenderOption(); options.setOutputFileName("output/resample/Parmdisp.html"); options.setOutputFormat("html"); task.setRenderOption(options); //Looking to create and insert a datasource here. //task.setDataSource(some parameters here that represent the ds); task.run(); task.close(); engine.destroy(); } catch (Exception ex) { ex.printStackTrace(); } finally { Platform.shutdown(); } } } ```

Original source