private Multimap<String, ProcessorNode> wireBolt(List<ProcessorNode> group,
BoltDeclarer boltDeclarer,
Set<ProcessorNode> initialProcessors) {
LOG.debug("Wiring bolt with boltDeclarer {}, group {}, initialProcessors {}, nodeGroupingInfo {}",
boltDeclarer, group, initialProcessors, nodeGroupingInfo);
Multimap<String, ProcessorNode> streamToInitialProcessor = ArrayListMultimap.create();
Set<ProcessorNode> curSet = new HashSet<>(group);
for (ProcessorNode curNode : initialProcessors) {
for (Node parent : parentNodes(curNode)) {
if (curSet.contains(parent)) {
LOG.debug("Parent {} of curNode {} is in group {}", parent, curNode, group);
} else {
for (String stream : curNode.getParentStreams(parent)) {
declareGrouping(boltDeclarer, parent, stream, nodeGroupingInfo.get(parent, stream));
if (parent.getComponentId().startsWith("spout")) {
stream = parent.getComponentId() + stream;
} else {
String punctuationStream = StreamUtil.getPunctuationStream(stream);
declareGrouping(boltDeclarer, parent, punctuationStream, GroupingInfo.all());
}
streamToInitialProcessor.put(stream, curNode);
}
}
}
}
return streamToInitialProcessor;
}