首页 > 新闻系统 > 编程天地 > 文章正文

用Birt API 处理参数问题

2008-01-09 13:53:32 来源:互联网 作者: 点击:
我们在使用Birt 的时候需要动态处理一些参数问题,所以使用API 来处理参数是Birt 很重要的一部分.

 
  我们在使用Birt 的时候需要动态处理一些参数问题,所以使用API 来处理参数是Birt 很重要的一部分.所有以 'I' 开头的都是Interface ,
Birt 有三种parameter 分别对应 IParameterGroupDefn , ICascadingParameterGroup , IScalarParameterDefn , 对应的三个Handler 分别就是
ParameterGroupHandle, CascadingParameterGroupHandle , ScalarParameterHandle
Engine.shutdown() 已经过时了,应该使用新的Engine.destory(). 不过例子是Birt 官方的,所以我没有修改.
  
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
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.IGetParameterDefinitionTask;
import org.eclipse.birt.report.engine.api.IParameterDefnBase;
import org.eclipse.birt.report.engine.api.IParameterGroupDefn;
import org.eclipse.birt.report.engine.api.IParameterSelectionChoice;
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.IScalarParameterDefn;
import org.eclipse.birt.report.model.api.CascadingParameterGroupHandle;
import org.eclipse.birt.report.model.api.ReportDesignHandle;
import org.eclipse.birt.report.model.api.ScalarParameterHandle;
public class
ParametersTask {
static void
executeReport() throws EngineException
{
HashMap
< String, HashMap < String, Serializable >> parmDetails = new HashMap < String, HashMap < String, Serializable >>
();
IReportEngine engine
= null
;
EngineConfig config
= null
;
try
{
config
= new
EngineConfig( );
config.setEngineHome(
" C:/birt-runtime-2_1_1/birt-runtime-2_1_1/ReportEngine "
);
config.setLogConfig(
null
, Level.FINE);
Platform.startup( config );
IReportEngineFactory factory
=
(IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine
=
factory.createReportEngine( config );
engine.changeLogLevel( Level.WARNING );
}
catch
( Exception ex){
ex.printStackTrace();
}
IReportRunnable design
= null
;
// Open a report design

design = engine.openReportDesign( " C:/test/2.1/parameters/Parameters.rptdesign " );
// Create Parameter Definition Task and retrieve parameter definitions

IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( design );
Collection
params = task.getParameterDefns( true
);
// Iterate over each parameter

Iterator iter = params .iterator( );
while
( iter.hasNext( ) )
{
IParameterDefnBase param
=
(IParameterDefnBase) iter.next( );
if
( param instanceof IParameterGroupDefn )
{
IParameterGroupDefn group
=
(IParameterGroupDefn) param;
//
System.out.println( "Parameter Group: " + group.getName( ) );
//
Do something with the parameter group.
// Iterate over group contents.

   Iterator i2 = group.getContents( ).iterator( );
while
( i2.hasNext( ) )
{
IScalarParameterDefn scalar
=
(IScalarParameterDefn) i2.next( );
//
System.out.println("\t" + scalar.getName());
// Get details on the parameter

    parmDetails.put( scalar.getName(), loadParameterDetails( task, scalar, design, group));
}
}
else

  {
IScalarParameterDefn scalar
= (IScalarParameterDefn) param;
//
System.out.println(param.getName());
// get details on the parameter

   parmDetails.put( scalar.getName(),loadParameterDetails( task, scalar, design, null ));
}
}
//
Destroy the engine and shutdown the Platform
// Note - If the program stays resident do not shutdown the Platform or the Engine 

engine.shutdown();
Platform.shutdown();
System.
out .println( " Finished "
);
}
// Function to load parameter details in a map.

private static HashMap < String, Serializable > loadParameterDetails(IGetParameterDefinitionTask task, IScalarParameterDefn scalar, IReportRunnable report, IParameterGroupDefn group)
{
HashMap
< String, Serializable > parameter = new HashMap < String, Serializable >
();
if ( group == null
){
parameter.put(
" Parameter Group " , " Default "
);
}
else
{
parameter.put(
" Parameter Group "
, group.getName());
}
parameter.put(
" Name "
, scalar.getName());
parameter.put(
" Help Text "
, scalar.getHelpText());
parameter.put(
" Display Name "
, scalar.getDisplayName());
// this is a format code such as  > for UPPERCASE

parameter.put( " Display Format " , scalar.getDisplayFormat());
if
( scalar.isHidden() ){
parameter.put(
" Hidden " , " Yes "
);
}
else
{
parameter.put(
" Hidden " , " No "
);
}
if
( scalar.allowBlank() ){
parameter.put(
" Allow Blank " , " Yes "
);
}
else
{
parameter.put(
" Allow Blank " , " No "
);
}
if
( scalar.allowNull() ){
parameter.put(
" Allow Null " , " Yes "
);
}
else
{
parameter.put(
" Allow Null " , " No "
);
}
if
( scalar.isValueConcealed() ){
parameter.put(
" Conceal Entry " , " Yes " );  // ie passwords etc

} else {
parameter.put(
" Conceal Entry " , " No "
);
}
switch
(scalar.getControlType()) {
case IScalarParameterDefn.TEXT_BOX:  parameter.put( " Type " , " Text Box " ); break
;
case IScalarParameterDefn.LIST_BOX:  parameter.put( " Type " , " List Box " ); break
;
case IScalarParameterDefn.RADIO_BUTTON:  parameter.put( " Type " , " List Box " ); break
;
case IScalarParameterDefn.CHECK_BOX:  parameter.put( " Type " , " List Box " ); break
;
default : parameter.put( " Type " , " Text Box " ); break
;
}
switch
(scalar.getDataType()) {
case IScalarParameterDefn.TYPE_STRING:  parameter.put( " Data Type " , " String " ); break
;
case IScalarParameterDefn.TYPE_FLOAT:  parameter.put( " Data Type " , " Float " ); break
;
case IScalarParameterDefn.TYPE_DECIMAL:  parameter.put( " Data Type " , " Decimal " ); break
;
case IScalarParameterDefn.TYPE_DATE_TIME:  parameter.put( " Data Type " , " Date Time " ); break
;
case IScalarParameterDefn.TYPE_BOOLEAN:  parameter.put( " Data Type " , " Boolean " ); break
;
default :  parameter.put( " Data Type " , " Any " ); break
;
}
// Get report design and find default value, prompt text and data set expression using the DE API

ReportDesignHandle reportHandle = ( ReportDesignHandle ) report.getDesignHandle( );
ScalarParameterHandle parameterHandle
=
( ScalarParameterHandle ) reportHandle.findParameter( scalar.getName() );
parameter.put(
" Default Value "
, parameterHandle.getDefaultValue());
parameter.put(
" Prompt Text "
, parameterHandle.getPromptText());
parameter.put(
" Data Set Expression "
, parameterHandle.getValueExpr());
if (scalar.getControlType() !=
  IScalarParameterDefn.TEXT_BOX)
{
// retrieve selection list for cascaded parameter

  if ( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle ){
Collection sList
=
Collections.EMPTY_LIST;
if
( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle )
{
int index =
parameterHandle.getContainerSlotHandle( )
.findPosn( parameterHandle );
Object[] keyValue
= new
Object[index];
for ( int i = 0 ; i < index; i ++
)
{
ScalarParameterHandle handle
=
(ScalarParameterHandle) ( (CascadingParameterGroupHandle) parameterHandle.getContainer( ) ).getParameters( )
.
get
( i );
// Use parameter default values

     keyValue[i] = handle.getDefaultValue();
}
String groupName
=
parameterHandle.getContainer( ).getName( );
task.evaluateQuery( groupName );
sList
=
task.getSelectionListForCascadingGroup( groupName, keyValue );
HashMap
< Object, String > dynamicList = new HashMap < Object, String >
();
for ( Iterator sl =
sList.iterator( ); sl.hasNext( ); )
{
IParameterSelectionChoice sI
=
(IParameterSelectionChoice) sl.next( );
Object value
=
sI.getValue( );
Object label
=
sI.getLabel( );
System.
out .println( label + " -- " +
value);
dynamicList.put(value,(String) label);
}
parameter.put(
" Selection List "
, dynamicList);
}
}
else
{
// retrieve selection list

   Collection selectionList = task.getSelectionList( scalar.getName() );
if ( selectionList != null
)
{
HashMap
< Object, String > dynamicList = new HashMap < Object, String >
();
for ( Iterator sliter =
selectionList.iterator( ); sliter.hasNext( ); )
{
IParameterSelectionChoice selectionItem
=
(IParameterSelectionChoice) sliter.next( );
Object value
=
selectionItem.getValue( );
String label
=
selectionItem.getLabel( );
// System.out.println( label + "--" + value);

     dynamicList.put(value,label);
}
parameter.put(
" Selection List "
, dynamicList);
}
}
}
// Print out results

Iterator iter = parameter.keySet().iterator();
System.
out .println( " ======================Parameter = " +
scalar.getName());
while
(iter.hasNext()) {
String name
=
(String) iter.next();
if ( name.equals( " Selection List "
)){
HashMap selList
= (HashMap)parameter. get
(name);
Iterator selIter
=
selList.keySet().iterator();
while
(selIter.hasNext()) {
Object lbl
=
selIter.next();
System.
out .println( " Selection List Entry ===== Key = " + lbl + " Value = " + selList. get
(lbl));
}
}
else
{
System.
out .println( name + " = " + parameter. get
(name));
}
}
return
parameter;
}
/*
*
* @param args
*/

public static void main(String[] args) {
try

{
executeReport( );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
9 7 3 1 2 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

本周软件下载排行

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203