}
return valueNamesBySecurityType.asMap();
}
public ViewStatusResultAggregator run() {
ViewStatusResultAggregator aggregator = new ViewStatusResultAggregatorImpl();
CompletionService<PerViewStatusResult> completionService = new ExecutorCompletionService<PerViewStatusResult>(_executor);
//submit task to executor to run partitioned by security type
for (String securityType : _valueRequirementBySecType.keySet()) {
Collection<String> valueRequirements = _valueRequirementBySecType.get(securityType);
completionService.submit(new ViewStatusCalculationTask(_toolContext, _portfolioId, _user, securityType, valueRequirements, _marketDataSpecification));
}
try {
// process all completed task
for (int i = 0; i < _valueRequirementBySecType.size(); i++) {
Future<PerViewStatusResult> futureTask = completionService.take();
PerViewStatusResult perViewStatusResult = futureTask.get();
for (ViewStatusKey viewStatusKey : perViewStatusResult.keySet()) {
aggregator.putStatus(viewStatusKey, perViewStatusResult.get(viewStatusKey));
}
}
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();