package com.opengamma.sesame;
import java.util.Set;
import com.opengamma.sesame.marketdata.InflationMulticurveId;
import com.opengamma.sesame.marketdata.MarketDataEnvironment;
import com.opengamma.sesame.trade.ZeroCouponInflationSwapTrade;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.result.FailureStatus;
import com.opengamma.util.result.Result;
/**
* Provides inflation multicurve bundles by looking them up in the {@link MarketDataEnvironment}.
*/
public class LookupInflationProviderFn implements InflationProviderFn {
/** Specifies which curve should be used for a trade. */
private final CurveSelector _curveSelector;
/**
* @param curveSelector specifies which curve should be used for a trade
*/
public LookupInflationProviderFn(CurveSelector curveSelector) {
_curveSelector = ArgumentChecker.notNull(curveSelector, "curveSelectorFn");
}
@Override
public Result<InflationProviderBundle> getInflationBundle(Environment env, ZeroCouponInflationSwapTrade trade) {
Set<String> multicurveNames = _curveSelector.getMulticurveNames(trade.getTrade());
switch (multicurveNames.size()) {
case 0:
return Result.failure(FailureStatus.CALCULATION_FAILED, "No curves configured for trade {}", trade);
case 1:
String multicurveName = multicurveNames.iterator().next();
InflationMulticurveId multicurveId = InflationMulticurveId.of(multicurveName);
return env.getMarketDataBundle().get(multicurveId, InflationProviderBundle.class);
default:
return Result.failure(FailureStatus.CALCULATION_FAILED,
"Only one issuer curve bundle is supported per trade. Bundle names: {}, trade: {}",
multicurveNames, trade);
}
}
}