/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.comparison;
import java.util.Collection;
import com.opengamma.core.position.Portfolio;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.impl.SimplePortfolio;
import com.opengamma.core.position.impl.SimplePortfolioNode;
/**
* Represents the result of a portfolio comparison operation, providing:
* <ul>
* <li>The intersection of identical positions</li>
* <li>The positions only present in the first portfolio</li>
* <li>The positions only present in the second portfolio</li>
* <li>The positions that exist in both but have changed from the first to the second</li>
* </ul>
*/
public class PortfolioComparison extends PositionSetComparison {
/**
* First portfolio name.
*/
private final String _leftName;
/**
* Second portfolio name.
*/
private final String _rightName;
protected PortfolioComparison(final PositionSetComparison underlying, final String leftName, final String rightName) {
super(underlying);
_leftName = leftName;
_rightName = rightName;
}
public Portfolio getOnlyInFirstPortfolio() {
return createPortfolio("Positions of " + getLeftName() + " not in " + getRightName(), getOnlyInFirst());
}
public Portfolio getOnlyInSecondPortfolio() {
return createPortfolio("Positions of " + getRightName() + " not in " + getLeftName(), getOnlyInSecond());
}
public Portfolio getCommonPortfolio() {
return createPortfolio("Common positions of " + getLeftName() + " and " + getRightName(), getIdentical());
}
private String getLeftName() {
return _leftName;
}
private String getRightName() {
return _rightName;
}
private Portfolio createPortfolio(final String name, final Collection<Position> positions) {
final SimplePortfolio portfolio = new SimplePortfolio(name);
final SimplePortfolioNode rootNode = new SimplePortfolioNode(name);
rootNode.addPositions(positions);
portfolio.setRootNode(rootNode);
return portfolio;
}
}