@Override protected Transformed<ElementGraph> transform( PlannerContext plannerContext, ElementGraph graph ) { Transformed transformed = null; if( contractedTransformer != null ) transformed = contractedTransformer.transform( plannerContext, graph ); else if( subGraphTransformer != null ) transformed = subGraphTransformer.transform( plannerContext, graph ); return transformed; }
public RuleTransformer( LogLevel logLevel, PlanPhase phase, RuleExpression ruleExpression ) { this.logLevel = logLevel; this.phase = phase; this.ruleExpression = ruleExpression; if( ruleExpression.getContractionExpression() != null ) contractedTransformer = new ContractedTransformer( ruleExpression.getContractionExpression() ); else contractedTransformer = null; if( ruleExpression.getContractedMatchExpression() != null ) { if( contractedTransformer == null ) throw new IllegalArgumentException( "must have contracted expression if given contracted match expression" ); subGraphTransformer = new SubGraphTransformer( contractedTransformer, ruleExpression.getContractedMatchExpression() ); } else { subGraphTransformer = null; } }
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 ); } }
public RuleAssert( PlanPhase phase, RuleExpression ruleExpression, String message, AssertionType assertionType ) { super( ruleExpression.getMatchExpression(), message, assertionType ); this.phase = phase; this.ruleExpression = ruleExpression; if( ruleExpression.getContractionExpression() != null ) contractedTransformer = new ContractedTransformer( ruleExpression.getContractionExpression() ); else contractedTransformer = null; if( ruleExpression.getContractedMatchExpression() != null ) { if( contractedTransformer == null ) throw new IllegalArgumentException( "must have contracted expression if given contracted match expression" ); subGraphTransformer = new SubGraphTransformer( contractedTransformer, ruleExpression.getContractedMatchExpression() ); } else { subGraphTransformer = null; } }