/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.marketdata.historical;
import org.threeten.bp.Instant;
import org.threeten.bp.LocalDate;
import org.threeten.bp.ZoneOffset;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesResolver;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesSource;
import com.opengamma.engine.marketdata.MarketDataSnapshot;
import com.opengamma.engine.marketdata.spec.FixedHistoricalMarketDataSpecification;
import com.opengamma.engine.marketdata.spec.MarketDataSpecification;
/**
* Historical market data provider that requires data from a specific date.
*/
public class HistoricalMarketDataProvider extends AbstractHistoricalMarketDataProvider {
/**
* Creates an instance.
*
* @param historicalTimeSeriesSource the underlying source of historical data, not null
* @param historicalTimeSeriesResolver the time series resolver, not null
* @param timeSeriesResolverKey the source resolver key, or null to use the source default
*/
public HistoricalMarketDataProvider(final HistoricalTimeSeriesSource historicalTimeSeriesSource,
final HistoricalTimeSeriesResolver historicalTimeSeriesResolver, final String timeSeriesResolverKey) {
super(historicalTimeSeriesSource, historicalTimeSeriesResolver, timeSeriesResolverKey);
}
/**
* Creates an instance.
*
* @param historicalTimeSeriesSource the underlying source of historical data, not null
* @param historicalTimeSeriesResolver the time series resolver, not null
*/
public HistoricalMarketDataProvider(final HistoricalTimeSeriesSource historicalTimeSeriesSource, final HistoricalTimeSeriesResolver historicalTimeSeriesResolver) {
super(historicalTimeSeriesSource, historicalTimeSeriesResolver);
}
@Override
protected LocalDate getHistoricalResolutionDate(final MarketDataSpecification marketDataSpec) {
return ((FixedHistoricalMarketDataSpecification) marketDataSpec).getSnapshotDate();
}
@Override
public boolean isCompatible(final MarketDataSpecification marketDataSpec) {
if (!(marketDataSpec instanceof FixedHistoricalMarketDataSpecification)) {
return false;
}
return super.isCompatible(marketDataSpec);
}
@Override
public MarketDataSnapshot snapshot(final MarketDataSpecification marketDataSpec) {
final FixedHistoricalMarketDataSpecification historicalSpec = (FixedHistoricalMarketDataSpecification) marketDataSpec;
// TODO something better thought-out here
//Instant snapshotInstant = historicalSpec.getSnapshotDate().atMidnight().atZone(ZoneOffset.UTC).toInstant();
final Instant snapshotInstant = historicalSpec.getSnapshotDate().atTime(16, 0).atZone(ZoneOffset.UTC).toInstant();
final LocalDate snapshotDate = historicalSpec.getSnapshotDate();
return new HistoricalMarketDataSnapshot(getTimeSeriesSource(), snapshotInstant, snapshotDate);
}
}