@Override public LocalDate calculateReferenceDateFromTradeDate( LocalDate tradeDate, YearMonth yearMonth, ReferenceData refData) { LocalDate referenceDate = dateSequence.dateMatching(yearMonth); return businessDayAdjustment.adjust(referenceDate, refData); }
/** * Finds the nth date in the sequence after the input date, * always returning a date later than the input date. * <p> * Given an input date, this method returns a date from the sequence. * If the sequence number is 1, then the first date in the sequence after the input date is returned. * <p> * If the sequence number is 2 or larger, then the date referred to by sequence number 1 * is calculated, and the nth matching sequence date after that date returned. * * @param date the input date * @param sequenceNumber the 1-based index of the date to find * @return the nth sequence date after the input date * @throws IllegalArgumentException if the sequence number is zero or negative or if there are no more sequence dates */ public default LocalDate nth(LocalDate date, int sequenceNumber) { ArgChecker.notNegativeOrZero(sequenceNumber, "sequenceNumber"); if (sequenceNumber == 1) { return next(date); } else { return nth(next(date), sequenceNumber - 1); } }
/** * Finds the nth date in the sequence on or after the input date, * returning the input date if it is a date in the sequence. * <p> * Given an input date, this method returns a date from the sequence. * If the sequence number is 1, then either the input date or the first date * in the sequence after the input date is returned. * <p> * If the sequence number is 2 or larger, then the date referred to by sequence number 1 * is calculated, and the nth matching sequence date after that date returned. * * @param date the input date * @param sequenceNumber the 1-based index of the date to find * @return the nth sequence date on or after the input date * @throws IllegalArgumentException if the sequence number is zero or negative or if there are no more sequence dates */ public default LocalDate nthOrSame(LocalDate date, int sequenceNumber) { ArgChecker.notNegativeOrZero(sequenceNumber, "sequenceNumber"); if (sequenceNumber == 1) { return nextOrSame(date); } else { return nth(nextOrSame(date), sequenceNumber - 1); } }
@Test(dataProvider = "quarterly10th") public void test_nextOrSameQuarterly10th(LocalDate base, LocalDate expect1, LocalDate expect2, LocalDate expect3) { LocalDate date = base.plusDays(1); while (!date.isAfter(expect1)) { assertEquals(DateSequences.QUARTERLY_10TH.nextOrSame(date), expect1); assertEquals(DateSequences.QUARTERLY_10TH.nthOrSame(date, 1), expect1); assertEquals(DateSequences.QUARTERLY_10TH.nthOrSame(date, 2), expect2); assertEquals(DateSequences.QUARTERLY_10TH.nthOrSame(date, 3), expect3); date = date.plusDays(1); } assertEquals(DateSequences.QUARTERLY_10TH.dateMatching(YearMonth.from(date)), expect1); }
public void test_QUARTERLY_IMM() { DateSequence test = DateSequences.QUARTERLY_IMM; assertEquals(test.getName(), "Quarterly-IMM"); assertEquals(test.toString(), "Quarterly-IMM"); assertEquals(test.dateMatching(YearMonth.of(2013, 3)), LocalDate.of(2013, 3, 20)); }
/** * Obtains an instance from the specified unique name. * * @param uniqueName the unique name * @return the date sequence * @throws IllegalArgumentException if the name is not known */ @FromString public static DateSequence of(String uniqueName) { return extendedEnum().lookup(uniqueName); }
/** * Finds the next date in the sequence, always returning a date later than the input date. * <p> * Given an input date, this method returns the next date after it from the sequence. * * @param date the input date * @return the next sequence date after the input date * @throws IllegalArgumentException if there are no more sequence dates */ public default LocalDate next(LocalDate date) { LocalDate next = plusDays(date, 1); return nextOrSame(next); }
@Override public LocalDate calculateReferenceDateFromTradeDate( LocalDate tradeDate, Period minimumPeriod, int sequenceNumber, ReferenceData refData) { LocalDate earliestDate = tradeDate.plus(minimumPeriod); LocalDate referenceDate = dateSequence.nthOrSame(earliestDate, sequenceNumber); return businessDayAdjustment.adjust(referenceDate, refData); }
@ImmutablePreBuild private static void preBuild(Builder builder) { if (builder.index != null) { if (builder.name == null && builder.dateSequence != null) { builder.name = builder.index.getName() + "-" + builder.dateSequence.getName(); } if (builder.businessDayAdjustment == null) { builder.businessDayAdjustment = BusinessDayAdjustment.of( FOLLOWING, builder.index.getEffectiveDateOffset().getCalendar()); } } }
public void test_QUARTERLY_IMM_of() { DateSequence test = DateSequence.of("Quarterly-IMM"); assertEquals(test, DateSequences.QUARTERLY_IMM); }
@Test(dataProvider = "monthlyImm") public void test_nextOrSameMonthlyImm(LocalDate base, LocalDate immDate1, LocalDate immDate2, LocalDate immDate3) { LocalDate date = base.plusDays(1); while (!date.isAfter(immDate1)) { assertEquals(DateSequences.MONTHLY_IMM.nextOrSame(date), immDate1); assertEquals(DateSequences.MONTHLY_IMM.nthOrSame(date, 1), immDate1); assertEquals(DateSequences.MONTHLY_IMM.nthOrSame(date, 2), immDate2); assertEquals(DateSequences.MONTHLY_IMM.nthOrSame(date, 3), immDate3); date = date.plusDays(1); } assertEquals(DateSequences.MONTHLY_IMM.dateMatching(YearMonth.from(date)), immDate1); }
public void test_extendedEnum() { assertEquals(DateSequence.extendedEnum().lookupAll().get("Quarterly-IMM"), DateSequences.QUARTERLY_IMM); }
public void test_QUARTERLY_10TH_of() { DateSequence test = DateSequence.of("Quarterly-10th"); assertEquals(test, DateSequences.QUARTERLY_10TH); }
@Test(dataProvider = "quarterlyImm") public void test_nextOrSameQuarterlyImm(LocalDate base, LocalDate immDate1, LocalDate immDate2, LocalDate immDate3) { LocalDate date = base.plusDays(1); while (!date.isAfter(immDate1)) { assertEquals(DateSequences.QUARTERLY_IMM.nextOrSame(date), immDate1); assertEquals(DateSequences.QUARTERLY_IMM.nthOrSame(date, 1), immDate1); assertEquals(DateSequences.QUARTERLY_IMM.nthOrSame(date, 2), immDate2); assertEquals(DateSequences.QUARTERLY_IMM.nthOrSame(date, 3), immDate3); date = date.plusDays(1); } assertEquals(DateSequences.QUARTERLY_IMM.dateMatching(YearMonth.from(date)), immDate1); }
@Test(dataProvider = "monthlyImm") public void test_nextMonthlyImm(LocalDate base, LocalDate immDate1, LocalDate immDate2, LocalDate immDate3) { LocalDate date = base; while (!date.isAfter(immDate1)) { if (date.equals(immDate1)) { assertEquals(DateSequences.MONTHLY_IMM.next(date), immDate2); assertEquals(DateSequences.MONTHLY_IMM.nth(date, 1), immDate2); assertEquals(DateSequences.MONTHLY_IMM.nth(date, 2), immDate3); } else { assertEquals(DateSequences.MONTHLY_IMM.next(date), immDate1); assertEquals(DateSequences.MONTHLY_IMM.nth(date, 1), immDate1); assertEquals(DateSequences.MONTHLY_IMM.nth(date, 2), immDate2); assertEquals(DateSequences.MONTHLY_IMM.nth(date, 3), immDate3); } date = date.plusDays(1); } }
@Test(dataProvider = "quarterlyImm") public void test_nextQuarterlyImm(LocalDate base, LocalDate immDate1, LocalDate immDate2, LocalDate immDate3) { LocalDate date = base; while (!date.isAfter(immDate1)) { if (date.equals(immDate1)) { assertEquals(DateSequences.QUARTERLY_IMM.next(date), immDate2); assertEquals(DateSequences.QUARTERLY_IMM.nth(date, 1), immDate2); assertEquals(DateSequences.QUARTERLY_IMM.nth(date, 2), immDate3); } else { assertEquals(DateSequences.QUARTERLY_IMM.next(date), immDate1); assertEquals(DateSequences.QUARTERLY_IMM.nth(date, 1), immDate1); assertEquals(DateSequences.QUARTERLY_IMM.nth(date, 2), immDate2); assertEquals(DateSequences.QUARTERLY_IMM.nth(date, 3), immDate3); } date = date.plusDays(1); } }
@Test(dataProvider = "quarterly10th") public void test_nextQuarterly10th(LocalDate base, LocalDate expect1, LocalDate expect2, LocalDate expect3) { LocalDate date = base; while (!date.isAfter(expect1)) { if (date.equals(expect1)) { assertEquals(DateSequences.QUARTERLY_10TH.next(date), expect2); assertEquals(DateSequences.QUARTERLY_10TH.nth(date, 1), expect2); assertEquals(DateSequences.QUARTERLY_10TH.nth(date, 2), expect3); } else { assertEquals(DateSequences.QUARTERLY_10TH.next(date), expect1); assertEquals(DateSequences.QUARTERLY_10TH.nth(date, 1), expect1); assertEquals(DateSequences.QUARTERLY_10TH.nth(date, 2), expect2); assertEquals(DateSequences.QUARTERLY_10TH.nth(date, 3), expect3); } date = date.plusDays(1); } }