Package com.opengamma.integration.copier.timeseries.writer

Source Code of com.opengamma.integration.copier.timeseries.writer.MasterTimeSeriesWriter

/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.copier.timeseries.writer;

import java.util.HashMap;
import java.util.Map;

import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundleWithDates;
import com.opengamma.id.ExternalIdSearch;
import com.opengamma.id.ObjectIdentifiable;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesGetFilter;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoDocument;
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.historicaltimeseries.ManageableHistoricalTimeSeriesInfo;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
import com.opengamma.util.ArgumentChecker;
/**
* A time series writer that writes to an OpenGamma time series master
*/
public class MasterTimeSeriesWriter implements TimeSeriesWriter {

  private HistoricalTimeSeriesMaster _htsMaster;
  private Map<ExternalId, ObjectIdentifiable> _idMap = new HashMap<ExternalId, ObjectIdentifiable>();

  public MasterTimeSeriesWriter(HistoricalTimeSeriesMaster htsMaster) {
    ArgumentChecker.notNull(htsMaster, "htsMaster");
    _htsMaster = htsMaster;
  }

  @Override
  public LocalDateDoubleTimeSeries writeDataPoints(ExternalId htsId, String dataSource, String dataProvider, String dataField,  
      String observationTime, LocalDateDoubleTimeSeries series) {

    ObjectIdentifiable oId = _idMap.get(htsId);

    if (oId == null) {
      // resolve hts name to id of hts
      HistoricalTimeSeriesInfoSearchRequest searchRequest = new HistoricalTimeSeriesInfoSearchRequest();
      searchRequest.setExternalIdSearch(new ExternalIdSearch(htsId));
      searchRequest.setDataField(dataField);
      searchRequest.setDataProvider(dataProvider);
      searchRequest.setDataSource(dataSource);
      searchRequest.setObservationTime(observationTime);
      HistoricalTimeSeriesInfoSearchResult searchResult = _htsMaster.search(searchRequest);
      oId = searchResult.getFirstDocument() == null ? null : searchResult.getFirstDocument().getObjectId();

      // if this is a new hts, create it
      if (oId == null) {
        ManageableHistoricalTimeSeriesInfo info = new ManageableHistoricalTimeSeriesInfo();
        info.setDataField(dataField);
        info.setDataProvider(dataProvider);
        info.setDataSource(dataSource);
        info.setObservationTime(observationTime);
        info.setExternalIdBundle(ExternalIdBundleWithDates.of(htsId.toBundle()));
        info.setName(dataProvider + " " + dataField + " - " + htsId.getValue());
        HistoricalTimeSeriesInfoDocument infoDoc = new HistoricalTimeSeriesInfoDocument();
        infoDoc.setInfo(info);
        infoDoc = _htsMaster.add(infoDoc);

        oId = infoDoc.getObjectId();
      }

      _idMap.put(htsId, oId);
    }

    // TODO check if update could be used more often instead of correct
    ManageableHistoricalTimeSeries orig = _htsMaster.getTimeSeries(oId, VersionCorrection.LATEST, HistoricalTimeSeriesGetFilter.ofRange(series.getEarliestTime(), null, 1));
    if (orig.getTimeSeries().isEmpty()) {
      _htsMaster.updateTimeSeriesDataPoints(oId, series);
    } else {
      _htsMaster.correctTimeSeriesDataPoints(oId, series);
    }
    return series;
  }

  @Override
  public void flush() {

  }

}
TOP

Related Classes of com.opengamma.integration.copier.timeseries.writer.MasterTimeSeriesWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.