@Override public Iterator<Process> getOrdinalTopologicalIterator() { return getOrderedTopologicalIterator( new Comparator<Process>() { @Override public int compare( Process lhs, Process rhs ) { return Integer.valueOf( lhs.getOrdinal() ).compareTo( rhs.getOrdinal() ); } } ); }
/** * All elements, from the given ElementGraph, that belong to two or more processes, that are not sink or source elements that * connect processes. * * @return Set */ @Override public Set<FlowElement> getDuplicatedElements( ElementGraph elementGraph ) { Set<FlowElement> results = createIdentitySet(); for( FlowElement flowElement : elementGraph.vertexSet() ) { if( getElementProcesses( flowElement ).size() > 1 ) results.add( flowElement ); } results.remove( Extent.head ); results.remove( Extent.tail ); results.removeAll( getAllSourceElements() ); results.removeAll( getAllSinkElements() ); return results; }
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; }
@Override public List<ElementGraph> getElementGraphs( FlowElement flowElement ) { List<Process> elementProcesses = getElementProcesses( flowElement ); List<ElementGraph> elementGraphs = new ArrayList<>(); for( Process elementProcess : elementProcesses ) elementGraphs.add( elementProcess.getElementGraph() ); return elementGraphs; }
@Override public Set<Tap> getSourceTaps() { if( sourceTaps != null ) return sourceTaps; sourceTaps = Util.narrowIdentitySet( Tap.class, getSourceElements() ); return sourceTaps; }
@Override public Set<Tap> getSinkTaps() { if( sinkTaps != null ) return sinkTaps; sinkTaps = Util.narrowIdentitySet( Tap.class, getSinkElements() ); return sinkTaps; }
@Override public Set<ElementGraph> getIdentityElementGraphs() { Set<ElementGraph> results = createIdentitySet(); for( Process process : getIdentityProcesses() ) results.add( process.getElementGraph() ); return results; }
@Override public Map<String, Tap> getSourceTapsMap() { Map<String, Tap> result = new HashMap<>(); Set<Tap> sourceTaps = getSourceTaps(); for( Tap sourceTap : sourceTaps ) { for( Process process : graph.vertexSet() ) { if( !process.getSourceTaps().contains( sourceTap ) ) continue; ElementGraph elementGraph = process.getElementGraph(); for( Scope scope : elementGraph.outgoingEdgesOf( sourceTap ) ) result.put( scope.getName(), sourceTap ); } } return result; }
@Override public Map<String, Tap> getSinkTapsMap() { Map<String, Tap> result = new HashMap<>(); Set<Tap> sinkTaps = getSinkTaps(); for( Tap sinkTap : sinkTaps ) { for( Process process : graph.vertexSet() ) { if( !process.getSinkTaps().contains( sinkTap ) ) continue; ElementGraph elementGraph = process.getElementGraph(); for( Scope scope : elementGraph.incomingEdgesOf( sinkTap ) ) result.put( scope.getName(), sinkTap ); } } return result; }
@Override public List<ElementGraph> getElementGraphs( Scope scope ) { List<Process> elementProcesses = getElementProcesses( scope ); List<ElementGraph> elementGraphs = new ArrayList<>(); for( Process elementProcess : elementProcesses ) elementGraphs.add( elementProcess.getElementGraph() ); return elementGraphs; }
@Override public Iterator<Process> getTopologicalIterator() { return getOrderedTopologicalIterator( new Comparator<Process>() { @Override public int compare( Process lhs, Process rhs ) { return Integer.valueOf( lhs.getSubmitPriority() ).compareTo( rhs.getSubmitPriority() ); } } ); }
public Iterator<FlowNode> getOrderedTopologicalIterator() { return super.getOrderedTopologicalIterator( FLOW_NODE_COMPARATOR ); } }