/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.historicaltimeseries.impl;
import org.threeten.bp.LocalDate;
import com.opengamma.id.ObjectIdentifiable;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.AbstractDataTrackingMaster;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesGetFilter;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoDocument;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoHistoryRequest;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoHistoryResult;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoMetaDataRequest;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoMetaDataResult;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoSearchRequest;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoSearchResult;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster;
import com.opengamma.master.historicaltimeseries.ManageableHistoricalTimeSeries;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
/**
* HistoricalTimeSeries master which tracks accesses using UniqueIds.
*/
public class DataTrackingHistoricalTimeSeriesMaster extends AbstractDataTrackingMaster<HistoricalTimeSeriesInfoDocument, HistoricalTimeSeriesMaster> implements HistoricalTimeSeriesMaster {
private static final String DATA_POINT_PREFIX = "DP";
public DataTrackingHistoricalTimeSeriesMaster(HistoricalTimeSeriesMaster delegate) {
super(delegate);
}
@Override
public HistoricalTimeSeriesInfoSearchResult search(HistoricalTimeSeriesInfoSearchRequest request) {
HistoricalTimeSeriesInfoSearchResult searchResult = delegate().search(request);
trackDocs(searchResult.getDocuments());
return searchResult;
}
@Override
public HistoricalTimeSeriesInfoHistoryResult history(HistoricalTimeSeriesInfoHistoryRequest request) {
HistoricalTimeSeriesInfoHistoryResult historyResult = delegate().history(request);
trackDocs(historyResult.getDocuments());
return historyResult;
}
@Override
public HistoricalTimeSeriesInfoMetaDataResult metaData(HistoricalTimeSeriesInfoMetaDataRequest request) {
return delegate().metaData(request);
}
@Override
public ManageableHistoricalTimeSeries getTimeSeries(UniqueId uniqueId) {
ManageableHistoricalTimeSeries timeSeries = delegate().getTimeSeries(uniqueId);
//trackId(timeSeries.getUniqueId());
return timeSeries;
}
@Override
public ManageableHistoricalTimeSeries getTimeSeries(UniqueId uniqueId, HistoricalTimeSeriesGetFilter filter) {
ManageableHistoricalTimeSeries timeSeries = delegate().getTimeSeries(uniqueId, filter);
trackId(timeSeries.getUniqueId());
return timeSeries;
}
@Override
public ManageableHistoricalTimeSeries getTimeSeries(ObjectIdentifiable objectId, VersionCorrection versionCorrection) {
ManageableHistoricalTimeSeries timeSeries = delegate().getTimeSeries(objectId, versionCorrection);
trackId(timeSeries.getUniqueId());
return timeSeries;
}
@Override
public ManageableHistoricalTimeSeries getTimeSeries(ObjectIdentifiable objectId, VersionCorrection versionCorrection, HistoricalTimeSeriesGetFilter filter) {
ManageableHistoricalTimeSeries timeSeries = delegate().getTimeSeries(objectId, versionCorrection, filter);
trackId(timeSeries.getUniqueId());
return timeSeries;
}
@Override
public UniqueId updateTimeSeriesDataPoints(ObjectIdentifiable objectId, LocalDateDoubleTimeSeries series) {
UniqueId id = delegate().updateTimeSeriesDataPoints(objectId, series);
return trackId(id);
}
@Override
public UniqueId correctTimeSeriesDataPoints(ObjectIdentifiable objectId, LocalDateDoubleTimeSeries series) {
UniqueId id = delegate().correctTimeSeriesDataPoints(objectId, series);
return trackId(id);
}
@Override
public UniqueId removeTimeSeriesDataPoints(ObjectIdentifiable objectId, LocalDate fromDateInclusive, LocalDate toDateInclusive) {
UniqueId id = delegate().removeTimeSeriesDataPoints(objectId, fromDateInclusive, toDateInclusive);
return trackId(id);
}
/**
* DP ids (internal to HTSMaster) should be ignored.
* @param id the id
* @return the id
*/
protected synchronized UniqueId trackId(UniqueId id) {
if (!isDPId(id)) {
return super.trackId(id);
}
return id;
}
private boolean isDPId(UniqueId id) {
return id != null && id.getValue().startsWith(DATA_POINT_PREFIX);
}
}