/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.provider.historicaltimeseries.impl;
import java.net.URI;
import java.util.Map;
import java.util.Set;
import org.threeten.bp.LocalDate;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.provider.historicaltimeseries.HistoricalTimeSeriesProvider;
import com.opengamma.provider.historicaltimeseries.HistoricalTimeSeriesProviderGetRequest;
import com.opengamma.provider.historicaltimeseries.HistoricalTimeSeriesProviderGetResult;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.rest.AbstractRemoteClient;
import com.opengamma.util.time.LocalDateRange;
import com.opengamma.util.tuple.Pair;
import com.opengamma.util.tuple.Pairs;
/**
* Provides access to a remote time-series provider.
* <p>
* This is a client that connects to a time-series provider at a remote URI.
*/
public class RemoteHistoricalTimeSeriesProvider extends AbstractRemoteClient implements HistoricalTimeSeriesProvider {
/**
* Creates an instance.
*
* @param baseUri the base target URI for all RESTful web services, not null
*/
public RemoteHistoricalTimeSeriesProvider(final URI baseUri) {
super(baseUri);
}
//-------------------------------------------------------------------------
// delegate convenience methods to request/result method
// code copied from AbstractHistoricalTimeSeriesProvider due to lack of multiple inheritance
@Override
public LocalDateDoubleTimeSeries getHistoricalTimeSeries(
ExternalIdBundle externalIdBundle, String dataSource, String dataProvider, String dataField) {
HistoricalTimeSeriesProviderGetRequest request = HistoricalTimeSeriesProviderGetRequest.createGet(externalIdBundle, dataSource, dataProvider, dataField);
HistoricalTimeSeriesProviderGetResult result = getHistoricalTimeSeries(request);
return result.getResultMap().get(externalIdBundle);
}
@Override
public LocalDateDoubleTimeSeries getHistoricalTimeSeries(
ExternalIdBundle externalIdBundle, String dataSource, String dataProvider, String dataField, LocalDateRange dateRange) {
HistoricalTimeSeriesProviderGetRequest request = HistoricalTimeSeriesProviderGetRequest.createGet(externalIdBundle, dataSource, dataProvider, dataField, dateRange);
HistoricalTimeSeriesProviderGetResult result = getHistoricalTimeSeries(request);
return result.getResultMap().get(externalIdBundle);
}
@Override
public Pair<LocalDate, Double> getLatestDataPoint(
ExternalIdBundle externalIdBundle, String dataSource, String dataProvider, String dataField) {
HistoricalTimeSeriesProviderGetRequest request = HistoricalTimeSeriesProviderGetRequest.createGetLatest(externalIdBundle, dataSource, dataProvider, dataField);
HistoricalTimeSeriesProviderGetResult result = getHistoricalTimeSeries(request);
LocalDateDoubleTimeSeries series = result.getResultMap().get(externalIdBundle);
if (series == null || series.isEmpty()) {
return null;
}
return Pairs.of(series.getLatestTime(), series.getLatestValueFast());
}
@Override
public Map<ExternalIdBundle, LocalDateDoubleTimeSeries> getHistoricalTimeSeries(
Set<ExternalIdBundle> externalIdBundleSet, String dataSource, String dataProvider, String dataField, LocalDateRange dateRange) {
HistoricalTimeSeriesProviderGetRequest request = HistoricalTimeSeriesProviderGetRequest.createGetBulk(externalIdBundleSet, dataSource, dataProvider, dataField, dateRange);
HistoricalTimeSeriesProviderGetResult result = getHistoricalTimeSeries(request);
return result.getResultMap();
}
//-------------------------------------------------------------------------
@Override
public HistoricalTimeSeriesProviderGetResult getHistoricalTimeSeries(HistoricalTimeSeriesProviderGetRequest request) {
ArgumentChecker.notNull(request, "request");
URI uri = DataHistoricalTimeSeriesProviderResource.uriGet(getBaseUri());
return accessRemote(uri).post(HistoricalTimeSeriesProviderGetResult.class, request);
}
}