/** * Returns the frequency order of the period type of the period. * * @return the frequency order. */ public int frequencyOrder() { return periodType != null ? periodType.getFrequencyOrder() : YearlyPeriodType.FREQUENCY_ORDER; }
/** * Returns the potential number of periods of the given period type which is * spanned by this period. * * @param type the period type. * @return the potential number of periods of the given period type spanned * by this period. */ public int getPeriodSpan( PeriodType type ) { double no = (double) this.periodType.getFrequencyOrder() / type.getFrequencyOrder(); return (int) Math.floor( no ); }
/** * Return the potential number of periods of the given period type which is * spanned by this period. * * @param type the period type. * @return the potential number of periods of the given period type spanned * by this period. */ public int getPeriodSpan( PeriodType type ) { double no = (double) this.getFrequencyOrder() / type.getFrequencyOrder(); return (int) Math.floor( no ); }
/** * Returns the frequency order for the PeriodType of this DataElement. If no * PeriodType exists, 0 is returned. */ public int getFrequencyOrder() { PeriodType periodType = getPeriodType(); return periodType != null ? periodType.getFrequencyOrder() : YearlyPeriodType.FREQUENCY_ORDER; }
/** * Indicates whether disaggregation is allowed for the given input. Disaggregation * implies that the frequency order of the aggregation period type is lower than * the data period type. * * @param aggregationPeriodType the aggregation period type. * @param dataPeriodType the data period type. */ public static boolean isDisaggregation( AnalyticsAggregationType aggregationType, PeriodType aggregationPeriodType, PeriodType dataPeriodType ) { if ( dataPeriodType == null || aggregationPeriodType == null ) { return false; } if ( aggregationType == null || AggregationType.AVERAGE != aggregationType.getPeriodAggregationType() ) { return false; } if ( aggregationPeriodType.getFrequencyOrder() < dataPeriodType.getFrequencyOrder() ) { return true; } if ( aggregationPeriodType.getFrequencyOrder() == dataPeriodType.getFrequencyOrder() && !aggregationPeriodType.equals( dataPeriodType ) ) { return true; } return false; }
/** * Gets the PeriodType with the highest frequency from a list of Periods. */ public PeriodType getHighestFrequencyPeriodType( List<Period> periods ) { if ( periods != null && !periods.isEmpty() ) { PeriodType lowestFrequencyOrder = periods.get( 0 ).getPeriodType(); for ( Period period : periods ) { if ( period.getPeriodType().getFrequencyOrder() < lowestFrequencyOrder.getFrequencyOrder() ) { lowestFrequencyOrder = period.getPeriodType(); } } return lowestFrequencyOrder; } return null; }
/** * Returns a list of periods for each of the available period types defined by * {@link PeriodType#PERIOD_TYPES} in matching order relative to the given period. * * @param period the period. * @param calendar the calendar. * @return a list of periods. */ public static List<Period> getPeriodTypePeriods( Period period, org.hisp.dhis.calendar.Calendar calendar ) { List<Period> periods = new ArrayList<>(); PeriodType periodType = period.getPeriodType(); for ( PeriodType type : PeriodType.PERIOD_TYPES ) { if ( periodType.getFrequencyOrder() < type.getFrequencyOrder() || periodType.equals( type ) ) { periods.add( IdentifiableObjectUtils.getPeriodByPeriodType( period, type, calendar ) ); } else { periods.add( null ); } } return periods; }
@Override public int compare( Period period1, Period period2 ) { PeriodType a = period1.getPeriodType(); PeriodType b = period2.getPeriodType(); int freqCompare = Integer.compare( a.getFrequencyOrder(), b.getFrequencyOrder() ); int nameCompare = a.getName().compareTo( b.getName() ); return freqCompare == 0 ? ( nameCompare == 0 ? period1.getStartDate().compareTo(period2.getStartDate() ) : nameCompare ) : freqCompare; } }
/** * Returns the {@link Period} of the argument period type which corresponds to the argument period. * The frequency order of the given period type must greater than or equal to the period type * of the given period (represent "longer" periods). Weeks are converted to "longer" periods by * determining which period contains at least 4 days of the week. * <p> * As an example, providing * {@code Quarter 1, 2017} and {@code Yearly} as arguments will return the yearly * period {@code 2017}. * * @param period the period. * @param periodType the period type of the period to return. * @param calendar the calendar to use when calculating the period. * @return a period. */ public static Period getPeriodByPeriodType( Period period, PeriodType periodType, Calendar calendar ) { Assert.isTrue( periodType.getFrequencyOrder() >= period.getPeriodType().getFrequencyOrder(), "Frequency order of period type must be greater than or equal to period" ); Date date = period.getStartDate(); if ( WeeklyAbstractPeriodType.class.isAssignableFrom( period.getPeriodType().getClass() ) ) { date = new DateTime( date.getTime() ).plusDays( 3 ).toDate(); } return periodType.createPeriod( date, calendar ); }
@Override public int compare( DataSet d1, DataSet d2 ) { if ( d1 == null || d1.getPeriodType() == null ) { return -1; } if ( d2 == null || d2.getPeriodType() == null ) { return 1; } int frequencyOrder = Integer.valueOf( d1.getPeriodType().getFrequencyOrder() ).compareTo( Integer.valueOf( d2.getPeriodType().getFrequencyOrder() ) ); if ( frequencyOrder != 0 ) { return frequencyOrder; } return d1.compareTo( d2 ); } }
/** * For each period type, allow all the longer period types in validation * queries. * * @param periodTypeXs period types to generate allowed period types from. */ private void generateAllowedPeriods( Collection<PeriodTypeExtended> periodTypeXs ) { for ( PeriodTypeExtended p : periodTypeXs ) { for ( PeriodTypeExtended q : periodTypeXs ) { if ( q.getPeriodType().getFrequencyOrder() >= p.getPeriodType().getFrequencyOrder() ) { p.getAllowedPeriodTypes().add( q.getPeriodType() ); } } } }
int frequencyOrder = Integer.valueOf( d1.getPeriodType().getFrequencyOrder() ).compareTo( Integer.valueOf( d2.getPeriodType().getFrequencyOrder() ) );