/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.ircurve; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.core.config.impl.ConfigItem; import com.opengamma.master.config.ConfigMaster; import com.opengamma.master.config.ConfigMasterUtils; import com.opengamma.util.money.Currency; /** * Populates the yield curve configuration. */ public class YieldCurveConfigPopulator { private static final Logger s_logger = LoggerFactory.getLogger(YieldCurveConfigPopulator.class); public YieldCurveConfigPopulator(final ConfigMaster cfgMaster) { this(cfgMaster, false); } public YieldCurveConfigPopulator(final ConfigMaster cfgMaster, final boolean syntheticOnly) { if (syntheticOnly) { populateSyntheticCurveConfigMaster(cfgMaster); } else { populateCurveConfigMaster(cfgMaster); } } public static ConfigMaster populateCurveConfigMaster(final ConfigMaster cfgMaster) { populateCurveDefinitionConfigMaster(cfgMaster, false); populateCurveSpecificationBuilderConfigMaster(cfgMaster); return cfgMaster; } public static ConfigMaster populateSyntheticCurveConfigMaster(final ConfigMaster cfgMaster) { populateCurveDefinitionConfigMaster(cfgMaster, true); populateSyntheticCurveSpecificationBuilderConfigMaster(cfgMaster); return cfgMaster; } private static void dumpDefinition(final YieldCurveDefinition curveDefinition) { s_logger.debug("Curve Definition"); s_logger.debug(" Name:" + curveDefinition.getName()); s_logger.debug(" Currency:" + curveDefinition.getCurrency()); s_logger.debug(" Strips:"); for (final FixedIncomeStrip strip : curveDefinition.getStrips()) { s_logger.debug(" " + strip); } } public static void populateCurveDefinitionConfigMaster(final ConfigMaster configMaster, final boolean syntheticOnly) { if (syntheticOnly) { final Map<String, Map<Currency, YieldCurveDefinition>> newCurveDefinitions = CurveDefinitionAndSpecifications.buildNewCurveDefinitions(); for (final Map.Entry<String, Map<Currency, YieldCurveDefinition>> entry : newCurveDefinitions.entrySet()) { final String curveName = entry.getKey(); final Map<Currency, YieldCurveDefinition> definitions = entry.getValue(); for (final Map.Entry<Currency, YieldCurveDefinition> currencyEntry : definitions.entrySet()) { final Currency ccy = currencyEntry.getKey(); final YieldCurveDefinition definition = currencyEntry.getValue(); final ConfigItem<YieldCurveDefinition> item = ConfigItem.of(definition); item.setName(curveName + "_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); dumpDefinition(definition); } } final Map<String, Map<Currency, YieldCurveDefinition>> secondaryCurveDefinitions = SecondaryCurveDefinitionAndSpecifications.buildSecondaryCurveDefinitions(); for (final Map.Entry<String, Map<Currency, YieldCurveDefinition>> entry : secondaryCurveDefinitions.entrySet()) { final String curveName = entry.getKey(); final Map<Currency, YieldCurveDefinition> definitions = entry.getValue(); for (final Map.Entry<Currency, YieldCurveDefinition> currencyEntry : definitions.entrySet()) { final Currency ccy = currencyEntry.getKey(); final YieldCurveDefinition definition = currencyEntry.getValue(); final ConfigItem<YieldCurveDefinition> item = ConfigItem.of(definition); item.setName(curveName + "_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); dumpDefinition(definition); } } final Currency ccy = Currency.AUD; final YieldCurveDefinition audDiscounting = CurveDefinitionAndSpecifications.buildSecondaryDiscountingAUDCurveDefinition(); ConfigItem<YieldCurveDefinition> item = ConfigItem.of(audDiscounting); item.setName("Discounting_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); dumpDefinition(audDiscounting); final YieldCurveDefinition audForwardBasis3M = CurveDefinitionAndSpecifications.buildSecondaryForward3MBasisAUDCurveDefinition(); item = ConfigItem.of(audForwardBasis3M); item.setName("ForwardBasis3M_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); dumpDefinition(audForwardBasis3M); final YieldCurveDefinition audForwardBasis6M = CurveDefinitionAndSpecifications.buildSecondaryForward6MBasisAUDCurveDefinition(); item = ConfigItem.of(audForwardBasis6M); item.setName("ForwardBasis6M_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); dumpDefinition(audForwardBasis6M); final YieldCurveDefinition audSingle = CurveDefinitionAndSpecifications.buildSecondarySingleAUDCurveDefinition(); item = ConfigItem.of(audSingle); item.setName("Single_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); dumpDefinition(audSingle); } else { final Map<String, Map<Currency, YieldCurveDefinition>> newCurveDefinitions = CurveDefinitionAndSpecifications.buildNewBbgCurveDefinitions(); for (final Map.Entry<String, Map<Currency, YieldCurveDefinition>> entry : newCurveDefinitions.entrySet()) { final String curveName = entry.getKey(); final Map<Currency, YieldCurveDefinition> definitions = entry.getValue(); for (final Map.Entry<Currency, YieldCurveDefinition> currencyEntry : definitions.entrySet()) { final Currency ccy = currencyEntry.getKey(); final YieldCurveDefinition definition = currencyEntry.getValue(); final ConfigItem<YieldCurveDefinition> item = ConfigItem.of(definition); item.setName(curveName + "_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); dumpDefinition(definition); } } } } public static void populateCurveSpecificationBuilderConfigMaster(final ConfigMaster configMaster) { final Map<Currency, CurveSpecificationBuilderConfiguration> configurations = CurveDefinitionAndSpecifications.buildStandardCurveSpecificationBuilderConfigurations(); for (final Map.Entry<Currency, CurveSpecificationBuilderConfiguration> entry : configurations.entrySet()) { final ConfigItem<CurveSpecificationBuilderConfiguration> item = ConfigItem.of(entry.getValue()); item.setName("DEFAULT_" + entry.getKey().getCode()); ConfigMasterUtils.storeByName(configMaster, item); } } public static void populateSyntheticCurveSpecificationBuilderConfigMaster(final ConfigMaster configMaster) { final Map<Currency, CurveSpecificationBuilderConfiguration> syntheticConfigurations = CurveDefinitionAndSpecifications.buildSyntheticCurveSpecificationBuilderConfigurations(); for (final Map.Entry<Currency, CurveSpecificationBuilderConfiguration> entry : syntheticConfigurations.entrySet()) { final ConfigItem<CurveSpecificationBuilderConfiguration> item = ConfigItem.of(entry.getValue()); item.setName("SECONDARY_" + entry.getKey().getCode()); ConfigMasterUtils.storeByName(configMaster, item); } final Currency ccy = Currency.AUD; final CurveSpecificationBuilderConfiguration audCurveSpec3M = CurveDefinitionAndSpecifications.buildSyntheticAUD3MCurveSpecification(); final CurveSpecificationBuilderConfiguration audCurveSpec6M = CurveDefinitionAndSpecifications.buildSyntheticAUD6MCurveSpecification(); ConfigItem<CurveSpecificationBuilderConfiguration> item = ConfigItem.of(audCurveSpec3M); item.setName("SECONDARY_3M_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); item = ConfigItem.of(audCurveSpec6M); item.setName("SECONDARY_6M_" + ccy.getCode()); ConfigMasterUtils.storeByName(configMaster, item); } }