/** * 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 java.net.URI; import java.util.List; import org.threeten.bp.LocalDate; import com.opengamma.core.change.ChangeManager; import com.opengamma.id.ObjectIdentifiable; import com.opengamma.id.UniqueId; import com.opengamma.id.VersionCorrection; 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.master.impl.AbstractRemoteDocumentMaster; import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries; import com.opengamma.util.ArgumentChecker; import com.sun.jersey.api.client.GenericType; /** * Provides access to a remote {@link HistoricalTimeSeriesMaster}. */ public class RemoteHistoricalTimeSeriesMaster extends AbstractRemoteDocumentMaster<HistoricalTimeSeriesInfoDocument> implements HistoricalTimeSeriesMaster { /** * Creates an instance. * * @param baseUri the base target URI for all RESTful web services, not null */ public RemoteHistoricalTimeSeriesMaster(final URI baseUri) { super(baseUri); } /** * Creates an instance. * * @param baseUri the base target URI for all RESTful web services, not null * @param changeManager the change manager, not null */ public RemoteHistoricalTimeSeriesMaster(final URI baseUri, ChangeManager changeManager) { super(baseUri, changeManager); } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoMetaDataResult metaData(HistoricalTimeSeriesInfoMetaDataRequest request) { ArgumentChecker.notNull(request, "request"); URI uri = DataHistoricalTimeSeriesMasterResource.uriMetaData(getBaseUri(), request); return accessRemote(uri).get(HistoricalTimeSeriesInfoMetaDataResult.class); } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoSearchResult search(final HistoricalTimeSeriesInfoSearchRequest request) { ArgumentChecker.notNull(request, "request"); URI uri = DataHistoricalTimeSeriesMasterResource.uriSearch(getBaseUri()); return accessRemote(uri).post(HistoricalTimeSeriesInfoSearchResult.class, request); } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoDocument get(final UniqueId uniqueId) { ArgumentChecker.notNull(uniqueId, "uniqueId"); if (uniqueId.isVersioned()) { URI uri = (new DataHistoricalTimeSeriesResource()).uriVersion(getBaseUri(), uniqueId); return accessRemote(uri).get(HistoricalTimeSeriesInfoDocument.class); } else { return get(uniqueId, VersionCorrection.LATEST); } } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoDocument get(final ObjectIdentifiable objectId, final VersionCorrection versionCorrection) { ArgumentChecker.notNull(objectId, "objectId"); URI uri = (new DataHistoricalTimeSeriesResource()).uri(getBaseUri(), objectId, versionCorrection); return accessRemote(uri).get(HistoricalTimeSeriesInfoDocument.class); } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoDocument add(final HistoricalTimeSeriesInfoDocument document) { ArgumentChecker.notNull(document, "document"); ArgumentChecker.notNull(document.getInfo(), "document.info"); URI uri = DataHistoricalTimeSeriesMasterResource.uriAdd(getBaseUri()); return accessRemote(uri).post(HistoricalTimeSeriesInfoDocument.class, document); } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoDocument update(final HistoricalTimeSeriesInfoDocument document) { ArgumentChecker.notNull(document, "document"); ArgumentChecker.notNull(document.getInfo(), "document.info"); ArgumentChecker.notNull(document.getUniqueId(), "document.uniqueId"); URI uri = (new DataHistoricalTimeSeriesResource()).uri(getBaseUri(), document.getUniqueId(), null); return accessRemote(uri).post(HistoricalTimeSeriesInfoDocument.class, document); } //------------------------------------------------------------------------- @Override public void remove(final ObjectIdentifiable objectIdentifiable) { ArgumentChecker.notNull(objectIdentifiable, "objectIdentifiable"); URI uri = (new DataHistoricalTimeSeriesResource()).uri(getBaseUri(), objectIdentifiable, null); accessRemote(uri).delete(); } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoHistoryResult history(final HistoricalTimeSeriesInfoHistoryRequest request) { ArgumentChecker.notNull(request, "request"); ArgumentChecker.notNull(request.getObjectId(), "request.objectId"); URI uri = (new DataHistoricalTimeSeriesResource()).uriVersions(getBaseUri(), request.getObjectId(), request); return accessRemote(uri).get(HistoricalTimeSeriesInfoHistoryResult.class); } //------------------------------------------------------------------------- @Override public HistoricalTimeSeriesInfoDocument correct(final HistoricalTimeSeriesInfoDocument document) { ArgumentChecker.notNull(document, "document"); ArgumentChecker.notNull(document.getInfo(), "document.info"); ArgumentChecker.notNull(document.getUniqueId(), "document.uniqueId"); URI uri = (new DataHistoricalTimeSeriesResource()).uriVersion(getBaseUri(), document.getUniqueId()); return accessRemote(uri).post(HistoricalTimeSeriesInfoDocument.class, document); } //------------------------------------------------------------------------- @Override public ManageableHistoricalTimeSeries getTimeSeries(UniqueId uniqueId) { ArgumentChecker.notNull(uniqueId, "uniqueId"); if (uniqueId.isVersioned()) { URI uri = DataHistoricalDataPointsResource.uriVersion(getBaseUri(), uniqueId, null); return accessRemote(uri).get(ManageableHistoricalTimeSeries.class); } else { return getTimeSeries(uniqueId, VersionCorrection.LATEST); } } @Override public ManageableHistoricalTimeSeries getTimeSeries(UniqueId uniqueId, HistoricalTimeSeriesGetFilter filter) { ArgumentChecker.notNull(uniqueId, "uniqueId"); if (uniqueId.isVersioned()) { URI uri = DataHistoricalDataPointsResource.uriVersion(getBaseUri(), uniqueId, filter); return accessRemote(uri).get(ManageableHistoricalTimeSeries.class); } else { return getTimeSeries(uniqueId, VersionCorrection.LATEST); } } @Override public ManageableHistoricalTimeSeries getTimeSeries(ObjectIdentifiable objectId, VersionCorrection versionCorrection) { ArgumentChecker.notNull(objectId, "objectId"); URI uri = DataHistoricalDataPointsResource.uri(getBaseUri(), objectId, versionCorrection, null); return accessRemote(uri).get(ManageableHistoricalTimeSeries.class); } @Override public ManageableHistoricalTimeSeries getTimeSeries(ObjectIdentifiable objectId, VersionCorrection versionCorrection, HistoricalTimeSeriesGetFilter filter) { ArgumentChecker.notNull(objectId, "objectId"); URI uri = DataHistoricalDataPointsResource.uri(getBaseUri(), objectId, versionCorrection, filter); return accessRemote(uri).get(ManageableHistoricalTimeSeries.class); } @Override public UniqueId updateTimeSeriesDataPoints(ObjectIdentifiable objectId, LocalDateDoubleTimeSeries series) { ArgumentChecker.notNull(objectId, "objectId"); ArgumentChecker.notNull(series, "series"); URI uri = DataHistoricalDataPointsResource.uriUpdates(getBaseUri(), objectId); return accessRemote(uri).post(UniqueId.class, series); } @Override public UniqueId correctTimeSeriesDataPoints(ObjectIdentifiable objectId, LocalDateDoubleTimeSeries series) { ArgumentChecker.notNull(objectId, "objectId"); ArgumentChecker.notNull(series, "series"); URI uri = DataHistoricalDataPointsResource.uriCorrections(getBaseUri(), objectId); return accessRemote(uri).post(UniqueId.class, series); } @Override public UniqueId removeTimeSeriesDataPoints(ObjectIdentifiable objectId, LocalDate fromDateInclusive, LocalDate toDateInclusive) { ArgumentChecker.notNull(objectId, "objectId"); URI uri = DataHistoricalDataPointsResource.uriRemovals(getBaseUri(), objectId, fromDateInclusive, toDateInclusive); return accessRemote(uri).delete(UniqueId.class); } @Override public List<UniqueId> replaceVersion(UniqueId uniqueId, List<HistoricalTimeSeriesInfoDocument> replacementDocuments) { ArgumentChecker.notNull(uniqueId, "uniqueId"); ArgumentChecker.notNull(replacementDocuments, "replacementDocuments"); for (HistoricalTimeSeriesInfoDocument replacementDocument : replacementDocuments) { ArgumentChecker.notNull(replacementDocument, "documentToAdd"); ArgumentChecker.notNull(replacementDocument.getInfo(), "document.info"); } URI uri = (new DataHistoricalTimeSeriesResource()).uriVersion(getBaseUri(), uniqueId); return accessRemote(uri).put(new GenericType<List<UniqueId>>() { }, replacementDocuments); } @Override public List<UniqueId> replaceAllVersions(ObjectIdentifiable objectId, List<HistoricalTimeSeriesInfoDocument> replacementDocuments) { ArgumentChecker.notNull(objectId, "objectId"); ArgumentChecker.notNull(replacementDocuments, "replacementDocuments"); for (HistoricalTimeSeriesInfoDocument replacementDocument : replacementDocuments) { ArgumentChecker.notNull(replacementDocument, "documentToAdd"); ArgumentChecker.notNull(replacementDocument.getInfo(), "document.info"); } URI uri = (new DataHistoricalTimeSeriesResource()).uriAll(getBaseUri(), objectId, null); return accessRemote(uri).put(new GenericType<List<UniqueId>>() { }, replacementDocuments); } @Override public List<UniqueId> replaceVersions(ObjectIdentifiable objectId, List<HistoricalTimeSeriesInfoDocument> replacementDocuments) { ArgumentChecker.notNull(objectId, "objectId"); ArgumentChecker.notNull(replacementDocuments, "replacementDocuments"); for (HistoricalTimeSeriesInfoDocument replacementDocument : replacementDocuments) { ArgumentChecker.notNull(replacementDocument, "documentToAdd"); ArgumentChecker.notNull(replacementDocument.getInfo(), "document.info"); } URI uri = (new DataHistoricalTimeSeriesResource()).uri(getBaseUri(), objectId, null); return accessRemote(uri).put(new GenericType<List<UniqueId>>() { }, replacementDocuments); } }