Package com.opengamma.integration.timeseries.snapshot

Source Code of com.opengamma.integration.timeseries.snapshot.RedisLKVFileReader

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

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.fudgemsg.FudgeContext;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.wire.FudgeMsgReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Maps;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.id.ExternalId;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
import com.opengamma.util.monitor.OperationTimer;

/**
* Reads the last known values for all fields from a file written from Redis lkv values
* at a specific observation time
*/
public class RedisLKVFileReader {

  private static final Logger s_logger = LoggerFactory.getLogger(RedisLKVFileReader.class);
  private static final FudgeContext s_fudgeContext = OpenGammaFudgeContext.getInstance()
 
  private final File _inputFile;
  private final Map<String, Boolean> _dataFieldBlackList = Maps.newHashMap();
  private final Map<String, Boolean> _schemeBlackList = Maps.newHashMap();
 
  public RedisLKVFileReader(final File inputFile, final BlackList schemeBlackList, final BlackList dataFieldBlackList) {
    ArgumentChecker.notNull(inputFile, "input file");
    ArgumentChecker.notNull(schemeBlackList, "scheme black list");
    ArgumentChecker.notNull(dataFieldBlackList, "data field black list");
   
    _inputFile = inputFile;
    for (String dataField : dataFieldBlackList.getBlackList()) {
      _dataFieldBlackList.put(dataField.toUpperCase(), Boolean.TRUE);
    }
    for (String scheme : schemeBlackList.getBlackList()) {
      _schemeBlackList.put(scheme.toUpperCase(), Boolean.TRUE);
    }
  }
 
  /**
   * Gets the inputFile.
   * @return the inputFile
   */
  public File getInputFile() {
    return _inputFile;
  }

  public Map<ExternalId, Map<String, Double>> getLastKnownValues() {
    OperationTimer timer = new OperationTimer(s_logger, "Reading LKV from disk");
    FileInputStream fis = null;
    try {
      fis = new FileInputStream(getInputFile());
    } catch (FileNotFoundException ex) {
      throw new OpenGammaRuntimeException("Error opening file " + getInputFile().getAbsolutePath(), ex);
    }
    Map<ExternalId, Map<String, Double>> ticks = Maps.newHashMap();
    FudgeMsgReader reader = s_fudgeContext.createMessageReader(fis);
    try {
      while (reader.hasNext()) {
        FudgeMsg message = reader.nextMessage();
        ExternalId securityId = ExternalId.parse(message.getString(RedisLKVFileWriter.SECURITY));
        if (_schemeBlackList.containsKey(securityId.getScheme().getName())) {
          continue;
        }
        FudgeMsg ticksMsg = message.getMessage(RedisLKVFileWriter.TICKS);
        Map<String, Double> secTicks = Maps.newHashMap();
        for (String fieldName : ticksMsg.getAllFieldNames()) {
          if (_dataFieldBlackList.containsKey(fieldName.toUpperCase())) {
            continue;
          }
          secTicks.put(fieldName, ticksMsg.getDouble(fieldName));
        }
        ticks.put(securityId, secTicks);
      }
    } finally {
      IOUtils.closeQuietly(fis);
    }
    timer.finished();
    return ticks;
  }
 
}
TOP

Related Classes of com.opengamma.integration.timeseries.snapshot.RedisLKVFileReader

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.