`
danwind
  • 浏览: 232828 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

用Birt API 处理参数问题

    博客分类:
  • Java
阅读更多
在使用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();
 }
}

}
分享到:
评论

相关推荐

    bluebird-api

    Bluebird以其高性能、丰富的API和全面的错误处理机制著称。本篇文章将深入探讨Bluebird API及其应用场景。 1. **Promise的基本概念** Promise是ES6引入的特性,它代表一个异步操作的最终完成或失败,其状态不可变...

    canvas-flappybird

    《使用canvas技术构建Flappy Bird游戏》 在IT领域,HTML5是现代网页开发的核心标准,其中canvas元素作为一项重要特性,为动态图形和交互式应用程序提供了强大的支持。本项目"canvas-flappybird"就是利用canvas来...

    DQN_FlappyBird Pytorch+Q学习实现

    《使用Pytorch与Q学习实现FlappyBird游戏详解》 FlappyBird是一款广受欢迎的休闲游戏,其简单却又极具挑战性的玩法吸引了众多玩家。在本文中,我们将深入探讨如何利用深度强化学习(Deep Q-Network,简称DQN)以及...

    自己写的flappy bird~

    《自己编写的Flappy Bird游戏解析》 Flappy Bird,这款简单却又极具挑战性的游戏,由越南开发者Dong Nguyen在2013年推出,迅速在全球范围内引发了热潮。本文将深入探讨我自己编写的Flappy Bird游戏,分析其背后的...

    cocos2dx 3.0 FlappyBird改编版源码 zozuonodie

    总结,通过分析这个Cocos2dx 3.0的FlappyBird改编版源码,我们可以学习到游戏开发中的基本元素,如图形渲染、音频处理、物理引擎、游戏状态管理和用户输入响应等。这对于提升游戏开发技能和理解Cocos2dx框架有着极大...

    FlyBird.rar

    AndEngine是基于OpenGL ES 2.0的,提供了一套面向对象的API,简化了图形渲染、物理模拟、动画处理等复杂任务。它包括了精灵、纹理、粒子系统、碰撞检测、音乐和音效播放等功能,为开发者提供了完整的2D游戏开发解决...

    FlappyBird.zip

    本文将以"FlappyBird.zip"为例,详细探讨如何利用js技术实现一款类似Flappy Bird的网页小游戏,并教你如何修改游戏参数以适应不同的玩法需求。 首先,我们要理解Flappy Bird的基本机制。这是一款基于物理模拟的2D...

    02-flappy bird.pptx

    在本PPT中,我们探讨了如何开发一个简单的Flappy Bird游戏,主要涉及了图片导入、使用以及声音处理。以下是对这些知识点的详细说明: 1. **图片导入与使用**: - 在C++编程中,`&lt;graphics.h&gt;` 和 `&lt;conio.h&gt;` ...

    02-flappy bird.pdf

    在开发游戏时,图像处理和音频管理是至关重要的部分,特别是在创建类似Flappy Bird这样的简单但视觉和听觉效果丰富的游戏中。以下是从给定的文件中提取的关键知识点: 1. **图片导入与使用**: - `#include ...

    Paper-Bird-master_lua_

    本项目“Paper-Bird-master_lua_”正是一个使用Lua语言和Corona SDK开发的Flappy Bird克隆版,名为“Paper Bird”。通过这个项目,我们可以深入学习如何利用Lua进行游戏逻辑编程以及Corona SDK提供的图形和交互功能...

    富文本解析,折线图,MD5,bluebird.zip

    开发者需要了解如何使用`wxParse`的API,如`wxParse.wxParse('article', 'html', htmlStr, that, 3)`,其中参数分别代表绑定的字段、解析类型、HTML字符串、当前页面引用及层级。同时,安全问题不可忽视,确保不执行...

    微信小程序开发-新闻咨询类-富文本解析,折线图,MD5,bluebird案例源码.zip

    在使用`bluebird`时,要了解其特性和与小程序原生Promise的差异,以便更高效地处理网络请求和数据加载。 通过研究这些案例源码,开发者不仅可以深入理解微信小程序的开发模式,还能掌握到富文本解析、图形绘制、...

    毕业设计 微信小程序设计 新闻资讯 富文本解析,折线图,MD5,bluebird

    首先,需要将数据结构化,然后调用这些库提供的API配置图表参数,最后在小程序页面中嵌入图表组件,实时更新数据,以便用户直观地查看新闻资讯中的数据变化。 3. **MD5加密**: MD5(Message-Digest Algorithm 5)...

    html5 Flappy Bird小鸟飞跃手机端小游戏源码.zip

    1. **Canvas API**:如何使用JavaScript在Canvas上绘制图形、移动对象、处理碰撞和更新游戏状态。 2. **事件监听**:如何响应用户的触摸或点击事件,控制游戏中的动作。 3. **动画制作**:利用requestAnimationFrame...

    基于微信小程序的富文本解析,折线图,MD5,bluebird.zip

    在微信小程序的开发中,富文本解析、折线图绘制以及MD5加密和Bluebird Promise库的使用是几个重要的技术点。以下将详细介绍这些知识点。 首先,富文本解析是小程序中处理HTML或Markdown等格式文本的关键。在微信小...

    hummingbird(蜂鸟)是由Golang编写的超轻量级物联网平台,具有轻量级、快速、极低的内存占用等特性

    3. **文档**:可能包含平台的安装指南、使用教程、API参考和开发者的贡献指南。 4. **示例**:可能有示例设备配置、数据模拟脚本或者简单的应用示例,帮助用户快速了解如何与蜂鸟平台进行交互。 5. **测试用例**:...

    Java邮件开发(4)_邮件开发中问题汇总

    使用像Thunderbird、Outlook这样的邮件客户端,或者专门的邮件测试工具,可以帮助开发者调试和验证邮件发送代码。 以上知识点涵盖了JavaMail开发的基本要素和常见问题处理。通过深入理解和实践,开发者能够熟练地...

    Clumsy Bird Game in JavaScript Free Source Code.zip

    本篇文章将深入探讨一个基于JavaScript编写的名为“笨拙的小鸟”(Clumsy Bird)的游戏,通过对源代码的分析,我们将揭示游戏背后的编程原理和技巧。 1. **JavaScript基础**: JavaScript是一种解释型、弱类型的...

    C语言 flybird 基于easyx图形库

    通过这个小游戏,我们可以学习到C语言的基本语法、条件语句、循环结构以及函数的使用,还能深入理解图形绘制和事件处理的概念。EasyX库提供了一种简单易学的方式,让初学者也能快速上手,实现自己的创意。同时,这个...

    用Java写的一个小游戏,就是和手游上的Flyppy Bird类似的游戏....zip

    本项目中,开发者可能使用了JavaFX或者Swing库来创建游戏界面,这两个库提供了丰富的组件和API,能够方便地构建窗口、按钮、图像等元素。 在游戏逻辑层面,"飞翔的小鸟"需要处理的主要有以下几个方面: 1. **游戏...

Global site tag (gtag.js) - Google Analytics