1
package org.hisp.dhis.period;
4
* Copyright (c) 2004-2007, University of Oslo
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are met:
9
* * Redistributions of source code must retain the above copyright notice, this
10
* list of conditions and the following disclaimer.
11
* * Redistributions in binary form must reproduce the above copyright notice,
12
* this list of conditions and the following disclaimer in the documentation
13
* and/or other materials provided with the distribution.
14
* * Neither the name of the HISP project nor the names of its contributors may
15
* be used to endorse or promote products derived from this software without
16
* specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
import java.util.ArrayList;
31
import java.util.Calendar;
32
import java.util.Date;
33
import java.util.List;
36
* PeriodType for six-monthly Periods. A valid six-monthly Period has startDate
37
* set to either January 1st or July 1st, and endDate set to the last day of the
38
* fifth month after the startDate.
40
* @author Torgeir Lorange Ostby
41
* @version $Id: SixMonthlyPeriodType.java 2971 2007-03-03 18:54:56Z torgeilo $
43
public class SixMonthlyPeriodType
44
extends CalendarPeriodType
47
* The name of the SixMonthlyPeriodType, which is "SixMonthly".
49
public static final String NAME = "SixMonthly";
51
// -------------------------------------------------------------------------
52
// PeriodType functionality
53
// -------------------------------------------------------------------------
56
public String getName()
62
public Period createPeriod()
64
return createPeriod( createCalendarInstance() );
68
public Period createPeriod( Date date )
70
return createPeriod( createCalendarInstance( date ) );
73
private Period createPeriod( Calendar cal )
75
cal.set( Calendar.MONTH, cal.get( Calendar.MONTH ) - cal.get( Calendar.MONTH ) % 6 );
76
cal.set( Calendar.DAY_OF_MONTH, 1 );
78
Date startDate = cal.getTime();
80
cal.add( Calendar.MONTH, 5 );
81
cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
83
return new Period( this, startDate, cal.getTime() );
86
// -------------------------------------------------------------------------
87
// CalendarPeriodType functionality
88
// -------------------------------------------------------------------------
91
public Period getNextPeriod( Period period )
93
Calendar cal = createCalendarInstance( period.getStartDate() );
94
cal.set( Calendar.MONTH, cal.get( Calendar.MONTH ) - cal.get( Calendar.MONTH ) % 6 + 6 );
95
cal.set( Calendar.DAY_OF_MONTH, 1 );
97
Date startDate = cal.getTime();
99
cal.add( Calendar.MONTH, 5 );
100
cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
102
return new Period( this, startDate, cal.getTime() );
106
public Period getPreviousPeriod( Period period )
108
Calendar cal = createCalendarInstance( period.getStartDate() );
109
cal.set( Calendar.MONTH, cal.get( Calendar.MONTH ) - cal.get( Calendar.MONTH ) % 6 - 6 );
110
cal.set( Calendar.DAY_OF_MONTH, 1 );
112
Date startDate = cal.getTime();
114
cal.add( Calendar.MONTH, 5 );
115
cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
117
return new Period( this, startDate, cal.getTime() );
121
* Generates six-monthly Periods for a rounded-off 5 years span in which the
122
* given Period's startDate exists.
125
public List<Period> generatePeriods( Period period )
127
Calendar cal = createCalendarInstance( period.getStartDate() );
128
cal.add( Calendar.YEAR, -(cal.get( Calendar.YEAR ) % 5) );
129
cal.set( Calendar.DAY_OF_YEAR, 1 );
131
ArrayList<Period> sixMonths = new ArrayList<Period>();
133
for ( int i = 0; i < 10; ++i )
135
Date startDate = cal.getTime();
136
cal.add( Calendar.MONTH, 5 );
137
cal.set( Calendar.DAY_OF_MONTH, cal.getActualMaximum( Calendar.DAY_OF_MONTH ) );
138
sixMonths.add( new Period( this, startDate, cal.getTime() ) );
139
cal.add( Calendar.DAY_OF_YEAR, 1 );