Package com.opengamma.integration.copier.portfolio

Source Code of com.opengamma.integration.copier.portfolio.ResolvingPortfolioCopier

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

import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

import com.opengamma.bbg.BloombergIdentifierProvider;
import com.opengamma.bbg.loader.hts.BloombergHistoricalTimeSeriesLoader;
import com.opengamma.bbg.referencedata.ReferenceDataProvider;
import com.opengamma.id.ExternalId;
import com.opengamma.id.UniqueId;
import com.opengamma.integration.copier.portfolio.reader.PortfolioReader;
import com.opengamma.integration.copier.portfolio.writer.PortfolioWriter;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster;
import com.opengamma.master.position.ManageablePosition;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.provider.historicaltimeseries.HistoricalTimeSeriesProvider;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.tuple.ObjectsPair;

/**
* A portfolio copier that copies positions/securities from readers to the specified writer while resolving time-series.
*/
public class ResolvingPortfolioCopier implements PortfolioCopier {

  private static final Logger s_logger = LoggerFactory.getLogger(ResolvingPortfolioCopier.class);

  private HistoricalTimeSeriesMaster _htsMaster;
  private HistoricalTimeSeriesProvider _htsProvider;
  private ReferenceDataProvider _bbgRefDataProvider;
  private String _dataProvider;
  private String[] _dataFields;
 
  public ResolvingPortfolioCopier(
      HistoricalTimeSeriesMaster htsMaster,
      HistoricalTimeSeriesProvider htsProvider,
      ReferenceDataProvider bbgRefDataProvider,
      String dataProvider,
      String[] dataFields) {
   
    ArgumentChecker.notNull(htsMaster, "htsMaster");
    ArgumentChecker.notNull(htsProvider, "htsProvider");
    ArgumentChecker.notNull(bbgRefDataProvider, "bbgRefDataProvider");
    ArgumentChecker.notNull(dataProvider, "dataProvider");
    ArgumentChecker.notNull(dataFields, "dataFields");

    _htsMaster = htsMaster;
    _htsProvider = htsProvider;
    _bbgRefDataProvider = bbgRefDataProvider;
    _dataProvider = dataProvider;
    _dataFields = dataFields;   
  }
 
  @Override
  public void copy(PortfolioReader portfolioReader, PortfolioWriter portfolioWriter) {
    copy(portfolioReader, portfolioWriter, null);
  }

  @Override
  public void copy(PortfolioReader portfolioReader, PortfolioWriter portfolioWriter, PortfolioCopierVisitor visitor) {

    ArgumentChecker.notNull(portfolioWriter, "portfolioWriter");
    ArgumentChecker.notNull(portfolioReader, "portfolioReader");
   
    // Get bbg hts loader
    BloombergIdentifierProvider bbgIdentifierProvider = new BloombergIdentifierProvider(_bbgRefDataProvider);
    BloombergHistoricalTimeSeriesLoader bbgLoader = new BloombergHistoricalTimeSeriesLoader(_htsMaster, _htsProvider, bbgIdentifierProvider);
   
    ObjectsPair<ManageablePosition, ManageableSecurity[]> next;

    // Read in next row, checking for EOF
    while ((next = portfolioReader.readNext()) != null) {
     
      // Is position and security data is available for the current row?
      if (next.getFirst() != null && next.getSecond() != null) {
       
        // Set current path
        String[] path = portfolioReader.getCurrentPath();
        portfolioWriter.setPath(path);
       
        // Load all relevant HTSes
        for (ManageableSecurity security : next.getSecond()) {
          resolveTimeSeries(bbgLoader, security, _dataFields, _dataProvider, visitor);
        }
       
        // Write position and security data
        ObjectsPair<ManageablePosition, ManageableSecurity[]> written =
            portfolioWriter.writePosition(next.getFirst(), next.getSecond());
       
        if (visitor != null) {
          visitor.info(StringUtils.arrayToDelimitedString(path, "/"), written.getFirst(), written.getSecond());
        }
      } else {
        if (visitor != null) {
          if (next.getFirst() == null) {
            visitor.error("Could not load position");
          }
          if (next.getSecond() == null) {
            visitor.error("Could not load security(ies)");
          }
        }
      }
     
    }

    // Flush changes to portfolio master
    portfolioWriter.flush();
  }

  void resolveTimeSeries(BloombergHistoricalTimeSeriesLoader bbgLoader, ManageableSecurity security, String[] dataFields, String dataProvider, PortfolioCopierVisitor visitor) {
    for (String dataField : dataFields) {
      Set<ExternalId> ids = new HashSet<ExternalId>();
      ids = security.getExternalIdBundle().getExternalIds();
      Map<ExternalId, UniqueId> tsMap = null;
      for (ExternalId id : ids) {
        tsMap = bbgLoader.loadTimeSeries(Collections.singleton(id), dataProvider, dataField, null, null);
        String message = "historical time series " + id.toString() + ", fields " + dataField +
            " from " + dataProvider;
        if (tsMap.size() > 0) {
          s_logger.info("Loaded " + message + ": " + tsMap);
          if (visitor != null) {
            visitor.info("Loaded " + message);
          }
          break;
        }
      }
      if (tsMap == null || tsMap.size() == 0) {
        s_logger.warn("Could not load historical time series for security " + security);
        if (visitor != null) {
          visitor.error("Could not load historical time series for security " + security);
        }
      }
    }   
  }
 
  public HistoricalTimeSeriesMaster getHtsMaster() {
    return _htsMaster;
  }

  public void setHtsMaster(HistoricalTimeSeriesMaster htsMaster) {
    _htsMaster = htsMaster;
  }

  public HistoricalTimeSeriesProvider getHtsProvider() {
    return _htsProvider;
  }

  public void setHtsProvider(HistoricalTimeSeriesProvider htsProvider) {
    _htsProvider = htsProvider;
  }

  public ReferenceDataProvider getBbgRefDataProvider() {
    return _bbgRefDataProvider;
  }

  public void setBbgRefDataProvider(ReferenceDataProvider bbgRefDataProvider) {
    _bbgRefDataProvider = bbgRefDataProvider;
  }

  public String getDataProvider() {
    return _dataProvider;
  }

  public void setDataProvider(String dataProvider) {
    _dataProvider = dataProvider;
  }

  public String[] getDataFields() {
    return _dataFields;
  }

  public void setDataFields(String[] dataFields) {
    _dataFields = dataFields;
  }

}
TOP

Related Classes of com.opengamma.integration.copier.portfolio.ResolvingPortfolioCopier

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.