首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

用Birt API 处理参数有关问题

2012-10-29 
用Birt API 处理参数问题在使用Birt 的时候需要动态处理一些参数问题,所以使用API 来处理参数是Birt 很重

用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(); }}}

热点排行