final Set<UniqueId> includeEvents, final Set<UniqueId> excludeEvents) {
if (calcConfig.getAllPortfolioRequirements().size() == 0) {
// No portfolio requirements for this calculation configuration - avoid further processing.
return;
}
final Portfolio portfolio = builder.getCompilationContext().getPortfolio();
final PortfolioCompilerTraversalCallback traversalCallback = new PortfolioCompilerTraversalCallback(calcConfig, builder, context.getActiveResolutions(), includeEvents, excludeEvents);
final PortfolioNodeTraverser traverser = PortfolioNodeTraverser.parallel(traversalCallback, context.getServices().getExecutorService());
if (isStripedPortfolioRequirements()) {
final Map<String, Set<Pair<String, ValueProperties>>> requirementsBySecurityType = traversalCallback.getPortfolioRequirementsBySecurityType();
Map<String, Set<Pair<String, ValueProperties>>> requirementSubSet = Maps.newHashMapWithExpectedSize(requirementsBySecurityType.size());
traversalCallback.setPortfolioRequirementsBySecurityType(requirementSubSet);
for (Pair<String, ValueProperties> stripe : getStripes(requirementsBySecurityType)) {
s_logger.debug("Adding {} portfolio requirement stripe", stripe);
final Set<Pair<String, ValueProperties>> stripeRequirements = Collections.singleton(stripe);
for (Map.Entry<String, Set<Pair<String, ValueProperties>>> securityTypeRequirement : requirementsBySecurityType.entrySet()) {
if (securityTypeRequirement.getValue().contains(stripe)) {
requirementSubSet.put(securityTypeRequirement.getKey(), stripeRequirements);
} else {
requirementSubSet.remove(securityTypeRequirement.getKey());
}
}
traversalCallback.reset();
traverser.traverse(portfolio.getRootNode());
try {
s_logger.debug("Waiting for stripe {} to complete", stripe);
// TODO: Waiting for a completion state causes any progress tracker to abort (it sees 100% and stops). Need to rethink how to do the progress estimates.
builder.waitForDependencyGraphBuild();
} catch (InterruptedException e) {
throw new OpenGammaRuntimeException("Interrupted during striped compilation", e);
}
}
} else {
s_logger.debug("Adding all portfolio requirements directly");
traverser.traverse(portfolio.getRootNode());
}
}