用Birt API 处理参数问题

我们在使用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();
 }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值