Package com.opengamma.engine.target

Source Code of com.opengamma.engine.target.MockComputationTargetResolver

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

import java.math.BigDecimal;

import org.threeten.bp.LocalDate;

import com.opengamma.core.position.Portfolio;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.PositionSource;
import com.opengamma.core.position.Trade;
import com.opengamma.core.position.impl.MockPositionSource;
import com.opengamma.core.position.impl.SimpleCounterparty;
import com.opengamma.core.position.impl.SimplePortfolio;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.core.position.impl.SimplePosition;
import com.opengamma.core.position.impl.SimpleTrade;
import com.opengamma.core.security.Security;
import com.opengamma.core.security.SecurityLink;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.core.security.impl.SimpleSecurityLink;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.InMemorySecuritySource;
import com.opengamma.engine.MapComputationTargetResolver;
import com.opengamma.engine.target.lazy.LazyResolveContext;
import com.opengamma.engine.target.lazy.LazyResolvedPosition;
import com.opengamma.engine.target.lazy.LazyResolvedTrade;
import com.opengamma.engine.target.lazy.TargetResolverPortfolio;
import com.opengamma.engine.target.lazy.TargetResolverPortfolioNode;
import com.opengamma.engine.target.lazy.TargetResolverPosition;
import com.opengamma.engine.target.lazy.TargetResolverTrade;
import com.opengamma.id.ExternalId;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;

/**
*
*/
public class MockComputationTargetResolver extends MapComputationTargetResolver {

  /**
   *
   */
  public static final LocalDate TODAY = LocalDate.now();

  private final InMemorySecuritySource _securitySource = new InMemorySecuritySource();
  private final MockPositionSource _positionSource = new MockPositionSource();

  private int _portfolioId;
  private int _nodeId;
  private int _positionId;
  private int _tradeId;
  private int _securityId;

  private int _resolveCalls;

  protected MockComputationTargetResolver() {
    createPortfolio();
  }

  public static MockComputationTargetResolver resolved() {
    return new MockComputationTargetResolver();
  }

  public static MockComputationTargetResolver unresolved() {
    return new MockComputationTargetResolver() {

      @Override
      protected Portfolio portfolio(final Portfolio portfolio) {
        return new TargetResolverPortfolio(atVersionCorrection(VersionCorrection.LATEST), portfolio);
      }

      @Override
      protected PortfolioNode portfolioNode(final PortfolioNode node) {
        return new TargetResolverPortfolioNode(atVersionCorrection(VersionCorrection.LATEST), node);
      }

      @Override
      protected Position position(final Position position) {
        return new TargetResolverPosition(atVersionCorrection(VersionCorrection.LATEST), new LazyResolvedPosition(
            new LazyResolveContext(getSecuritySource(), null).atVersionCorrection(VersionCorrection.LATEST), new SimplePosition(position)));
      }

      @Override
      protected Trade trade(final Trade trade) {
        return new TargetResolverTrade(atVersionCorrection(VersionCorrection.LATEST), new LazyResolvedTrade(
            new LazyResolveContext(getSecuritySource(), null).atVersionCorrection(VersionCorrection.LATEST), new SimpleTrade(trade)));
      }

      @Override
      protected SecurityLink security(final Security security) {
        return new SimpleSecurityLink(security.getExternalIdBundle());
      }

    };
  }

  protected Portfolio portfolio(final Portfolio portfolio) {
    return portfolio;
  }

  private void createPortfolio() {
    final int id = _portfolioId++;
    final SimplePortfolio portfolio = new SimplePortfolio(UniqueId.of("Portfolio", Integer.toString(id)), "Portfolio " + id);
    portfolio.setRootNode(createNode(null, 2));
    _positionSource.addPortfolio(portfolio);
  }

  protected PortfolioNode portfolioNode(final PortfolioNode node) {
    return node;
  }

  private SimplePortfolioNode createNode(final UniqueId parentNodeId, int depth) {
    final int id = _nodeId++;
    final SimplePortfolioNode node = new SimplePortfolioNode(UniqueId.of("Node", Integer.toString(id)), "Node " + id) {

      private static final long serialVersionUID = 1L;

      @Override
      public void setUniqueId(final UniqueId uid) {
        // No-op
      }

    };
    if (parentNodeId != null) {
      node.setParentNodeId(parentNodeId);
    }
    if (depth > 0) {
      node.addChildNode(createNode(node.getUniqueId(), depth - 1));
      node.addChildNode(createNode(node.getUniqueId(), depth - 1));
    }
    node.addPosition(createPosition());
    node.addPosition(createPosition());
    addTarget(new ComputationTarget(ComputationTargetType.PORTFOLIO_NODE, portfolioNode(node)));
    return node;
  }

  protected Trade trade(final Trade trade) {
    return trade;
  }

  protected Position position(final Position position) {
    return position;
  }

  protected SecurityLink security(final Security security) {
    return SimpleSecurityLink.of(security);
  }

  private SimplePosition createPosition() {
    final Security security = createSecurity();
    final SimplePosition position = new SimplePosition(UniqueId.of("Position", Integer.toString(_positionId++)), BigDecimal.ONE, security) {

      private static final long serialVersionUID = 1L;

      @Override
      public void setUniqueId(final UniqueId uid) {
        // No-op
      }

    };
    position.setSecurityLink(security(security));
    final SimpleTrade trade = new SimpleTrade(security, BigDecimal.ONE, new SimpleCounterparty(ExternalId.of("Counterparty", "Mock")), TODAY, null) {

      private static final long serialVersionUID = 1L;

      @Override
      public void setUniqueId(final UniqueId uid) {
        if (getUniqueId() == null) {
          super.setUniqueId(uid);
        }
      }

    };
    trade.setUniqueId(UniqueId.of("Trade", Integer.toString(_tradeId++)));
    trade.setSecurityLink(security(security));
    addTarget(new ComputationTarget(ComputationTargetType.TRADE, trade(trade)));
    position.addTrade(trade);
    addTarget(new ComputationTarget(ComputationTargetType.POSITION, position(position)));
    return position;
  }

  private Security createSecurity() {
    final Security security = new MockSecurity(_securityId++);
    _securitySource.addSecurity(security);
    addTarget(new ComputationTarget(ComputationTargetType.SECURITY, security));
    return security;
  }

  @Override
  public ComputationTarget resolve(final ComputationTargetSpecification specification, final VersionCorrection versionCorrection) {
    _resolveCalls++;
    return super.resolve(specification, versionCorrection);
  }

  public int getResolveCalls() {
    return _resolveCalls;
  }

  @Override
  public SecuritySource getSecuritySource() {
    return _securitySource;
  }

  public PositionSource getPositionSource() {
    return _positionSource;
  }

}
TOP

Related Classes of com.opengamma.engine.target.MockComputationTargetResolver

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.