in kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java [116:195]
public String generate() {
CompilationUnit clazz = generator.compilationUnitOrThrow("Cannot generate Decision REST Resource");
ClassOrInterfaceDeclaration template = clazz
.findFirst(ClassOrInterfaceDeclaration.class)
.orElseThrow(() -> new NoSuchElementException("Compilation unit doesn't contain a class or interface declaration!"));
template.setName(resourceClazzName);
template.findAll(StringLiteralExpr.class).forEach(this::interpolateStrings);
template.findAll(MethodDeclaration.class).forEach(this::interpolateMethods);
interpolateInputType(template);
interpolateInputData(template);
interpolateExtractContextMethod(template);
modifyDmnMethodForStronglyTyped(template);
chooseMethodForStronglyTyped(template);
if (context.hasDI()) {
template.findAll(FieldDeclaration.class,
CodegenUtils::isApplicationField).forEach(fd -> context.getDependencyInjectionAnnotator().withInjection(fd));
} else {
template.findAll(FieldDeclaration.class,
CodegenUtils::isApplicationField).forEach(this::initializeApplicationField);
}
MethodDeclaration dmnMethod = template.findAll(MethodDeclaration.class, x -> x.getName().toString().equals("dmn")).get(0);
processOASAnn(dmnMethod, null);
final String dmnMethodUrlPlaceholder = "$dmnMethodUrl$";
template.addMember(cloneForDMNResult(dmnMethod, "dmn_dmnresult", "dmnresult", dmnMethodUrlPlaceholder));
for (DecisionService ds : dmnModel.getDefinitions().getDecisionService()) {
if (ds.getAdditionalAttributes().keySet().stream().anyMatch(qn -> qn.getLocalPart().equals("dynamicDecisionService"))) {
continue;
}
MethodDeclaration clonedMethod = dmnMethod.clone();
processOASAnn(clonedMethod, ds);
String name = CodegenStringUtil.escapeIdentifier("decisionService_" + ds.getName());
clonedMethod.setName(name);
MethodCallExpr evaluateCall = clonedMethod.findFirst(MethodCallExpr.class, x -> x.getNameAsString().equals("evaluateAll")).orElseThrow(TEMPLATE_WAS_MODIFIED);
evaluateCall.setName(new SimpleName("evaluateDecisionService"));
evaluateCall.addArgument(new StringLiteralExpr(ds.getName()));
MethodCallExpr ctxCall = clonedMethod.findFirst(MethodCallExpr.class, x -> x.getNameAsString().equals("ctx")).orElseThrow(TEMPLATE_WAS_MODIFIED);
ctxCall.addArgument(new StringLiteralExpr(ds.getName()));
//insert request path
final String path = ds.getName();
interpolateRequestPath(path, dmnMethodUrlPlaceholder, clonedMethod);
ReturnStmt returnStmt = clonedMethod.findFirst(ReturnStmt.class).orElseThrow(TEMPLATE_WAS_MODIFIED);
if (ds.getOutputDecision().size() == 1) {
MethodCallExpr rewrittenReturnExpr = returnStmt.findFirst(MethodCallExpr.class,
mce -> mce.getNameAsString().equals("extractContextIfSucceded") || mce.getNameAsString().equals("extractStronglyTypedContextIfSucceded"))
.orElseThrow(TEMPLATE_WAS_MODIFIED);
rewrittenReturnExpr.setName("extractSingletonDSIfSucceded");
}
if (context.getAddonsConfig().useMonitoring()) {
addMonitoringToMethod(clonedMethod, ds.getName());
}
template.addMember(clonedMethod);
template.addMember(cloneForDMNResult(clonedMethod, name + "_dmnresult", ds.getName() + "/dmnresult", path));
}
//set the root path for the dmnMethod itself
interpolateRequestPath("", dmnMethodUrlPlaceholder, dmnMethod);
if (context.getAddonsConfig().useMonitoring()) {
addMonitoringImports(clazz);
addMonitoringFields(template);
addExceptionMetricsLogging(clazz, nameURL);
addMonitoringToMethod(dmnMethod, nameURL);
}
template.getMembers().sort(new BodyDeclarationComparator());
return clazz.toString();
}