Eclipse BIRTで参照するデータソースをJava側から変更させる方法

2013-06-22T00:00:00+00:00 Eclipse BIRT Java

Eclipse BIRTとか使ってると、Eclipseで作業しているには問題無いけど動かす際にJDBCを利用する辺りの情報をJava等で操作出来るようにしたいとかっていうようなケースがあった場合どうすれば良いのか

import com.ibm.icu.util.ULocale;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.data.oda.jdbc.Connection;
import org.eclipse.birt.report.data.oda.jdbc.OdaJdbcDriver;
import org.eclipse.birt.report.model.api.DesignConfig;
import org.eclipse.birt.report.model.api.IDesignEngine;
import org.eclipse.birt.report.model.api.IDesignEngineFactory;
import org.eclipse.birt.report.model.api.OdaDataSourceHandle;
import org.eclipse.birt.report.model.api.ReportDesignHandle;
import org.eclipse.birt.report.model.api.SessionHandle;

public class Client {
    public static void main(String[] args) throws Exception {
        Platform.startup();
        IDesignEngineFactory factory = (IDesignEngineFactory)Platform.createFactoryObject(
            IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY
        );

        IDesignEngine engine = factory.createDesignEngine(new DesignConfig());
        SessionHandle session = engine.newSessionHandle(ULocale.JAPANESE);

        ReportDesignHandle handle = session.openDesign(
            ClassLoader.getSystemResource("sample.rptdesign").getFile()
        );

        // 既にあるDataSourceを削除
        handle.getDataSources().drop(0);

        // データソースを作る。データセットが参照するデータソース名と合わせる事
        OdaDataSourceHandle dsHandle = handle.getElementFactory().newOdaDataSource(
            "dsrc",
            OdaJdbcDriver.Constants.DATA_SOURCE_ID
        );

        // JDBCドライバを設定
        dsHandle.setProperty(
            Connection.Constants.ODADriverClass,
            "com.mysql.jdbc.Driver"
        );

        // JDBC接続URLWo設定
        dsHandle.setProperty(
            Connection.Constants.ODAURL,
            "jdbc:mysql://localhost:3306/shop_test"
        );

        // JDBC接続ユーザーを設定
        dsHandle.setProperty(
            Connection.Constants.ODAUser,
            "username"
        );

        // JDBC接続ユーザーのパスワードを設定
        dsHandle.setProperty(
            Connection.Constants.ODAPassword,
            "password"
        );

        handle.getDataSources().add(dsHandle);

        // 新しくレポートデザインファイルを生成する
        handle.saveAs("report.rptdesign");
        handle.close();
    }
}

ReportDesignHandle#saveメソッドもあるのだけど、やっても反映されなかったので新しくレポートデザインファイルを生成。あとはこれを使ってレポートを出力する的な感じで

参考: http://stackoverflow.com/questions/3244468/how-to-set-a-datasource-for-a-birt-report-programmatically

Laravel使ってみた (5) - サブドメインルーティング - FactoryGirlを使ってみる