/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.marketdata.builders;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import org.threeten.bp.LocalDate;
import org.threeten.bp.ZonedDateTime;
import com.google.common.collect.ImmutableMap;
import com.opengamma.financial.analytics.isda.credit.YieldCurveData;
import com.opengamma.financial.analytics.isda.credit.YieldCurveDataSnapshot;
import com.opengamma.sesame.marketdata.CreditCurveDataId;
import com.opengamma.sesame.marketdata.IsdaYieldCurveDataId;
import com.opengamma.sesame.marketdata.IsdaYieldCurveDataSnapshotId;
import com.opengamma.sesame.marketdata.MarketDataBundle;
import com.opengamma.sesame.marketdata.MarketDataId;
import com.opengamma.sesame.marketdata.MarketDataRequirement;
import com.opengamma.sesame.marketdata.MarketDataSource;
import com.opengamma.sesame.marketdata.SingleValueRequirement;
import com.opengamma.sesame.marketdata.TimeSeriesRequirement;
import com.opengamma.sesame.marketdata.scenarios.CyclePerturbations;
import com.opengamma.timeseries.date.DateTimeSeries;
import com.opengamma.util.money.Currency;
import com.opengamma.util.result.FailureStatus;
import com.opengamma.util.result.Result;
/**
* Market data builder for isda yield curves.
*/
public class IsdaYieldCurveMarketDataBuilder implements MarketDataBuilder {
@Override
public Set<MarketDataRequirement> getSingleValueRequirements(SingleValueRequirement requirement,
ZonedDateTime valuationTime,
Set<? extends MarketDataRequirement> suppliedData) {
return Collections.emptySet();
}
@Override
public Map<SingleValueRequirement, Result<?>> buildSingleValues(MarketDataBundle marketDataBundle,
ZonedDateTime valuationTime,
Set<SingleValueRequirement> requirements,
MarketDataSource marketDataSource,
CyclePerturbations cyclePerturbations) {
ImmutableMap.Builder<SingleValueRequirement, Result<?>> results = ImmutableMap.builder();
for (SingleValueRequirement requirement : requirements) {
IsdaYieldCurveDataId curveDataId = (IsdaYieldCurveDataId) requirement.getMarketDataId();
Result<YieldCurveDataSnapshot> snapshotResult =
marketDataBundle.get(IsdaYieldCurveDataSnapshotId.of(curveDataId.getSnapshot()), YieldCurveDataSnapshot.class);
if (snapshotResult.isSuccess()) {
Map<Currency, YieldCurveData> yieldCurves = snapshotResult.getValue().getYieldCurves();
Currency currency = curveDataId.getCurrency();
if (yieldCurves.containsKey(currency)) {
results.put(requirement, Result.success(yieldCurves.get(currency)));
} else {
//failure - no key in snapshot
results.put(requirement,
Result.failure(FailureStatus.MISSING_DATA,
"Failed to load curve data for yield curve key {} in snapshot {} for valuation {}",
currency,
curveDataId.getSnapshot(),
valuationTime));
}
} else {
//failure - no snapshot
results.put(requirement, snapshotResult);
}
}
return results.build();
}
@Override
public Class<? extends MarketDataId> getKeyType() {
return IsdaYieldCurveDataId.class;
}
@Override
public Set<MarketDataRequirement> getTimeSeriesRequirements(TimeSeriesRequirement requirement,
Map<MarketDataId<?>, DateTimeSeries<LocalDate, ?>> suppliedData) {
return Collections.emptySet();
}
@Override
public Map<TimeSeriesRequirement, Result<? extends DateTimeSeries<LocalDate, ?>>> buildTimeSeries(
MarketDataBundle marketDataBundle,
Set<TimeSeriesRequirement> requirements,
MarketDataSource marketDataSource,
CyclePerturbations cyclePerturbations) {
return Collections.emptyMap();
}
}