// queue(s) from the FlowElement to the set of output queues
// we monitor for further event processing.
try {
newFlow.reverseBfs(new DAG.Operator<FlowElementNode>() {
public void process(FlowElementNode elemNode) throws DAGOperatorException {
FlowElement flowElem = elemNode.getFlowElement();
// All FlowElements that we see will have LocalContext subclass contexts.
// Get the output queue from this.
LocalContext elemContext = (LocalContext) flowElem.getContext();
elemContext.initControlQueue(mCompletionEventQueue);
elemContext.setFlowData(activeFlowData);
elemContext.createDownstreamQueues();
List<SelectableQueue<Object>> elemBuffers = elemContext.getDownstreamQueues();
if (null != elemBuffers) {
List<FlowElement> downstreams = elemContext.getDownstream();
// Bind each queue to its downstream element.
for (int i = 0; i < elemBuffers.size(); i++) {
SelectableQueue<Object> elemBuffer = elemBuffers.get(i);
if (null != elemBuffer) {
FlowElement downstream = downstreams.get(i);
mInputQueues.put(elemBuffer, downstream);
mSelect.add(elemBuffer); // And watch this queue for updates.
}
}
}