package tes.birt;
import java.io.IOException;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.item.crosstab.core.ICrosstabConstants;
import org.eclipse.birt.report.item.crosstab.core.de.CrosstabCellHandle;
import org.eclipse.birt.report.item.crosstab.core.de.CrosstabReportItemHandle;
import org.eclipse.birt.report.item.crosstab.core.de.DimensionViewHandle;
import org.eclipse.birt.report.item.crosstab.core.de.LevelViewHandle;
import org.eclipse.birt.report.item.crosstab.core.de.MeasureViewHandle;
import org.eclipse.birt.report.item.crosstab.core.util.CrosstabExtendedItemFactory;
import org.eclipse.birt.report.model.api.ComputedColumnHandle;
import org.eclipse.birt.report.model.api.DataItemHandle;
import org.eclipse.birt.report.model.api.DataSetHandle;
import org.eclipse.birt.report.model.api.DesignConfig;
import org.eclipse.birt.report.model.api.DesignElementHandle;
import org.eclipse.birt.report.model.api.ElementFactory;
import org.eclipse.birt.report.model.api.ExtendedItemHandle;
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.ReportDesignHandle;
import org.eclipse.birt.report.model.api.ReportItemHandle;
import org.eclipse.birt.report.model.api.SessionHandle;
import org.eclipse.birt.report.model.api.StructureFactory;
import org.eclipse.birt.report.model.api.activity.SemanticException;
import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants;
import org.eclipse.birt.report.model.api.elements.structures.ComputedColumn;
import org.eclipse.birt.report.model.api.extension.IReportItem;
import org.eclipse.birt.report.model.api.olap.MeasureGroupHandle;
import org.eclipse.birt.report.model.api.olap.MeasureHandle;
import org.eclipse.birt.report.model.api.olap.TabularCubeHandle;
import org.eclipse.birt.report.model.api.olap.TabularDimensionHandle;
import org.eclipse.birt.report.model.api.olap.TabularHierarchyHandle;
import org.eclipse.birt.report.model.api.olap.TabularLevelHandle;
import org.eclipse.birt.report.model.elements.interfaces.ICubeModel;
import com.ibm.icu.util.ULocale;
/**
* Simple BIRT Design Engine API (DEAPI) demo.
*/
public class CreateDataCube {
ReportDesignHandle designHandle = null;
ElementFactory designFactory = null;
StructureFactory structFactory = null;
public static void main(String[] args) {
try {
CreateDataCube de = new CreateDataCube();
de.buildReport();
} 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() throws SemanticException {
OdaDataSetHandle dsHandle = designFactory.newOdaDataSet("ds",
"org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet");
dsHandle.setDataSource("Data Source");
String qry = "Select * from customers";
dsHandle.setQueryText(qry);
designHandle.getDataSets().add(dsHandle);
}
void buidCube() throws SemanticException {
// 使用引擎工厂创建TabularCube 指定名称 创建多维数据集 名称为 "MyCube"
TabularCubeHandle cubeHandle = designHandle.getElementFactory()
.newTabularCube("MyCube");
// 获取第一个dataset 对象 填充到多维数据集 "MyCube"
cubeHandle
.setDataSet((DataSetHandle) designHandle.getDataSets().get(0));
// 把多维数据集加入引擎
designHandle.getCubes().add(cubeHandle);
// measure group 创建多为数据集的度量 名称为"testMeasureGroup"
MeasureGroupHandle measureGroupHandle = designHandle
.getElementFactory().newTabularMeasureGroup("testMeasureGroup");
// designHandle.getElementFactory().newTabularMeasureGroup("testMeasureGroup"
// );
cubeHandle.setProperty(ICubeModel.MEASURE_GROUPS_PROP,
measureGroupHandle);// 设置为度量的多为数据集
// cubeHandle.add(ICubeModel.MEASURE_GROUPS_PROP, measureGroupHandle);
// measure
measureGroupHandle.add(MeasureGroupHandle.MEASURES_PROP,
designFactory.newTabularMeasure(null));
MeasureHandle measure = (MeasureHandle) measureGroupHandle.getContent(
MeasureGroupHandle.MEASURES_PROP, 0);
// 设置 Measure
measure.setName("CREDITLIMIT");
// 设置表达式
measure.setMeasureExpression("dataSetRow['CREDITLIMIT']");
// 设置计算函数
measure.setFunction(DesignChoiceConstants.MEASURE_FUNCTION_SUM);
// 是否根据其他度量计算
measure.setCalculated(false);
// 设置数据类型DesignChoiceConstants.COLUMN_DATA_TYPE_FLOAT
measure.setDataType(DesignChoiceConstants.COLUMN_DATA_TYPE_FLOAT);
// dimension 设置 未指定name
TabularDimensionHandle dimension = designFactory
.newTabularDimension(null);
cubeHandle.add(TabularCubeHandle.DIMENSIONS_PROP, dimension);
dimension.setTimeType(false);
// dimension.setDefaultHierarchy( factory
// .newTabularHierarchy( "testDefaultHierarchy" ) );
// hierarchy
dimension.add(TabularDimensionHandle.HIERARCHIES_PROP,
designFactory.newTabularHierarchy(null));
TabularHierarchyHandle hierarchy = (TabularHierarchyHandle) dimension
.getContent(TabularDimensionHandle.HIERARCHIES_PROP, 0);
// hierarchy.setName( namePrix + hierarchy.getName( ) );
hierarchy.setDataSet((DataSetHandle) designHandle.getDataSets().get(0));
// 添加组信息
hierarchy.add(TabularHierarchyHandle.LEVELS_PROP,
designFactory.newTabularLevel(dimension, null));
TabularLevelHandle level = (TabularLevelHandle) hierarchy.getContent(
TabularHierarchyHandle.LEVELS_PROP, 0);
level.setName("testlevel");
level.setColumnName("CUSTOMERNAME");
level.setDataType(DesignChoiceConstants.COLUMN_DATA_TYPE_STRING);
// 创建 交叉报表
ExtendedItemHandle xtab = CrosstabExtendedItemFactory
.createCrosstabReportItem(designHandle, cubeHandle,
"MyCrosstab");
// /xtab.setWidth(500);
// xtab.setHeight(500);
// 添加到body内
designHandle.getBody().add(xtab);
IReportItem reportItem = xtab.getReportItem();
CrosstabReportItemHandle xtabHandle = (CrosstabReportItemHandle) reportItem;
// ICrosstabConstants.COLUMN_AXIS_TYPE
// ICrosstabConstants.ROW_AXIS_TYPE
// xtabHandle.getMeasure(index)
// DimensionViewHandle dvh = xtabHandle.insertDimension(dimension,
// ICrosstabConstants.COLUMN_AXIS_TYPE, 0);
DimensionViewHandle dvh = xtabHandle.insertDimension(dimension,
ICrosstabConstants.ROW_AXIS_TYPE, 0);
LevelViewHandle levelViewHandle = dvh.insertLevel(level, 0);
CrosstabCellHandle cellHandle = levelViewHandle.getCell();
DesignElementHandle eii = xtabHandle.getModelHandle();
ComputedColumn bindingColumn = StructureFactory.newComputedColumn(eii,
level.getName());
ComputedColumnHandle bindingHandle = ((ReportItemHandle) eii)
.addColumnBinding(bindingColumn, false);
bindingColumn.setDataType(level.getDataType());
String exp = "dimension['" + dimension.getName() + "']['"
+ level.getName() + "']";
bindingColumn.setExpression(exp);
// xtabHandle.addGrandTotal(axisType, measureList, functionList)
DataItemHandle dataHandle = designFactory.newDataItem(level.getName());
dataHandle.setResultSetColumn(bindingHandle.getName());
cellHandle.addContent(dataHandle);
}
void buildReport() throws IOException, SemanticException {
DesignConfig config = new DesignConfig();
config.setBIRTHome("E:/birt-runtime-3_7_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.createDesign();
designFactory = designHandle.getElementFactory();
buildDataSource();
buildDataSet();
buidCube();
// Save the design and close it. output/desample/
designHandle.saveAs("output/birtsample/cubetest.rptdesign");
designHandle.close();
Platform.shutdown();
System.out.println("Finished");
} catch (Exception e) {
e.printStackTrace();
}
}
}