Package com.opengamma.integration.tool.config

Source Code of com.opengamma.integration.tool.config.ConfigSaver

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

import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeSerializer;
import org.fudgemsg.wire.FudgeMsgWriter;
import org.fudgemsg.wire.xml.FudgeXMLStreamWriter;
import org.joda.beans.impl.flexi.FlexiBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Maps;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.id.UniqueId;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.ConfigSearchRequest;
import com.opengamma.master.config.ConfigSearchResult;
import com.opengamma.master.portfolio.PortfolioDocument;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;

/**
* Class that saves a range of configuration objects into a file in XML format
*/
public class ConfigSaver {

  private static final Logger s_logger = LoggerFactory.getLogger(ConfigSaver.class);
  private ConfigMaster _configMaster;
  private PortfolioMaster _portfolioMaster;
  private List<String> _names;
  private List<String> _types;
  private boolean _portPortfolioRefs;
  private boolean _verbose;

  public ConfigSaver(ConfigMaster configMaster, PortfolioMaster portfolioMaster, List<String> names, List<String> types,
                     boolean portPortfolioRefs, boolean verbose) {
    _configMaster = configMaster;
    _portfolioMaster = portfolioMaster;
    _names = names;
    _types = types;
    _portPortfolioRefs = portPortfolioRefs;
    _verbose = verbose;
  }
 
  public void saveConfigs(PrintStream outputStream) {
    List<ConfigEntry> allConfigs = getAllConfigs();
    if (_verbose) {
      s_logger.info("Matched " + allConfigs.size() + " configurations");
    }
    FudgeXMLStreamWriter xmlStreamWriter = new FudgeXMLStreamWriter(OpenGammaFudgeContext.getInstance(), new OutputStreamWriter(outputStream));
    FudgeSerializer serializer = new FudgeSerializer(OpenGammaFudgeContext.getInstance());
    FlexiBean wrapper = new FlexiBean();
    wrapper.set("configs", allConfigs);
    if (_portPortfolioRefs) {
      Map<UniqueId, String> idToPortfolioMap = getPortfolioNameMap(allConfigs);
      wrapper.set("idToPortfolioMap", idToPortfolioMap);
    }
    MutableFudgeMsg msg = serializer.objectToFudgeMsg(wrapper);
    FudgeMsgWriter fudgeMsgWriter = new FudgeMsgWriter(xmlStreamWriter);
    fudgeMsgWriter.writeMessage(msg);
    fudgeMsgWriter.close();
  }
 
  private Map<UniqueId, String> getPortfolioNameMap(List<ConfigEntry> configEntries) {
    Map<UniqueId, String> idToPortfolioNameMap = Maps.newHashMap();
    for (ConfigEntry configEntry : configEntries) {
      if (configEntry.getObject() instanceof ViewDefinition) {
        ViewDefinition viewDefinition = (ViewDefinition) configEntry.getObject();
        String portfolioName = getPortfolioName(viewDefinition.getPortfolioId());
        if (portfolioName != null) {
          idToPortfolioNameMap.put(viewDefinition.getPortfolioId(), portfolioName);
        } else {
          if (_verbose) {
            s_logger.warn("Couldn't find portfolio for id in view definition called " + viewDefinition.getName());
          }
        }
      }
    }
    return idToPortfolioNameMap;
  }
 
  private String getPortfolioName(UniqueId uniqueId) {
    if (uniqueId != null) {
      try {
        PortfolioDocument portfolioDocument = _portfolioMaster.get(uniqueId);
        if (portfolioDocument != null) {
          return portfolioDocument.getPortfolio().getName();
        }
      } catch (DataNotFoundException dnfe) {
        if (_verbose) {
          s_logger.warn("Couldn't find portfolio for " + uniqueId);
        }
      }
    }
    return null;
  }
 
  private List<ConfigEntry> getAllConfigs() {
    List<ConfigEntry> configsToSave = new ArrayList<ConfigEntry>();
    if (_types.size() > 0) {
      for (String type : _types) {
        try {
          Class<?> clazz = Class.forName(type);
          if (_names.size() > 0) {
            for (String name : _names) {
              configsToSave.addAll(getConfigs(clazz, name));       
            }
          } else {
            configsToSave.addAll(getConfigs(clazz));
          }
        } catch (ClassNotFoundException cnfe) {
          s_logger.error("Could not find class called " + type + " aborting");
          System.exit(1);
        }
      }
    } else {
      if (_names.size() > 0) {
        for (String name : _names) {
          configsToSave.addAll(getConfigs(name));
        }
      } else {
        configsToSave.addAll(getConfigs());
      }
    }
    return configsToSave;
  }

  private List<ConfigEntry> getConfigs(Class<?> type, String name) {
    ConfigSearchRequest<Object> searchReq = new ConfigSearchRequest<Object>();
    searchReq.setType(type);
    searchReq.setName(name);
    ConfigSearchResult<Object> searchResult = _configMaster.search(searchReq);
    return docsToConfigEntries(searchResult);
  }
 
  private List<ConfigEntry> getConfigs(Class<?> type) {
    ConfigSearchRequest<Object> searchReq = new ConfigSearchRequest<Object>();
    searchReq.setType(type);
    ConfigSearchResult<Object> searchResult = _configMaster.search(searchReq);
    return docsToConfigEntries(searchResult);   
  }
 
  private List<ConfigEntry> getConfigs(String name) {
    ConfigSearchRequest<Object> searchReq = new ConfigSearchRequest<Object>();
    searchReq.setName(name);
    searchReq.setType(Object.class);
    ConfigSearchResult<Object> searchResult = _configMaster.search(searchReq);
    return docsToConfigEntries(searchResult);
  }
 
  private List<ConfigEntry> getConfigs() {
    ConfigSearchRequest<Object> searchReq = new ConfigSearchRequest<Object>();
    searchReq.setType(Object.class);
    ConfigSearchResult<Object> searchResult = _configMaster.search(searchReq);
    return docsToConfigEntries(searchResult);   
  }
 
  private List<ConfigEntry> docsToConfigEntries(ConfigSearchResult<Object> searchResult) {
    List<ConfigEntry> results = new ArrayList<ConfigEntry>();
    for (ConfigItem<Object> doc : searchResult.getValues()) {
      ConfigEntry configEntry = new ConfigEntry();
      configEntry.setName(doc.getName());
      configEntry.setType(doc.getType().getCanonicalName());
      configEntry.setObject(doc.getValue());
      results.add(configEntry);
    }
    return results;
  }

}
TOP

Related Classes of com.opengamma.integration.tool.config.ConfigSaver

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.