/** * Converts an FpML 'AdjustableDate' or 'AdjustableDate2' to an {@code AdjustableDate}. * * @param baseEl the FpML adjustable date element * @return the adjustable date * @throws RuntimeException if unable to parse */ public AdjustableDate parseAdjustableDate(XmlElement baseEl) { // FpML content: ('unadjustedDate', 'dateAdjustments', 'adjustedDate?') Optional<XmlElement> unadjOptEl = baseEl.findChild("unadjustedDate"); if (unadjOptEl.isPresent()) { LocalDate unadjustedDate = parseDate(unadjOptEl.get()); Optional<XmlElement> adjustmentOptEl = baseEl.findChild("dateAdjustments"); Optional<XmlElement> adjustmentRefOptEl = baseEl.findChild("dateAdjustmentsReference"); if (!adjustmentOptEl.isPresent() && !adjustmentRefOptEl.isPresent()) { return AdjustableDate.of(unadjustedDate); } XmlElement adjustmentEl = adjustmentRefOptEl.isPresent() ? lookupReference(adjustmentRefOptEl.get()) : adjustmentOptEl.get(); BusinessDayAdjustment adjustment = parseBusinessDayAdjustments(adjustmentEl); return AdjustableDate.of(unadjustedDate, adjustment); } LocalDate adjustedDate = parseDate(baseEl.getChild("adjustedDate")); return AdjustableDate.of(adjustedDate); }
Optional<XmlElement> dayTypeEl = baseEl.findChild("dayType"); boolean calendarDays = period.isZero() || (dayTypeEl.isPresent() && dayTypeEl.get().getContent().equals("Calendar")); BusinessDayAdjustment bda1 = parseBusinessDayAdjustments(baseEl); BusinessDayAdjustment bda2 = baseEl.findChild("relativeDateAdjustments") .map(el -> parseBusinessDayAdjustments(el)) .orElse(bda1);
BusinessDayAdjustment payAdjustment = document.parseBusinessDayAdjustments( paymentDatesEl.getChild("paymentDatesAdjustments")); if (paymentOffsetEl.isPresent()) {
BusinessDayAdjustment bda = document.parseBusinessDayAdjustments( calcPeriodDatesEl.getChild("calculationPeriodDatesAdjustments")); accrualScheduleBuilder.businessDayAdjustment(bda);
AdjustableDate terminationDate = document.parseAdjustableDate(generalTermsEl.getChild("scheduledTerminationDate")); BusinessDayAdjustment bda = generalTermsEl.findChild("dateAdjustments") .map(el -> document.parseBusinessDayAdjustments(el)) .orElse(BusinessDayAdjustment.NONE); PeriodicSchedule.Builder scheduleBuilder = PeriodicSchedule.builder()
}); resetScheduleBuilder.businessDayAdjustment( document.parseBusinessDayAdjustments(resetDatesEl.getChild("resetDatesAdjustments"))); iborRateBuilder.resetPeriods(resetScheduleBuilder.build());