Package com.opengamma.web.analytics.blotter

Source Code of com.opengamma.web.analytics.blotter.AbstractTradeBuilder

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics.blotter;

import java.util.Map;
import java.util.Set;

import org.joda.beans.MetaBean;
import org.joda.convert.StringConvert;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.opengamma.DataNotFoundException;
import com.opengamma.id.ExternalScheme;
import com.opengamma.id.UniqueId;
import com.opengamma.master.portfolio.ManageablePortfolio;
import com.opengamma.master.portfolio.ManageablePortfolioNode;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.master.position.PositionMaster;
import com.opengamma.master.security.SecurityMaster;
import com.opengamma.util.ArgumentChecker;

/**
*
*/
/* package */ abstract class AbstractTradeBuilder {

  /** Scheme for counterparty external IDs */
  /* package */ static final ExternalScheme CPTY_SCHEME = ExternalScheme.of("Cpty");
  /** JSON key for the counterparty name */
  /* package */ static final String COUNTERPARTY = "counterparty";
  /** Counterparty name used if one isn't supplied. */
  /* package */ static final String DEFAULT_COUNTERPARTY = "Default Counterparty";

  /** For loading and saving securities */
  private final SecurityMaster _securityMaster;
  /** For loading and saving positions and trades */
  private final PositionMaster _positionMaster;
  /** For looking up {@link MetaBean}s to build securities */
  @SuppressWarnings("unused")
  private final MetaBeanFactory _metaBeanFactory;
  /** For converting JSON values when building beans */
  private final StringConvert _stringConvert;
  /** For loading and saving portfolios and nodes */
  private final PortfolioMaster _portfolioMaster;

  /* package */ AbstractTradeBuilder(PositionMaster positionMaster,
                                     PortfolioMaster portfolioMaster,
                                     SecurityMaster securityMaster,
                                     Set<MetaBean> metaBeans,
                                     StringConvert stringConvert) {
    ArgumentChecker.notNull(securityMaster, "securityManager");
    ArgumentChecker.notNull(positionMaster, "positionMaster");
    ArgumentChecker.notEmpty(metaBeans, "metaBeans");
    ArgumentChecker.notNull(stringConvert, "stringConvert");
    ArgumentChecker.notNull(portfolioMaster, "portfolioMaster");
    _portfolioMaster = portfolioMaster;
    _positionMaster = positionMaster;
    _securityMaster = securityMaster;
    _metaBeanFactory = new MapMetaBeanFactory(metaBeans);
    _stringConvert = stringConvert;
  }

  protected static Map<String, Object> property(String name,
                                                boolean optional,
                                                boolean readOnly,
                                                Map<String, Object> typeInfo) {
    return ImmutableMap.<String, Object>of("name", name,
                                           "type", "single",
                                           "optional", optional,
                                           "readOnly", readOnly,
                                           "types", ImmutableList.of(typeInfo));
  }

  protected static Map<String, Object> attributesProperty() {
    Map<String, Object> map = Maps.newHashMap();
    map.put("name", "attributes");
    map.put("type", "map");
    map.put("optional", true); // can't be null but have a default value so client doesn't need to specify
    map.put("readOnly", false);
    map.put("types", ImmutableList.of(typeInfo("string", "")));
    map.put("valueTypes", ImmutableList.of(typeInfo("string", "")));
    return map;
  }

  protected static Map<String, Object> typeInfo(String expectedType, String actualType) {
    return ImmutableMap.<String, Object>of("beanType", false, "expectedType", expectedType, "actualType", actualType);
  }

  /**
   * Performs a depth first search to find a node with a specified ID.
   * @param portfolio The portfolio to search
   * @param nodeId The node ID
   * @return The node with specified ID, not null
   * @throws DataNotFoundException If the node can't be found
   */
  /* package */ static ManageablePortfolioNode findNode(ManageablePortfolio portfolio, UniqueId nodeId) {
    ManageablePortfolioNode node = findNode(portfolio.getRootNode(), nodeId);
    if (node != null) {
      return node;
    } else {
      throw new DataNotFoundException("Node " + nodeId + " not found");
    }
  }

  private static ManageablePortfolioNode findNode(ManageablePortfolioNode node, UniqueId nodeId) {
    if (node.getUniqueId().equalObjectId(nodeId)) {
      return node;
    }
    for (ManageablePortfolioNode childNode : node.getChildNodes()) {
      ManageablePortfolioNode node1 = findNode(childNode, nodeId);
      if (node1 != null) {
        return node1;
      }
    }
    return null;
  }

  /* package */  SecurityMaster getSecurityMaster() {
    return _securityMaster;
  }

  /* package */ PositionMaster getPositionMaster() {
    return _positionMaster;
  }

  /* package */ StringConvert getStringConvert() {
    return _stringConvert;
  }

  /* package */ PortfolioMaster getPortfolioMaster() {
    return _portfolioMaster;
  }
}
TOP

Related Classes of com.opengamma.web.analytics.blotter.AbstractTradeBuilder

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.