/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.marketdata.builders; 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.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.RawId; import com.opengamma.sesame.marketdata.SecurityId; 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.Result; import com.opengamma.util.time.LocalDateRange; /** * Market data builder for handling {@link SecurityId}. * <p> * This delegates to {@link RawMarketDataBuilder} for looking up the data. */ public class SecurityMarketDataBuilder implements MarketDataBuilder { @Override public Set<MarketDataRequirement> getSingleValueRequirements(SingleValueRequirement requirement, ZonedDateTime valuationTime, Set<? extends MarketDataRequirement> suppliedData) { RawId<?> rawId = rawId(requirement); return ImmutableSet.<MarketDataRequirement>of(SingleValueRequirement.of(rawId, requirement.getMarketDataTime())); } @Override public Set<MarketDataRequirement> getTimeSeriesRequirements( TimeSeriesRequirement requirement, Map<MarketDataId<?>, DateTimeSeries<LocalDate, ?>> suppliedData) { RawId<?> rawId = rawId(requirement); LocalDateRange dateRange = requirement.getMarketDataTime().getDateRange(); return ImmutableSet.<MarketDataRequirement>of(TimeSeriesRequirement.of(rawId, dateRange)); } @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) { RawId<?> rawId = rawId(requirement); results.put(requirement, marketDataBundle.get(rawId, rawId.getMarketDataType())); } return results.build(); } @Override public Map<TimeSeriesRequirement, Result<? extends DateTimeSeries<LocalDate, ?>>> buildTimeSeries( MarketDataBundle marketDataBundle, Set<TimeSeriesRequirement> requirements, MarketDataSource marketDataSource, CyclePerturbations cyclePerturbations) { ImmutableMap.Builder<TimeSeriesRequirement, Result<? extends DateTimeSeries<LocalDate, ?>>> results = ImmutableMap.builder(); for (TimeSeriesRequirement requirement : requirements) { RawId<?> rawId = rawId(requirement); LocalDateRange dateRange = requirement.getMarketDataTime().getDateRange(); @SuppressWarnings({"unchecked", "rawtypes" }) Result<DateTimeSeries<LocalDate, ?>> result = (Result) marketDataBundle.get(rawId, rawId.getMarketDataType(), dateRange); results.put(requirement, result); } return results.build(); } @Override public Class<? extends MarketDataId> getKeyType() { return SecurityId.class; } private static RawId rawId(MarketDataRequirement requirement) { SecurityId<?, ?> id = (SecurityId<?, ?>) requirement.getMarketDataId(); return RawId.of(id.getId(), id.getMarketDataType(), id.getFieldName()); } }