protected FlowNodeGraph createFlowNodeGraph( List<ElementGraph> elementGraphs ) { ElementGraph mapElementGraph = elementGraphs.get( 0 ); ElementGraph reduceElementGraph = elementGraphs.size() == 2 ? elementGraphs.get( 1 ) : null; FlowNodeGraph flowNodeGraph = new FlowNodeGraph(); int nodes = elementGraphs.size(); FlowNode mapperNode = new BaseFlowNode( mapElementGraph, String.format( "(1/%s)", nodes ), 0 ); flowNodeGraph.addVertex( mapperNode ); if( nodes == 2 ) { FlowNode reducerNode = new BaseFlowNode( reduceElementGraph, "(2/2)", 1 ); flowNodeGraph.addVertex( reducerNode ); flowNodeGraph.addEdge( mapperNode, reducerNode, new ProcessEdge( mapperNode, reducerNode ) ); } return flowNodeGraph; } }
protected FlowNodeGraph createFlowNodeGraph( List<ElementGraph> elementGraphs ) { ElementGraph mapElementGraph = elementGraphs.get( 0 ); ElementGraph reduceElementGraph = elementGraphs.size() == 2 ? elementGraphs.get( 1 ) : null; FlowNodeGraph flowNodeGraph = new FlowNodeGraph(); int nodes = elementGraphs.size(); FlowNode mapperNode = new BaseFlowNode( mapElementGraph, String.format( "(1/%s)", nodes ), 0 ); flowNodeGraph.addVertex( mapperNode ); if( nodes == 2 ) { FlowNode reducerNode = new BaseFlowNode( reduceElementGraph, "(2/2)", 1 ); flowNodeGraph.addVertex( reducerNode ); flowNodeGraph.addEdge( mapperNode, reducerNode, new ProcessEdge( mapperNode, reducerNode ) ); } return flowNodeGraph; } }
public void bindEdges() { for( Process sinkProcess : vertexSet() ) { for( Process sourceProcess : vertexSet() ) { if( sourceProcess == sinkProcess ) continue; // outer edge sources and sinks to this graph sourceElements.removeAll( sinkProcess.getSinkElements() ); sinkElements.removeAll( sourceProcess.getSourceElements() ); } } for( Process sinkProcess : vertexSet() ) { for( Process sourceProcess : vertexSet() ) { if( sourceProcess == sinkProcess ) continue; for( FlowElement intermediate : sourceProcess.getSinkElements() ) { if( sinkProcess.getSourceElements().contains( intermediate ) ) addEdge( sourceProcess, sinkProcess, new ProcessEdge<>( sourceProcess, intermediate, sinkProcess ) ); } } } // clear tap map caches sourceTaps = null; sinkTaps = null; }