/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.credit.market;
import java.util.Map;
import com.opengamma.analytics.financial.credit.RestructuringClause;
import com.opengamma.core.legalentity.SeniorityLevel;
import com.opengamma.financial.analytics.isda.credit.CreditCurveDataKey;
import com.opengamma.financial.analytics.isda.credit.CreditDefaultSwapType;
import com.opengamma.financial.security.credit.StandardCDSSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.sesame.Environment;
import com.opengamma.sesame.credit.config.RestructuringSettings;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;
import com.opengamma.util.result.FailureStatus;
import com.opengamma.util.result.Result;
/**
* Default implementation of {@link StandardCdsMarketDataResolverFn}. Derives
* a {@link CreditCurveDataKey} from a given {@link StandardCDSSecurity} to be
* used for resolving market data.
*/
public class DefaultStandardCdsMarketDataResolverFn implements StandardCdsMarketDataResolverFn {
//typical values:
//USD -> XR
//JPY -> CR
//EUR -> MM
private final RestructuringSettings _restructuringSettings;
private final CreditKeyMapperFn _creditKeyMapperFn;
/**
* Creates an instance of the function.
*
* @param restructuringSettings the settings to use for
* @param creditKeyMapperFn credit key mapper function to use
* inferring restructuring clauses on standard CDSs.
*/
public DefaultStandardCdsMarketDataResolverFn(RestructuringSettings restructuringSettings,
CreditKeyMapperFn creditKeyMapperFn) {
_restructuringSettings = ArgumentChecker.notNull(restructuringSettings, "restructuringSettings");
_creditKeyMapperFn = ArgumentChecker.notNull(creditKeyMapperFn, "creditKeyMapperFn");
}
@Override
public Result<CreditCurveDataKey> resolve(Environment env, StandardCDSSecurity security) {
Currency currency = security.getNotional().getCurrency();
Map<Currency, RestructuringClause> restructuringMappings = _restructuringSettings.getRestructuringMappings();
if (!restructuringMappings.containsKey(currency)) {
return Result.failure(FailureStatus.ERROR,
"Failed to infer restructuring clause. No mapping configured for {}",
currency);
}
RestructuringClause restructuringClause = restructuringMappings.get(currency);
ExternalId referenceEntity = security.getReferenceEntity();
SeniorityLevel seniority = security.getSeniority();
CreditCurveDataKey key = CreditCurveDataKey.builder()
.currency(currency)
.curveName(referenceEntity.getValue())
.seniority(seniority)
.restructuring(restructuringClause)
.cdsType(CreditDefaultSwapType.SINGLE_NAME)
.build();
return _creditKeyMapperFn.getMapping(key);
}
}