/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.view.compilation;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.Trade;
import com.opengamma.core.position.impl.AbstractPortfolioNodeTraversalCallback;
import com.opengamma.id.UniqueId;
/**
* Traverses a portfolio, gathering identifiers corresponding to {@link PortfolioNode}, {@link Position} and {@link Trade} entities. These are targets that may potentially create terminal output
* requirements from on a view definition.
*/
/* package */class PortfolioIdentifierGatherer extends AbstractPortfolioNodeTraversalCallback {
private final ConcurrentMap<UniqueId, Boolean> _identifiers = new ConcurrentHashMap<UniqueId, Boolean>();
public Set<UniqueId> getIdentifiers() {
return _identifiers.keySet();
}
@Override
public void preOrderOperation(final PortfolioNode portfolioNode) {
_identifiers.put(portfolioNode.getUniqueId(), Boolean.TRUE);
}
@Override
public void preOrderOperation(final PortfolioNode parentNode, final Position position) {
if (_identifiers.putIfAbsent(position.getUniqueId(), Boolean.TRUE) == null) {
for (Trade trade : position.getTrades()) {
_identifiers.put(trade.getUniqueId(), Boolean.TRUE);
}
}
}
}