public static ProgramIndicator createProgramIndicator( char uniqueCharacter, AnalyticsType analyticsType, Program program, String expression, String filter ) { ProgramIndicator indicator = new ProgramIndicator(); indicator.setAutoFields(); indicator.setName( "Indicator" + uniqueCharacter ); indicator.setShortName( "IndicatorShort" + uniqueCharacter ); indicator.setCode( "IndicatorCode" + uniqueCharacter ); indicator.setDescription( "IndicatorDescription" + uniqueCharacter ); indicator.setProgram( program ); indicator.setExpression( expression ); indicator.setAnalyticsType( analyticsType ); indicator.setFilter( filter ); Set<AnalyticsPeriodBoundary> boundaries = new HashSet<AnalyticsPeriodBoundary>(); if ( analyticsType == AnalyticsType.EVENT ) { boundaries.add( new AnalyticsPeriodBoundary( AnalyticsPeriodBoundary.EVENT_DATE, AnalyticsPeriodBoundaryType.BEFORE_END_OF_REPORTING_PERIOD, null, 0 ) ); boundaries.add( new AnalyticsPeriodBoundary( AnalyticsPeriodBoundary.EVENT_DATE, AnalyticsPeriodBoundaryType.AFTER_START_OF_REPORTING_PERIOD, null, 0 ) ); } else if ( analyticsType == AnalyticsType.ENROLLMENT ) { boundaries.add( new AnalyticsPeriodBoundary( AnalyticsPeriodBoundary.ENROLLMENT_DATE, AnalyticsPeriodBoundaryType.BEFORE_END_OF_REPORTING_PERIOD, null, 0 ) ); boundaries.add( new AnalyticsPeriodBoundary( AnalyticsPeriodBoundary.ENROLLMENT_DATE, AnalyticsPeriodBoundaryType.AFTER_START_OF_REPORTING_PERIOD, null, 0 ) ); } for ( AnalyticsPeriodBoundary boundary : boundaries ) { boundary.setAutoFields(); } indicator.setAnalyticsPeriodBoundaries( boundaries ); return indicator; }