use of org.drools.model.Value in project drools by kiegroup.
the class KiePackagesBuilder method buildQueryPattern.
private RuleConditionElement buildQueryPattern(RuleContext ctx, QueryCallPattern queryPattern) {
Pattern pattern = new Pattern(ctx.getNextPatternIndex(), 0, ClassObjectType.ObjectArray_ObjectType, null);
InternalReadAccessor arrayReader = new SelfReferenceClassFieldReader(Object[].class);
QueryArgument[] arguments = new QueryArgument[queryPattern.getArguments().length];
List<Integer> varIndexList = new ArrayList<>();
List<Declaration> requiredDeclarations = new ArrayList<>();
for (int i = 0; i < queryPattern.getArguments().length; i++) {
Argument arg = queryPattern.getArguments()[i];
if (arg instanceof Variable) {
Variable var = ((Variable) arg);
Declaration decl = ctx.getDeclaration(var);
if (decl != null) {
requiredDeclarations.add(decl);
arguments[i] = new QueryArgument.Declr(decl);
} else {
ArrayElementReader reader = new ArrayElementReader(arrayReader, i, arg.getType());
pattern.addDeclaration(var.getName()).setReadAccessor(reader);
arguments[i] = QueryArgument.VAR;
varIndexList.add(i);
}
} else if (arg instanceof Value) {
arguments[i] = new QueryArgument.Literal(((Value) arg).getValue());
} else {
throw new UnsupportedOperationException();
}
}
return new QueryElement(pattern, queryPattern.getQuery().getName(), arguments, varIndexList.stream().mapToInt(i -> i).toArray(), requiredDeclarations.toArray(new Declaration[requiredDeclarations.size()]), queryPattern.isOpen(), // TODO: query.isAbductive() );
false);
}
Aggregations