public PeriodType getPeriodType() { return period != null ? period.getPeriodType() : null; }
/** * 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 the period type of the first period specified as filter, or * null if there is no period filter. */ public PeriodType getFilterPeriodType() { List<DimensionalItemObject> filterPeriods = getFilterPeriods(); if ( !filterPeriods.isEmpty() ) { return ( (Period) filterPeriods.get( 0 ) ).getPeriodType(); } return null; }
@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 a list of calendar specific period identifiers for the given collection of * periods and calendar. * * @param periods the list of periods. * @param calendar the calendar to use for generation of iso periods. * @return a list of iso period identifiers. */ public static <T extends IdentifiableObject> List<String> getLocalPeriodIdentifiers( Collection<T> periods, Calendar calendar ) { List<String> localIdentifiers = new ArrayList<>(); for ( IdentifiableObject object : periods ) { Period period = (Period) object; DateTimeUnit dateTimeUnit = calendar.fromIso( period.getStartDate() ); localIdentifiers.add( period.getPeriodType().getIsoDate( dateTimeUnit ) ); } return localIdentifiers; }
public static String serialize( Period period ) { return DateUtils.getMediumDateString( period.getStartDate() ) + "/" + period.getPeriodType().getIso8601Duration(); } }
/** * Adds Periods to the context, grouped by period type. * * @param periodTypeXMap period type map to extended period types. * @param periods periods to group and add. */ private void addPeriodsToContext( Map<PeriodType, PeriodTypeExtended> periodTypeXMap, Collection<Period> periods ) { for ( Period period : periods ) { PeriodTypeExtended periodTypeX = getOrCreatePeriodTypeExtended( periodTypeXMap, period.getPeriodType() ); periodTypeX.addPeriod( period ); } generateAllowedPeriods( periodTypeXMap.values() ); }
@Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( o == null ) { return false; } if ( !(o instanceof Period) ) { return false; } final Period other = (Period) o; return startDate.equals( other.getStartDate() ) && endDate.equals( other.getEndDate() ) && periodType.equals( other.getPeriodType() ); }
@Override public void addPeriod( Period period ) { period.setPeriodType( reloadPeriodType( period.getPeriodType() ) ); save( period ); }
@Override public List<Period> getPeriods( Period lastPeriod, int historyLength ) { List<Period> periods = new ArrayList<>( historyLength ); lastPeriod = periodStore.reloadForceAddPeriod( lastPeriod ); PeriodType periodType = lastPeriod.getPeriodType(); for ( int i = 0; i < historyLength; ++i ) { Period pe = getPeriodFromDates( lastPeriod.getStartDate(), lastPeriod.getEndDate(), periodType ); periods.add( pe != null ? pe : lastPeriod ); lastPeriod = periodType.getPreviousPeriod( lastPeriod ); } Collections.reverse( periods ); return periods; }
/** * Creates a mapping between period type name and period for the given periods. */ public static ListMap<String, DimensionalItemObject> getPeriodTypePeriodMap( Collection<DimensionalItemObject> periods ) { ListMap<String, DimensionalItemObject> map = new ListMap<>(); for ( DimensionalItemObject period : periods ) { String periodTypeName = ((Period) period).getPeriodType().getName(); map.putValue( periodTypeName, period ); } return map; }
/** * Finds the set of periods that exist, from a list of periods. * * Only adds the period if it is found in the database, because: * (a) We will need the period id, and * (b) If the period does not exist in the database, then * there is no data in the database to look for. * * @param periods the periods to look for * @return the set of periods that exist, with ids. */ private Set<Period> getExistingPeriods( Set<Period> periods ) { Set<Period> existingPeriods = new HashSet<>(); for ( Period period : periods ) { Period existingPeriod = period.getId() != 0 ? period : periodService.getPeriod( period.getStartDate(), period.getEndDate(), period.getPeriodType() ); if ( existingPeriod != null ) { existingPeriods.add( existingPeriod ); } } return existingPeriods; }
@Override public Period getPeriod( String isoPeriod ) { Period period = PeriodType.getPeriodFromIsoString( isoPeriod ); if ( period != null ) { period = periodStore.getPeriod( period.getStartDate(), period.getEndDate(), period.getPeriodType() ); } return period; }
@Override public Period reloadPeriod( Period period ) { Session session = sessionFactory.getCurrentSession(); if ( session.contains( period ) ) { return period; // Already in session, no reload needed } Integer id = PERIOD_ID_CACHE.get( period.getCacheKey(), key -> getPeriodId( period.getStartDate(), period.getEndDate(), period.getPeriodType() ) ); Period storedPeriod = id != null ? getSession().get( Period.class, id ) : null; return storedPeriod != null ? storedPeriod.copyTransientProperties( period ) : null; }
@Override public List<Period> getDuplicatePeriods() { Collection<Period> periods = periodService.getAllPeriods(); List<Period> duplicates = new ArrayList<>(); ListMap<String, Period> map = new ListMap<>(); for ( Period period : periods ) { String key = period.getPeriodType().getName() + period.getStartDate().toString(); period.setName( period.toString() ); map.putValue( key, period ); } for ( String key : map.keySet() ) { List<Period> values = map.get( key ); if ( values != null && values.size() > 1 ) { duplicates.addAll( values ); } } return duplicates; }
public Period( Period period ) { this.id = period.getId(); this.periodType = period.getPeriodType(); this.startDate = period.getStartDate(); this.endDate = period.getEndDate(); this.name = period.getName(); this.isoPeriod = period.getIsoDate(); }
/** * Returns a local period identifier for a specific period / calendar. * * @param period the list of periods. * @param calendar the calendar to use for generation of iso periods. * @return Period identifier based on given calendar */ public static String getLocalPeriodIdentifier( Period period, Calendar calendar ) { if ( calendar.isIso8601() ) { return period.getIsoDate(); } return period.getPeriodType().getIsoDate( calendar.fromIso( period.getStartDate() ) ); }
private static void validateHasMatchingPeriodTypes( MetaDataProperties props ) throws ImportConflictException { // TODO MdCache? PeriodType dsPeType = props.dataSet.getPeriodType(); PeriodType peType = props.period.getPeriodType(); if ( !dsPeType.equals( peType ) ) { throw new ImportConflictException( new ImportConflict( props.period.getUid(), String.format( "Period type of period: %s is not equal to the period type of data set: %s", props.period.getIsoDate(), props.dataSet.getPeriodType() ) ) ); } }
private Period getPeriod( SMSCommand command, Date date ) { Period period = null; period = command.getDataset().getPeriodType().createPeriod(); PeriodType periodType = period.getPeriodType(); if ( command.isCurrentPeriodUsedForReporting() ) { period = periodType.createPeriod( new Date() ); } else { period = periodType.getPreviousPeriod( period ); } if ( date != null ) { period = periodType.createPeriod( date ); } return period; }
private CompleteDataSetRegistration createRespectiveRegistrationObject( DataSet dataSet, OrganisationUnit ou ) { Period period = dataSet.getPeriodType().createPeriod(); CompleteDataSetRegistration registration = new CompleteDataSetRegistration(); registration.setDataSet( dataSet ); registration.setPeriod( periodService.getPeriod( period.getStartDate(), period.getEndDate(), period.getPeriodType() ) ); registration.setPeriodName( getPeriodString( registration.getPeriod() ) ); registration.setAttributeOptionCombo( categoryService.getDefaultCategoryOptionCombo() ); registration.setSource( ou ); return registration; }