use of org.drools.javaparser.ast.expr.StringLiteralExpr in project drools by kiegroup.
the class ToTypedExpressionTest method pointFreeTest.
@Test
public void pointFreeTest() {
final PointFreeExpr expression = new PointFreeExpr(null, new NameExpr("name"), NodeList.nodeList(new StringLiteralExpr("[A-Z]")), new SimpleName("matches"), false, null, null, null, null);
TypedExpressionResult typedExpressionResult = new ExpressionTyper(ruleContext, Person.class, null, true).toTypedExpression(expression);
final TypedExpression actual = typedExpressionResult.getTypedExpression().get();
final TypedExpression expected = typedResult("eval(org.drools.model.operators.MatchesOperator.INSTANCE, _this.getName(), \"[A-Z]\")", String.class);
assertEquals(expected, actual);
}
use of org.drools.javaparser.ast.expr.StringLiteralExpr in project drools by kiegroup.
the class Consequence method rewriteRHS.
private boolean rewriteRHS(BlockStmt ruleBlock, BlockStmt rhs) {
AtomicBoolean requireDrools = new AtomicBoolean(false);
List<MethodCallExpr> methodCallExprs = rhs.findAll(MethodCallExpr.class);
List<MethodCallExpr> updateExprs = new ArrayList<>();
for (MethodCallExpr methodCallExpr : methodCallExprs) {
if (isDroolsMethod(methodCallExpr)) {
if (!methodCallExpr.getScope().isPresent()) {
methodCallExpr.setScope(new NameExpr("drools"));
}
if (knowledgeHelperMethods.contains(methodCallExpr.getNameAsString())) {
methodCallExpr.setScope(asKnoledgeHelperExpression);
} else if (methodCallExpr.getNameAsString().equals("update")) {
updateExprs.add(methodCallExpr);
} else if (methodCallExpr.getNameAsString().equals("retract")) {
methodCallExpr.setName(new SimpleName("delete"));
}
requireDrools.set(true);
}
}
for (MethodCallExpr updateExpr : updateExprs) {
Expression argExpr = updateExpr.getArgument(0);
if (argExpr instanceof NameExpr) {
String updatedVar = ((NameExpr) argExpr).getNameAsString();
Class<?> updatedClass = context.getDeclarationById(updatedVar).map(DeclarationSpec::getDeclarationClass).orElseThrow(RuntimeException::new);
MethodCallExpr bitMaskCreation = new MethodCallExpr(new NameExpr(BitMask.class.getCanonicalName()), "getPatternMask");
bitMaskCreation.addArgument(new ClassExpr(JavaParser.parseClassOrInterfaceType(updatedClass.getCanonicalName())));
methodCallExprs.subList(0, methodCallExprs.indexOf(updateExpr)).stream().filter(mce -> mce.getScope().isPresent() && hasScope(mce, updatedVar)).map(mce -> ClassUtils.setter2property(mce.getNameAsString())).filter(Objects::nonNull).distinct().forEach(s -> bitMaskCreation.addArgument(new StringLiteralExpr(s)));
VariableDeclarationExpr bitMaskVar = new VariableDeclarationExpr(BITMASK_TYPE, "mask_" + updatedVar, Modifier.FINAL);
AssignExpr bitMaskAssign = new AssignExpr(bitMaskVar, bitMaskCreation, AssignExpr.Operator.ASSIGN);
ruleBlock.addStatement(bitMaskAssign);
updateExpr.addArgument("mask_" + updatedVar);
}
}
return requireDrools.get();
}
use of org.drools.javaparser.ast.expr.StringLiteralExpr in project drools by kiegroup.
the class ModelGenerator method addUnitData.
private static void addUnitData(String unitVar, Class<?> type, BlockStmt ruleBlock) {
Type declType = classToReferenceType(type);
ClassOrInterfaceType varType = JavaParser.parseClassOrInterfaceType(UnitData.class.getCanonicalName());
varType.setTypeArguments(declType);
VariableDeclarationExpr var_ = new VariableDeclarationExpr(varType, toVar(unitVar), Modifier.FINAL);
MethodCallExpr unitDataCall = new MethodCallExpr(null, UNIT_DATA_CALL);
unitDataCall.addArgument(new ClassExpr(declType));
unitDataCall.addArgument(new StringLiteralExpr(unitVar));
AssignExpr var_assign = new AssignExpr(var_, unitDataCall, AssignExpr.Operator.ASSIGN);
ruleBlock.addStatement(var_assign);
}
use of org.drools.javaparser.ast.expr.StringLiteralExpr in project drools by kiegroup.
the class ModelGenerator method ruleAttributes.
/**
* Build a list of method calls, representing each needed {@link org.drools.model.impl.RuleBuilder#attribute(org.drools.model.Rule.Attribute, Object)}
* starting from a drools-compiler {@link RuleDescr}.
* The tuple represent the Rule Attribute expressed in JavParser form, and the attribute value expressed in JavaParser form.
*/
private static List<MethodCallExpr> ruleAttributes(RuleContext context, RuleDescr ruleDescr) {
List<MethodCallExpr> ruleAttributes = new ArrayList<>();
for (Entry<String, AttributeDescr> as : ruleDescr.getAttributes().entrySet()) {
// dialect=mvel is not an attribute of DSL expr(), so we check it before.
if (as.getKey().equals("dialect")) {
if (as.getValue().getValue().equals("mvel")) {
context.setRuleDialect(RuleDialect.MVEL);
}
continue;
}
MethodCallExpr attributeCall = new MethodCallExpr(null, ATTRIBUTE_CALL);
attributeCall.addArgument(attributesMap.get(as.getKey()));
switch(as.getKey()) {
case "dialect":
throw new RuntimeException("should not have reached this part of the code");
case "no-loop":
case "salience":
case "enabled":
case "auto-focus":
case "lock-on-active":
attributeCall.addArgument(parseExpression(as.getValue().getValue()));
break;
case "agenda-group":
case "activation-group":
case "ruleflow-group":
case "duration":
case "timer":
attributeCall.addArgument(new StringLiteralExpr(as.getValue().getValue()));
break;
case "calendars":
String value = as.getValue().getValue().trim();
if (value.startsWith("[")) {
value = value.substring(1, value.length() - 1).trim();
}
Expression arrayExpr = parseExpression("new String[] { " + value + " }");
attributeCall.addArgument(arrayExpr);
break;
case "date-effective":
case "date-expires":
attributeCall.addArgument(parseExpression(String.format("GregorianCalendar.from(LocalDate.parse(\"%s\", dateTimeFormatter).atStartOfDay(ZoneId.systemDefault()))", as.getValue().getValue())));
break;
default:
throw new UnsupportedOperationException("Unhandled case for rule attribute: " + as.getKey());
}
ruleAttributes.add(attributeCall);
}
return ruleAttributes;
}
use of org.drools.javaparser.ast.expr.StringLiteralExpr in project drools by kiegroup.
the class ModelGenerator method objectAsJPExpression.
private static Expression objectAsJPExpression(Object annValue) {
if (annValue instanceof String) {
StringLiteralExpr aStringLiteral = new StringLiteralExpr();
// use the setter method in order for the string literal be properly escaped.
aStringLiteral.setString(annValue.toString());
return aStringLiteral;
} else if (annValue instanceof Number) {
return parseExpression(annValue.toString());
} else if (annValue instanceof Map) {
throw new UnsupportedOperationException("cannot define a canonical representation for a java.util.Map yet.");
} else {
throw new UnsupportedOperationException("I was unable to define a canonical String representation to give to JP yet about: " + annValue);
}
}
Aggregations