/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.expression;
import java.util.List;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.id.UniqueId;
/**
* Navigable form of {@link PortfolioNode} that holds a full reference to its
* parent and depth count in the graph.
*/
public class NavigablePortfolioNode implements PortfolioNode {
private final NavigablePortfolioNode _parent;
private final int _depth;
private final PortfolioNode _node;
public NavigablePortfolioNode(final NavigablePortfolioNode parent, final PortfolioNode node) {
assert parent.getUniqueId().equals(node.getParentNodeId());
_parent = parent;
_depth = parent._depth + 1;
_node = node;
}
public NavigablePortfolioNode(final PortfolioNode node) {
assert node.getParentNodeId() == null;
_parent = null;
_depth = 1;
_node = node;
}
@Override
public UniqueId getUniqueId() {
return _node.getUniqueId();
}
@Override
public UniqueId getParentNodeId() {
return _node.getParentNodeId();
}
public NavigablePortfolioNode getNavigableParentNode() {
return _parent;
}
@Override
public int size() {
return _node.size();
}
@Override
public List<PortfolioNode> getChildNodes() {
return _node.getChildNodes();
}
@Override
public List<Position> getPositions() {
return _node.getPositions();
}
@Override
public String getName() {
return _node.getName();
}
public int getDepth() {
return _depth;
}
}