@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 Set<FlowElement> getAllSourceElements() { Set<FlowElement> results = createIdentitySet(); for( Process process : vertexSet() ) results.addAll( process.getSourceElements() ); return results; }
@Override public boolean addVertex( Process process ) { sourceElements.addAll( process.getSourceElements() ); sinkElements.addAll( process.getSinkElements() ); trapsMap.putAll( process.getTrapMap() ); return graph.addVertex( process ); }
/** * Does the given process perform any work? * * @param process * @return */ public static boolean isIdentity( ProcessModel process ) { ElementGraph elementGraph = ElementGraphs.asExtentMaskedSubGraph( process.getElementGraph() ); Set<FlowElement> sourceElements = process.getSourceElements(); Set<FlowElement> sinkElements = process.getSinkElements(); return elementGraph.vertexSet().size() == ( sourceElements.size() + sinkElements.size() ); } }
/** * Does the given process perform any work? * * @param process * @param excludingType * @return */ public static boolean isIdentity( ProcessModel process, Class<? extends FlowElement> excludingType ) { ElementGraph elementGraph = ElementGraphs.asExtentMaskedSubGraph( process.getElementGraph() ); Set<? extends FlowElement> sourceElements = Util.narrowIdentitySet( excludingType, process.getSourceElements(), false ); Set<? extends FlowElement> sinkElements = Util.narrowIdentitySet( excludingType, process.getSinkElements(), false ); return elementGraph.vertexSet().size() == ( sourceElements.size() + sinkElements.size() ); }
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; }