@Override public List<Process> getElementSinkProcesses( FlowElement flowElement ) { List<Process> sinks = new ArrayList<>(); for( Process process : vertexSet() ) { if( process.getSourceElements().contains( flowElement ) ) sinks.add( process ); } return sinks; }
@Override public List<Process> getElementSourceProcesses( FlowElement flowElement ) { List<Process> sources = new ArrayList<>(); for( Process process : vertexSet() ) { if( process.getSinkElements().contains( flowElement ) ) sources.add( process ); } return sources; }
@Override public List<Process> getElementProcesses( FlowElement flowElement ) { List<Process> processes = new ArrayList<>(); for( Process process : vertexSet() ) { if( process.getElementGraph().vertexSet().contains( flowElement ) ) processes.add( process ); } return processes; }
/** * Returns a set of processes that perform no internal operations. * <p> * for example if a FlowNode only has a Merge source and a GroupBy sink. * * @return */ @Override public Set<Process> getIdentityProcesses() { Set<Process> results = new HashSet<>(); for( Process process : vertexSet() ) { if( ProcessModels.isIdentity( process ) ) results.add( process ); } return results; }
@Override public List<Process> getElementProcesses( Scope scope ) { List<Process> processes = new ArrayList<>(); for( Process process : vertexSet() ) { if( process.getElementGraph().edgeSet().contains( scope ) ) processes.add( process ); } return processes; }
@Override public Set<FlowElement> getAllSourceElements() { Set<FlowElement> results = createIdentitySet(); for( Process process : vertexSet() ) results.addAll( process.getSourceElements() ); return results; }
@Override public Set<ElementGraph> getElementGraphs() { Set<ElementGraph> results = createIdentitySet(); for( Process process : vertexSet() ) results.add( process.getElementGraph() ); return results; }
@Override public Set<FlowElement> getAllSinkElements() { Set<FlowElement> results = createIdentitySet(); for( Process process : vertexSet() ) results.addAll( process.getSinkElements() ); 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; }
public EnumMultiMap<FlowElement> getAnnotations() { EnumMultiMap<FlowElement> annotations = new EnumMultiMap<>(); for( Process process : vertexSet() ) { ElementGraph elementGraph = process.getElementGraph(); if( elementGraph instanceof AnnotatedGraph ) annotations.addAll( ( (AnnotatedGraph) elementGraph ).getAnnotations() ); } return annotations; }