use of com.github.javaparser.ast.expr.ObjectCreationExpr in project drools by kiegroup.
the class PackageModel method generateRulesInUnit.
private void generateRulesInUnit(String ruleUnitName, BlockStmt rulesListInitializerBody, RuleSourceResult results, ClassOrInterfaceDeclaration rulesClass) {
results.withModel(name + "." + ruleUnitName, name + "." + rulesClass.getNameAsString());
Collection<MethodDeclaration> ruleMethodsInUnit = ofNullable(ruleMethods.get(ruleUnitName)).map(Map::values).orElse(null);
if (ruleMethodsInUnit == null || ruleMethodsInUnit.isEmpty()) {
BodyDeclaration<?> getQueriesMethod = parseBodyDeclaration(" @Override\n" + " public java.util.List<org.drools.model.Rule> getRules() {\n" + " return java.util.Collections.emptyList();\n" + " }\n");
rulesClass.addMember(getQueriesMethod);
return;
}
if (!ruleUnitName.equals(DEFAULT_RULE_UNIT)) {
BodyDeclaration<?> modelNameMethod = parseBodyDeclaration(" @Override\n" + " public String getName() {\n" + " return super.getName() + \"." + ruleUnitName + "\";\n" + " }\n");
rulesClass.addMember(modelNameMethod);
BodyDeclaration<?> modelPackageNameMethod = parseBodyDeclaration(" @Override\n" + " public String getPackageName() {\n" + " return super.getName();\n" + " }\n");
rulesClass.addMember(modelPackageNameMethod);
}
createAndAddGetRulesMethod(rulesClass);
int ruleCount = ruleMethodsInUnit.size();
boolean requiresMultipleRulesLists = ruleCount >= RULES_DECLARATION_PER_CLASS - 1;
boolean parallelRulesLoad = ruleCount >= (RULES_DECLARATION_PER_CLASS * 3 - 1);
MethodCallExpr parallelRulesGetter = null;
MethodCallExpr rules = buildRulesField(rulesClass);
if (requiresMultipleRulesLists) {
rulesClass.addImplementedType(RulesSupplier.class);
if (parallelRulesLoad) {
parallelRulesGetter = new MethodCallExpr(new NameExpr(RulesSupplier.class.getCanonicalName()), "getRules");
parallelRulesGetter.addArgument(new ThisExpr());
rulesListInitializerBody.addStatement(new AssignExpr(new NameExpr("this.rules"), parallelRulesGetter, AssignExpr.Operator.ASSIGN));
} else {
MethodCallExpr add = new MethodCallExpr(new NameExpr("rules"), "addAll");
add.addArgument("getRulesList()");
rulesListInitializerBody.addStatement(add);
}
}
ruleMethodsInUnit.parallelStream().forEach(DrlxParseUtil::transformDrlNameExprToNameExpr);
int maxLength = ruleMethodsInUnit.parallelStream().map(MethodDeclaration::toString).mapToInt(String::length).max().orElse(1);
int rulesPerClass = oneClassPerRule ? 1 : Math.max(50000 / maxLength, 1);
// each method per Drlx parser result
int count = -1;
Map<Integer, ClassOrInterfaceDeclaration> splitted = new LinkedHashMap<>();
for (MethodDeclaration ruleMethod : ruleMethodsInUnit) {
String methodName = ruleMethod.getNameAsString();
ClassOrInterfaceDeclaration rulesMethodClass = splitted.computeIfAbsent(++count / rulesPerClass, i -> {
String className = rulesClass.getNameAsString() + (oneClassPerRule ? "_" + methodName : "RuleMethods" + i);
return createClass(className, results);
});
rulesMethodClass.addMember(ruleMethod);
if (count % RULES_DECLARATION_PER_CLASS == RULES_DECLARATION_PER_CLASS - 1) {
int index = count / RULES_DECLARATION_PER_CLASS;
rules = buildRulesField(results, index);
ObjectCreationExpr newObject = new ObjectCreationExpr(null, toClassOrInterfaceType(rulesFileName + "Rules" + index), NodeList.nodeList());
if (parallelRulesLoad) {
parallelRulesGetter.addArgument(newObject);
} else {
MethodCallExpr add = new MethodCallExpr(new NameExpr("rules"), "addAll");
add.addArgument(new MethodCallExpr(newObject, "getRulesList"));
rulesListInitializerBody.addStatement(add);
}
}
// manage in main class init block:
rules.addArgument(new MethodCallExpr(new NameExpr(rulesMethodClass.getNameAsString()), methodName));
}
BodyDeclaration<?> rulesList = requiresMultipleRulesLists ? parseBodyDeclaration("java.util.List<org.drools.model.Rule> rules = new java.util.ArrayList<>(" + ruleCount + ");") : parseBodyDeclaration("java.util.List<org.drools.model.Rule> rules = getRulesList();");
rulesClass.addMember(rulesList);
}
use of com.github.javaparser.ast.expr.ObjectCreationExpr in project drools by kiegroup.
the class KiePMMLModelFactoryUtilsTest method createIntervalsExpression.
@Test
public void createIntervalsExpression() {
List<Interval> intervals = IntStream.range(0, 3).mapToObj(i -> {
int leftMargin = new Random().nextInt(40);
int rightMargin = leftMargin + 13;
return new Interval(leftMargin, rightMargin);
}).collect(Collectors.toList());
Expression retrieved = KiePMMLModelFactoryUtils.createIntervalsExpression(intervals);
assertNotNull(retrieved);
assertTrue(retrieved instanceof MethodCallExpr);
MethodCallExpr mtdExp = (MethodCallExpr) retrieved;
String expected = "java.util.Arrays";
assertEquals(expected, mtdExp.getScope().get().asNameExpr().toString());
expected = "asList";
assertEquals(expected, mtdExp.getName().asString());
NodeList<Expression> arguments = mtdExp.getArguments();
assertEquals(intervals.size(), arguments.size());
arguments.forEach(argument -> {
assertTrue(argument instanceof ObjectCreationExpr);
ObjectCreationExpr objCrt = (ObjectCreationExpr) argument;
assertEquals(Interval.class.getCanonicalName(), objCrt.getType().asString());
Optional<Interval> intervalOpt = intervals.stream().filter(interval -> String.valueOf(interval.getLeftMargin()).equals(objCrt.getArgument(0).asNameExpr().toString()) && String.valueOf(interval.getRightMargin()).equals(objCrt.getArgument(1).asNameExpr().toString())).findFirst();
assertTrue(intervalOpt.isPresent());
});
}
use of com.github.javaparser.ast.expr.ObjectCreationExpr in project drools by kiegroup.
the class KiePMMLModelFactoryUtilsTest method getObjectCreationExprFromInterval.
@Test
public void getObjectCreationExprFromInterval() {
Interval interval = new Interval(null, -14);
ObjectCreationExpr retrieved = KiePMMLModelFactoryUtils.getObjectCreationExprFromInterval(interval);
assertNotNull(retrieved);
assertEquals(Interval.class.getCanonicalName(), retrieved.getType().asString());
NodeList<Expression> arguments = retrieved.getArguments();
assertEquals(2, arguments.size());
assertTrue(arguments.get(0) instanceof NullLiteralExpr);
assertEquals(String.valueOf(interval.getRightMargin()), arguments.get(1).asNameExpr().toString());
interval = new Interval(-13, 10);
retrieved = KiePMMLModelFactoryUtils.getObjectCreationExprFromInterval(interval);
assertNotNull(retrieved);
assertEquals(Interval.class.getCanonicalName(), retrieved.getType().asString());
arguments = retrieved.getArguments();
assertEquals(2, arguments.size());
assertEquals(String.valueOf(interval.getLeftMargin()), arguments.get(0).asNameExpr().toString());
assertEquals(String.valueOf(interval.getRightMargin()), arguments.get(1).asNameExpr().toString());
interval = new Interval(-13, null);
retrieved = KiePMMLModelFactoryUtils.getObjectCreationExprFromInterval(interval);
assertNotNull(retrieved);
assertEquals(Interval.class.getCanonicalName(), retrieved.getType().asString());
arguments = retrieved.getArguments();
assertEquals(2, arguments.size());
assertEquals(String.valueOf(interval.getLeftMargin()), arguments.get(0).asNameExpr().toString());
assertTrue(arguments.get(1) instanceof NullLiteralExpr);
}
use of com.github.javaparser.ast.expr.ObjectCreationExpr in project drools by kiegroup.
the class KiePMMLModelFactoryUtilsTest method commonVerifyMiningFieldsObjectCreation.
private void commonVerifyMiningFieldsObjectCreation(List<Expression> toVerify, List<MiningField> miningFields) {
toVerify.forEach(expression -> {
assertTrue(expression instanceof ObjectCreationExpr);
ObjectCreationExpr objCrt = (ObjectCreationExpr) expression;
assertEquals(MiningField.class.getCanonicalName(), objCrt.getType().asString());
Optional<MiningField> miningFieldOpt = miningFields.stream().filter(miningField -> miningField.getName().equals(objCrt.getArgument(0).asStringLiteralExpr().asString())).findFirst();
assertTrue(miningFieldOpt.isPresent());
MiningField miningField = miningFieldOpt.get();
assertEquals(MiningField.class.getCanonicalName(), objCrt.getType().asString());
String expected = miningField.getUsageType() != null ? FIELD_USAGE_TYPE.class.getCanonicalName() + "." + miningField.getUsageType() : "null";
assertEquals(expected, objCrt.getArgument(1).toString());
expected = miningField.getOpType() != null ? OP_TYPE.class.getCanonicalName() + "." + miningField.getOpType() : "null";
assertEquals(expected, objCrt.getArgument(2).toString());
expected = miningField.getDataType() != null ? DATA_TYPE.class.getCanonicalName() + "." + miningField.getDataType() : "null";
assertEquals(expected, objCrt.getArgument(3).toString());
expected = miningField.getMissingValueTreatmentMethod() != null ? MISSING_VALUE_TREATMENT_METHOD.class.getCanonicalName() + "." + miningField.getMissingValueTreatmentMethod() : "null";
assertEquals(expected, objCrt.getArgument(4).toString());
expected = miningField.getInvalidValueTreatmentMethod() != null ? INVALID_VALUE_TREATMENT_METHOD.class.getCanonicalName() + "." + miningField.getInvalidValueTreatmentMethod() : "null";
assertEquals(expected, objCrt.getArgument(5).toString());
expected = miningField.getMissingValueReplacement() != null ? miningField.getMissingValueReplacement() : "null";
assertEquals(expected, objCrt.getArgument(6).asStringLiteralExpr().asString());
expected = miningField.getInvalidValueReplacement() != null ? miningField.getInvalidValueReplacement() : "null";
assertEquals(expected, objCrt.getArgument(7).asStringLiteralExpr().asString());
MethodCallExpr allowedValuesMethod = objCrt.getArgument(8).asMethodCallExpr();
IntStream.range(0, 3).forEach(i -> {
String exp = miningField.getAllowedValues().get(i);
assertEquals(exp, allowedValuesMethod.getArgument(i).asStringLiteralExpr().asString());
});
MethodCallExpr intervalsMethod = objCrt.getArgument(9).asMethodCallExpr();
IntStream.range(0, 3).forEach(i -> {
Interval interval = miningField.getIntervals().get(i);
ObjectCreationExpr objectCreationExpr = intervalsMethod.getArgument(i).asObjectCreationExpr();
String exp = interval.getLeftMargin().toString();
assertEquals(exp, objectCreationExpr.getArgument(0).asNameExpr().toString());
exp = interval.getRightMargin().toString();
assertEquals(exp, objectCreationExpr.getArgument(1).asNameExpr().toString());
});
});
}
use of com.github.javaparser.ast.expr.ObjectCreationExpr in project drools by kiegroup.
the class KiePMMLTargetFactory method getKiePMMLTargetVariableInitializer.
static MethodCallExpr getKiePMMLTargetVariableInitializer(final TargetField targetField) {
final MethodDeclaration methodDeclaration = TARGET_TEMPLATE.getMethodsByName(GETKIEPMMLTARGET).get(0).clone();
final BlockStmt targetBody = methodDeclaration.getBody().orElseThrow(() -> new KiePMMLException(String.format(MISSING_BODY_TEMPLATE, methodDeclaration)));
final VariableDeclarator variableDeclarator = getVariableDeclarator(targetBody, TARGET).orElseThrow(() -> new KiePMMLException(String.format(MISSING_VARIABLE_IN_BODY, TARGET, targetBody)));
variableDeclarator.setName(targetField.getName());
final MethodCallExpr toReturn = variableDeclarator.getInitializer().orElseThrow(() -> new KiePMMLException(String.format(MISSING_VARIABLE_INITIALIZER_TEMPLATE, TARGET, targetBody))).asMethodCallExpr();
final MethodCallExpr builder = getChainedMethodCallExprFrom("builder", toReturn);
final StringLiteralExpr nameExpr = new StringLiteralExpr(targetField.getName());
builder.setArgument(0, nameExpr);
final ObjectCreationExpr targetFieldInstantiation = getTargetFieldVariableInitializer(targetField);
builder.setArgument(2, targetFieldInstantiation);
return toReturn;
}
Aggregations