use of org.drools.modelcompiler.constraints.LambdaReadAccessor in project drools by kiegroup.
the class KiePackagesBuilder method addQueryPattern.
private void addQueryPattern(Query query, QueryImpl queryImpl, RuleContext ctx) {
Pattern pattern = new Pattern(ctx.getNextPatternIndex(), // offset is 0 by default
0, ClassObjectType.DroolsQuery_ObjectType, null);
InternalReadAccessor extractor = new LambdaReadAccessor(DroolsQuery.class, q -> ((DroolsQuery) q).getName());
QueryNameConstraint constraint = new QueryNameConstraint(extractor, query.getName());
pattern.addConstraint(constraint);
queryImpl.getLhs().addChild(pattern);
Variable<?>[] args = query.getArguments();
Declaration[] declarations = new Declaration[args.length];
for (int i = 0; i < args.length; i++) {
int index = i;
LambdaReadAccessor accessor = new LambdaReadAccessor(index, args[index].getType(), obj -> ((DroolsQuery) obj).getElements()[index]);
declarations[i] = new Declaration(args[i].getName(), accessor, pattern, true);
pattern.addDeclaration(declarations[i]);
ctx.addQueryDeclaration(args[i], declarations[i]);
}
queryImpl.setParameters(declarations);
}
use of org.drools.modelcompiler.constraints.LambdaReadAccessor in project drools by kiegroup.
the class KiePackagesBuilder method buildPattern.
private Pattern buildPattern(RuleContext ctx, GroupElement group, Condition condition) {
org.drools.model.Pattern<?> modelPattern = (org.drools.model.Pattern) condition;
Pattern pattern = addPatternForVariable(ctx, group, modelPattern.getPatternVariable());
for (Binding binding : modelPattern.getBindings()) {
Declaration declaration = new Declaration(binding.getBoundVariable().getName(), new LambdaReadAccessor(binding.getBoundVariable().getType(), binding.getBindingFunction()), pattern, true);
pattern.addDeclaration(declaration);
if (binding.getReactOn() != null) {
addFieldsToPatternWatchlist(pattern, binding.getReactOn());
}
ctx.addInnerDeclaration(binding.getBoundVariable(), declaration);
}
Declaration queryArgDecl = ctx.getQueryDeclaration(modelPattern.getPatternVariable());
if (queryArgDecl != null) {
pattern.addConstraint(new UnificationConstraint(queryArgDecl));
}
addConstraintsToPattern(ctx, pattern, modelPattern, modelPattern.getConstraint());
addFieldsToPatternWatchlist(pattern, modelPattern.getWatchedProps());
return pattern;
}
Aggregations