protected void writeVertexSet( ProcessModel processModel, ElementGraph parentGraph, ElementGraph currentGraph, PrintWriter out, Set<FlowElement> spansClusters, boolean onlySpans, Set<FlowElement> duplicatedElements, Set<FlowElement> identityElements ) { boolean isIdentityGraph = false; if( processModel != null ) isIdentityGraph = ProcessModels.isIdentity( processModel, Tap.class ); for( FlowElement flowElement : currentGraph.vertexSet() ) { boolean spans = spansClusters.contains( flowElement ); boolean isIdentity = identityElements.contains( flowElement ); if( isIdentity && isIdentityGraph ) continue; if( isIdentity ) spans = false; if( spans != onlySpans ) continue; out.print( INDENT + getVertexID( isIdentity ? parentGraph : currentGraph, flowElement ) ); String labelName = null; if( vertexLabelProvider != null ) labelName = vertexLabelProvider.getVertexName( flowElement ); Map<String, String> attributes = new HashMap<>(); if( duplicatedElements.contains( flowElement ) ) attributes.put( "color", getHSBColorFor( flowElement ) ); if( vertexAttributeProvider != null ) attributes.putAll( vertexAttributeProvider.getComponentAttributes( flowElement ) ); renderAttributes( out, labelName, attributes ); out.println( ";" ); } }
public void writeGraph( Writer writer, ElementGraph parentGraph, ProcessGraph<? extends ProcessModel> processGraph ) { PrintWriter out = new PrintWriter( writer ); out.println( "digraph G {" ); Set<FlowElement> spanElements = getSpanElements( processGraph ); Set<FlowElement> identityElements = getIdentityElements( processGraph ); Set<FlowElement> duplicatedElements = processGraph.getDuplicatedElements( parentGraph ); writeVertexSet( null, parentGraph, parentGraph, out, spanElements, true, duplicatedElements, identityElements ); writeEdgeSet( processGraph, parentGraph, parentGraph, out, spanElements, true, identityElements ); Iterator<? extends ProcessModel> topologicalIterator = processGraph.getOrdinalTopologicalIterator(); while( topologicalIterator.hasNext() ) { ProcessModel processModel = topologicalIterator.next(); out.println(); out.print( "subgraph cluster_" ); out.print( clusterIDProvider.getVertexName( processModel ) ); out.println( " {" ); out.print( INDENT ); out.print( "label = \"" ); out.print( clusterLabelProvider.getVertexName( processModel ) ); out.println( "\";" ); out.println(); writeVertexSet( processModel, parentGraph, processModel.getElementGraph(), out, spanElements, false, duplicatedElements, identityElements ); writeEdgeSet( processGraph, parentGraph, processModel.getElementGraph(), out, spanElements, false, identityElements ); out.println( "}" ); } out.println( "}" ); out.flush(); }
private void writeEdge( PrintWriter out, Scope scope, FlowElement edgeSource, FlowElement edgeTarget, ElementGraph sourceGraph, ElementGraph targetGraph ) { String source = getVertexID( sourceGraph, edgeSource ); String target = getVertexID( targetGraph, edgeTarget ); out.print( INDENT + source + CONNECTOR + target ); String labelName = null; if( edgeLabelProvider != null ) labelName = edgeLabelProvider.getEdgeName( scope ); Map<String, String> attributes = null; if( edgeAttributeProvider != null ) attributes = edgeAttributeProvider.getComponentAttributes( scope ); renderAttributes( out, labelName, attributes ); out.println( ";" ); }
public static boolean printProcessGraph( String filename, final ElementGraph graph, final ProcessGraph<? extends ProcessModel> processGraph ) { try { File parentFile = new File( filename ).getParentFile(); if( parentFile != null && !parentFile.exists() ) parentFile.mkdirs(); Writer writer = new FileWriter( filename ); DOTProcessGraphWriter graphWriter = new DOTProcessGraphWriter( new IntegerNameProvider<>(), new FlowElementVertexNameProvider( graph, null ), new ScopeEdgeNameProvider(), new VertexAttributeProvider(), new EdgeAttributeProvider(), new ProcessGraphNameProvider(), new ProcessGraphLabelProvider() ); graphWriter.writeGraph( writer, graph, processGraph ); writer.close(); return true; } catch( IOException exception ) { LOG.error( "failed printing graph to: {}, with exception: {}", filename, exception ); } return false; }
writeEdge( out, scope, edgeSource, edgeTarget, sourceGraph, targetGraph );