/** * 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; } }