Package com.opengamma.financial.generator

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

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

import java.util.ArrayList;
import java.util.List;

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

/**
* Utility class for constructing a portfolio node from child portfolio node generators.
*/
public class TreePortfolioNodeGenerator implements PortfolioNodeGenerator {

  private final NameGenerator _nameGenerator;
  private final List<PortfolioNodeGenerator> _childNodes;

  /**
   * Creates a new portfolio node generator.
   *
   * @param nameGenerator the source of portfolio node names
   */
  public TreePortfolioNodeGenerator(final NameGenerator nameGenerator) {
    ArgumentChecker.notNull(nameGenerator, "nameGenerator");
    _nameGenerator = nameGenerator;
    _childNodes = new ArrayList<PortfolioNodeGenerator>();
  }

  public void addChildNode(final PortfolioNodeGenerator childNode) {
    ArgumentChecker.notNull(childNode, "childNode");
    _childNodes.add(childNode);
  }

  protected NameGenerator getNameGenerator() {
    return _nameGenerator;
  }

  @Override
  public PortfolioNode createPortfolioNode() {
    final SimplePortfolioNode node = new SimplePortfolioNode(getNameGenerator().createName());
    for (PortfolioNodeGenerator childNodeGenerator : _childNodes) {
      final PortfolioNode childNode = childNodeGenerator.createPortfolioNode();
      if (childNode != null) {
        node.addChildNode(childNode);
      }
    }
    return node;
  }

}
TOP

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

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.