=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodService.java 2009-06-02 12:13:35 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/PeriodService.java 2010-01-28 19:59:57 +0000 @@ -226,6 +226,15 @@ */ Period getRelativePeriod( Date date, int months ); + /** + * Returns historyLength number of Periods chronologically ending with lastPeriod. + * + * @param lastPeriod the last Period in the provided collection. + * @param historyLength the number of Periods in the provided collection. + * @return a collection of Periods. + */ + Collection getPeriods( Period lastPeriod, int historyLength ); + // ------------------------------------------------------------------------- // PeriodType // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/period/DefaultPeriodService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/period/DefaultPeriodService.java 2009-11-26 14:02:44 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/period/DefaultPeriodService.java 2010-01-28 19:59:57 +0000 @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -294,6 +295,30 @@ return period; } + + public Collection getPeriods( Period lastPeriod, int historyLength ) + { + List periods = new ArrayList( historyLength ); + + CalendarPeriodType periodType = (CalendarPeriodType) lastPeriod.getPeriodType(); + + Period period = lastPeriod; + + Period p = new Period(); + + for ( int i = 0; i < historyLength; ++i ) + { + p = getPeriodFromDates( period.getStartDate(), period.getEndDate(), periodType ); + + periods.add( p != null ? p : period ); + + period = periodType.getPreviousPeriod( period ); + } + + Collections.reverse( periods ); + + return periods; + } // ------------------------------------------------------------------------- // PeriodType