Package com.opengamma.financial.generator

Source Code of com.opengamma.financial.generator.LeafPortfolioNodeGenerator

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

import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.util.ArgumentChecker;

/**
* Utility class for constructing a portfolio node containing a number of positions in random, but reasonable, securities.
*/
public class LeafPortfolioNodeGenerator implements PortfolioNodeGenerator {

  private final NameGenerator _nameGenerator;
  private final PositionGenerator _positionGenerator;
  private final int _size;

  /**
   * Creates a new portfolio node generator.
   *
   * @param nameGenerator the source of portfolio node names
   * @param positionGenerator the source of positions
   * @param size the number of positions to put under created nodes
   */
  public LeafPortfolioNodeGenerator(final NameGenerator nameGenerator, final PositionGenerator positionGenerator, final int size) {
    ArgumentChecker.notNull(nameGenerator, "nameGenerator");
    ArgumentChecker.notNull(positionGenerator, "positionGenerator");
    ArgumentChecker.isTrue(size > 0, "size");
    _nameGenerator = nameGenerator;
    _positionGenerator = positionGenerator;
    _size = size;
  }

  protected NameGenerator getNameGenerator() {
    return _nameGenerator;
  }

  protected PositionGenerator getPositionGenerator() {
    return _positionGenerator;
  }

  protected int getSize() {
    return _size;
  }

  @Override
  public PortfolioNode createPortfolioNode() {
    final SimplePortfolioNode node = new SimplePortfolioNode(getNameGenerator().createName());
    for (int i = 0; i < getSize(); i++) {
      Position position = getPositionGenerator().createPosition();
      // Note: the code below may be useful if the position generater sometimes fails to produce an entry and the portfolio must
      // contain the required amount. It is not useful if the position generator continually fails and you get an infinite loop.
      //while (position == null) {
      //  position = getPositionGenerator().createPosition();
      //}
      if (position != null) {
        node.addPosition(position);
      }
    }
    return node;
  }

}
TOP

Related Classes of com.opengamma.financial.generator.LeafPortfolioNodeGenerator

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.