/** * 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() ); } }
@Override public String getVertexName( ProcessModel processModel ) { return "ordinal: " + processModel.getOrdinal() + "\\nid: " + processModel.getID() + "\\nhash: " + canonicalHash( processModel.getElementGraph() ); } }
@Override public int compare( Process lhs, Process rhs ) { return Integer.valueOf( lhs.getSubmitPriority() ).compareTo( rhs.getSubmitPriority() ); } } );
public ProcessEdge( Process sourceProcess, FlowElement flowElement, Process sinkProcess ) { this( sourceProcess.getElementGraph(), flowElement, sinkProcess.getElementGraph() ); this.sourceProcessID = sourceProcess.getID(); this.sinkProcessID = sinkProcess.getID(); }
@Override public boolean addVertex( Process process ) { sourceElements.addAll( process.getSourceElements() ); sinkElements.addAll( process.getSinkElements() ); trapsMap.putAll( process.getTrapMap() ); return graph.addVertex( process ); }
public String getVertexName( Process process ) { String name = "[" + process.getName() + "]"; String sourceName = ""; Set<Tap> sources = process.getSourceTaps(); for( Tap source : sources ) sourceName += "\\nsrc:[" + source.getIdentifier() + "]"; if( sourceName.length() != 0 ) name += sourceName; Collection<Group> groups = process.getGroups(); for( Group group : groups ) { String groupName = group.getName(); if( groupName.length() != 0 ) name += "\\ngrp:" + groupName; } Set<Tap> sinks = process.getSinkTaps(); String sinkName = ""; for( Tap sink : sinks ) sinkName = "\\nsnk:[" + sink.getIdentifier() + "]"; if( sinkName.length() != 0 ) name += sinkName; return name.replaceAll( "\"", "\'" ); } }, 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 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 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; }
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<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 String getVertexName( ProcessModel processModel ) { return "" + processModel.getOrdinal(); } }
@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<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 Set<FlowElement> getAllSourceElements() { Set<FlowElement> results = createIdentitySet(); for( Process process : vertexSet() ) results.addAll( process.getSourceElements() ); return results; }
@Override public int compare( Process lhs, Process rhs ) { return Integer.valueOf( lhs.getOrdinal() ).compareTo( rhs.getOrdinal() ); } } );
@Override public Set<FlowElement> getAllSinkElements() { Set<FlowElement> results = createIdentitySet(); for( Process process : vertexSet() ) results.addAll( process.getSinkElements() ); return results; }
/** * 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() ); }
@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; }