/** * Loads one or more CSV format curve calibration files. * <p> * If the files contain a duplicate entry an exception will be thrown. * * @param groupsResource the curve groups CSV resource * @param settingsResource the curve settings CSV resource * @param curveNodeResources the CSV resources for curve nodes * @return the group definitions, mapped by name * @throws IllegalArgumentException if the files contain a duplicate entry */ public static ImmutableMap<CurveGroupName, RatesCurveGroupDefinition> load( ResourceLocator groupsResource, ResourceLocator settingsResource, ResourceLocator... curveNodeResources) { return load(groupsResource, settingsResource, ImmutableList.copyOf(curveNodeResources)); }
return curveTermDepositCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveIborFixingDepositCurveNode(conventionStr, label, quoteId, spread, date, order); return curveFraCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveIborFutureCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveFixedOvernightCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveFixedIborCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveIborIborCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveThreeLegBasisCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveOvernightIborCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveXCcyIborIborCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveFxSwapCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order); return curveFixedInflationCurveNode(conventionStr, timeStr, label, quoteId, spread, date, order);
private static List<CurveDefinition> parseSingle( CharSource resource, Map<CurveName, LoadedCurveSettings> settingsMap) { CsvFile csv = CsvFile.of(resource, true); Map<CurveName, List<CurveNode>> allNodes = new HashMap<>(); for (CsvRow row : csv.rows()) { String curveNameStr = row.getField(CURVE_NAME); String label = row.getField(CURVE_LABEL); String symbologyQuoteStr = row.getField(CURVE_SYMBOLOGY_QUOTE); String tickerQuoteStr = row.getField(CURVE_TICKER_QUOTE); String fieldQuoteStr = row.getField(CURVE_FIELD_QUOTE); String typeStr = row.getField(CURVE_TYPE); String conventionStr = row.getField(CURVE_CONVENTION); String timeStr = row.getField(CURVE_TIME); String dateStr = row.findField(CURVE_DATE).orElse(""); String minGapStr = row.findField(CURVE_MIN_GAP).orElse(""); String clashActionStr = row.findField(CURVE_CLASH_ACTION).orElse(""); String spreadStr = row.findField(CURVE_SPREAD).orElse(""); CurveName curveName = CurveName.of(curveNameStr); StandardId quoteStandardId = StandardId.of(symbologyQuoteStr, tickerQuoteStr); FieldName quoteField = fieldQuoteStr.isEmpty() ? FieldName.MARKET_VALUE : FieldName.of(fieldQuoteStr); QuoteId quoteId = QuoteId.of(quoteStandardId, quoteField); double spread = spreadStr.isEmpty() ? 0d : Double.parseDouble(spreadStr); CurveNodeDate date = parseDate(dateStr); CurveNodeDateOrder order = parseDateOrder(minGapStr, clashActionStr); List<CurveNode> curveNodes = allNodes.computeIfAbsent(curveName, k -> new ArrayList<>()); curveNodes.add(createCurveNode(typeStr, conventionStr, timeStr, label, quoteId, spread, date, order)); } return buildCurveDefinition(settingsMap, allNodes); }
@Test(expectedExceptions = IllegalArgumentException.class) public void test_invalid_curve_duplicate_points() { RatesCalibrationCsvLoader.load( ResourceLocator.of(GROUPS_1), ResourceLocator.of(SETTINGS_1), ImmutableList.of(ResourceLocator.of(CALIBRATION_INVALID_TYPE))); }
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Missing settings for curve: .*") public void test_noSettings() { RatesCalibrationCsvLoader.load( ResourceLocator.of(GROUPS_1), ResourceLocator.of(SETTINGS_EMPTY), ResourceLocator.of(CALIBRATION_1)); }
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Multiple entries with same key: .*") public void test_single_curve_multiple_Files() { RatesCalibrationCsvLoader.load( ResourceLocator.of(GROUPS_1), ResourceLocator.of(SETTINGS_1), ImmutableList.of(ResourceLocator.of(CALIBRATION_1), ResourceLocator.of(CALIBRATION_1))); }