private void markTransformed( Transformed transformed, Path path ) { if( transformed.getEndGraph() != null && !transformed.getBeginGraph().equals( transformed.getEndGraph() ) ) markFolder( path, GREEN ); }
public ElementGraph getContractedGraph() { if( contractedGraph == null ) { contractedTransformed = contractedTransformer.transform( plannerContext, elementGraph ); contractedGraph = contractedTransformed.getEndGraph(); } return contractedGraph; }
public Transformed<ElementGraph> performTransform( PlannerContext plannerContext, ElementGraph rootGraph ) { Transformed<ElementGraph> result = new Transformed<>( plannerContext, this, rootGraph ); ElementGraph graphCopy = rootGraph.copyElementGraph(); Transformed<ElementGraph> transformed = graphTransformer.transform( plannerContext, graphCopy ); result.addChildTransform( transformed ); if( transformed.getEndGraph() != null && !rootGraph.equals( transformed.getEndGraph() ) ) result.setEndGraph( transformed.getEndGraph() ); return result; }
public Asserted assertion( PlannerContext plannerContext, E graph ) { Transformed<E> transform = transform( plannerContext, graph ); if( transform != null && transform.getEndGraph() != null ) graph = transform.getEndGraph(); Match match = finder.findFirstMatch( plannerContext, graph ); Asserted asserted = new Asserted( plannerContext, this, graph, message, assertionType, match ); if( transform != null ) asserted.addChildTransform( transform ); return asserted; } }
@Override protected ElementGraph prepareForMatch( ProcessLogger processLogger, Transformed<ElementGraph> transformed, ElementGraph graph ) { if( graphTransformer == null ) return graph; if( processLogger.isDebugEnabled() ) processLogger.logDebug( "transforming with: {}", graphTransformer.getClass().getSimpleName() ); Transformed child = graphTransformer.transform( transformed.getPlannerContext(), graph ); transformed.addChildTransform( child ); return child.getEndGraph(); } }
@Override protected ElementGraph prepareForMatch( ProcessLogger processLogger, Transformed<ElementGraph> transformed, ElementGraph graph ) { if( graphTransformer == null ) return makeAnnotated( graph ); Transformed child = graphTransformer.transform( transformed.getPlannerContext(), graph ); transformed.addChildTransform( child ); ElementGraph endGraph = child.getEndGraph(); return makeAnnotated( endGraph ); }
ElementGraph endGraph = transformed.getEndGraph();
public Transformed<ElementSubGraph> transform( PlannerContext plannerContext, ElementGraph rootGraph ) { Transformed<ElementSubGraph> transformed = new Transformed<>( plannerContext, this, subGraphMatcher, rootGraph ); try { Transformed contractedTransformed = graphTransformer.transform( plannerContext, rootGraph ); // contracted graph transform transformed.addChildTransform( contractedTransformed ); // apply contracted sub-graph matcher to get the bounded sub-graph of the original graph ElementGraph contractedGraph = contractedTransformed.getEndGraph(); Match match = findAllPrimaries ? subGraphFinder.findAllMatches( plannerContext, contractedGraph ) : subGraphFinder.findFirstMatch( plannerContext, contractedGraph ); if( !match.foundMatch() ) return transformed; ElementGraph contractedSubGraph = match.getMatchedGraph(); ElementSubGraph resultSubGraph = asSubGraphOf( rootGraph, contractedSubGraph ); // the bounded sub-graph of the rootGraph transformed.setEndGraph( resultSubGraph ); return transformed; } catch( Throwable throwable ) { throw new TransformException( throwable, transformed ); } }
private ElementGraph transform( ElementGraph flowElementGraph, RuleExpression ruleExpression ) { RuleRegistry ruleRegistry = new RuleRegistry(); ruleRegistry.addElementFactory( NonTapFactory.TEMP_TAP, new NonTapFactory() ); PlannerContext plannerContext = new PlannerContext( ruleRegistry, null, null, null, true ); RuleInsertionTransformer ruleTempTapInsertionTransformer = new RuleInsertionTransformer( PlanPhase.PreResolveAssembly, ruleExpression, IntermediateTapElementFactory.TEMP_TAP ); Transformed<ElementGraph> insertionTransformed = ruleTempTapInsertionTransformer.transform( plannerContext, flowElementGraph ); insertionTransformed.writeDOTs( getPlanPath() ); return insertionTransformed.getEndGraph(); }
@Test public void testFind2() { ElementGraph graph = new HashJoinSameSourceGraph(); graph = new ContractedTransformer( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); FlowElementExpression sharedTap = new FlowElementExpression( Tap.class, TypeExpression.Topo.SplitOnly ); FlowElementExpression sharedHashJoin = new FlowElementExpression( HashJoin.class ); ExpressionGraph expressionGraph = new ExpressionGraph() .arc( sharedTap, ScopeExpression.ALL, sharedHashJoin ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findFirstMatch( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); }
@Test public void testFind() { ElementGraph graph = new HashJoinSameSourceGraph(); graph = new ContractedTransformer( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); FlowElementExpression SHARED_TAP = new FlowElementExpression( Tap.class, TypeExpression.Topo.SplitOnly ); FlowElementExpression SHARED_HASHJOIN = new FlowElementExpression( HashJoin.class ); ExpressionGraph expressionGraph = new ExpressionGraph() .arcs( SHARED_TAP, SHARED_HASHJOIN ) .arcs( SHARED_TAP, SHARED_HASHJOIN ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findFirstMatch( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); }
@Test public void testFindAllMatched() { // ElementGraph graph = new HashJoinSameSourceGraph(); ElementGraph graph = new JoinAroundJoinRightMostGraph(); graph.writeDOT( getPlanPath() + "/full.dot" ); // graph = new ContractedTransform( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); graph = new ContractedTransformer( new NoGroupTapExpressionGraph() ).transform( graph ).getEndGraph(); graph.writeDOT( getPlanPath() + "/contracted.dot" ); ExpressionGraph expressionGraph = new ExpressionGraph( new FlowElementExpression( ElementCapture.Primary, Tap.class ) ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findAllMatches( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); } }
@Test public void testFindAllOnPrimary() { // ElementGraph graph = new HashJoinSameSourceGraph(); ElementGraph graph = new JoinAroundJoinRightMostGraph(); graph.writeDOT( getPlanPath() + "/full.dot" ); // graph = new ContractedTransform( new SyncPipeExpressionGraph() ).transform( graph ).getEndGraph(); graph = new ContractedTransformer( new NoGroupTapExpressionGraph() ).transform( graph ).getEndGraph(); graph.writeDOT( getPlanPath() + "/contracted.dot" ); ExpressionGraph expressionGraph = new ExpressionGraph() .arc( new FlowElementExpression( Tap.class ), ScopeExpression.ALL, new FlowElementExpression( ElementCapture.Primary, HashJoin.class ) ); GraphFinder graphFinder = new GraphFinder( expressionGraph ); Match match = graphFinder.findAllMatchesOnPrimary( graph ); match.getMatchedGraph().writeDOT( getPlanPath() + "/match.dot" ); }
result.getEndGraph().writeDOT( getPlanPath() + "/pipeline/" + count + "-cleaned-graph.dot" );