/**
* 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.google.common.collect.ImmutableSet;
import com.opengamma.financial.analytics.isda.credit.CreditCurveData;
import com.opengamma.financial.analytics.isda.credit.CreditCurveDataKey;
import com.opengamma.financial.analytics.isda.credit.CreditCurveDataSnapshot;
import com.opengamma.sesame.marketdata.CreditCurveDataId;
import com.opengamma.sesame.marketdata.CreditCurveDataSnapshotId;
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.result.FailureStatus;
import com.opengamma.util.result.Result;
/**
* Market data builder for credit curves.
*/
public class CreditCurveMarketDataBuilder 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) {
CreditCurveDataId curveDataId = (CreditCurveDataId) requirement.getMarketDataId();
Result<CreditCurveDataSnapshot> snapshotResult =
marketDataBundle.get(CreditCurveDataSnapshotId.of(curveDataId.getSnapshot()), CreditCurveDataSnapshot.class);
if (snapshotResult.isSuccess()) {
ImmutableMap<CreditCurveDataKey, CreditCurveData> creditCurves = snapshotResult.getValue().getCreditCurves();
CreditCurveDataKey key = curveDataId.getKey();
if (creditCurves.containsKey(key)) {
results.put(requirement, Result.success(creditCurves.get(key)));
} else {
//failure - no key in snapshot
results.put(requirement,
Result.failure(FailureStatus.MISSING_DATA,
"Failed to load curve data for credit curve key {} in snapshot {} for valuation {}",
key,
curveDataId.getSnapshot(),
valuationTime));
}
} else {
//failure - no snapshot
results.put(requirement, snapshotResult);
}
}
return results.build();
}
@Override
public Class<? extends MarketDataId> getKeyType() {
return CreditCurveDataId.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();
}
}