@Override public Transformed<E> transform( PlannerContext plannerContext, E rootGraph ) { int maxDepth = plannerContext.getIntProperty( TRANSFORM_RECURSION_DEPTH_MAX, DEFAULT_TRANSFORM_RECURSION_DEPTH_MAX ); Transformed<E> transformed = new Transformed<>( plannerContext, this, expressionGraph, rootGraph ); E result = transform( plannerContext.getLogger(), transformed, rootGraph, maxDepth, 0 ); transformed.setEndGraph( result ); return transformed; }
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 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 ); } }