diff --git a/kogito-codegen/README.md b/kogito-codegen/README.md
index 8724ab76511..f53e8f53001 100644
--- a/kogito-codegen/README.md
+++ b/kogito-codegen/README.md
@@ -9,8 +9,7 @@ configure its global behavior.
```java
ApplicationGenerator appGen =
- new ApplicationGenerator(appPackageName, targetDirectory)
- .withDependencyInjection(...)
+ new ApplicationGenerator(context, appPackageName, targetDirectory)
.withAddons(...);
```
@@ -22,11 +21,11 @@ configure its global behavior.
- Each `Generator` may come with its own specific configuration
```java
- appGen.withGenerator(RuleCodegen.ofPath(ruleSourceDirectory))
+ appGen.setupGenerator(RuleCodegen.ofPath(ruleSourceDirectory))
.withKModule(getKModuleModel())
.withClassLoader(...);
- appGen.withGenerator(ProcessCodegen.ofPath(processSourceDirectory))
+ appGen.setupGenerator(ProcessCodegen.ofPath(processSourceDirectory))
.withAddons(...);
```
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractApplicationSection.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractApplicationSection.java
index b0c80c68c87..99178c9ef9e 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractApplicationSection.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractApplicationSection.java
@@ -15,6 +15,8 @@
package org.kie.kogito.codegen;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+
/**
* Base implementation for an {@link ApplicationSection}.
*
@@ -24,10 +26,12 @@
*/
public abstract class AbstractApplicationSection implements ApplicationSection {
+ protected final KogitoBuildContext buildContext;
private final String sectionClassName;
- public AbstractApplicationSection(String sectionClassName) {
+ public AbstractApplicationSection(KogitoBuildContext buildContext, String sectionClassName) {
this.sectionClassName = sectionClassName;
+ this.buildContext = buildContext;
}
@Override
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractConfigGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractConfigGenerator.java
new file mode 100644
index 00000000000..61effb38dda
--- /dev/null
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractConfigGenerator.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2020 Red Hat, Inc. and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.kie.kogito.codegen;
+
+import com.github.javaparser.ast.CompilationUnit;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+
+import java.util.Optional;
+
+public class AbstractConfigGenerator {
+
+ private final TemplatedGenerator templatedGenerator;
+
+ public AbstractConfigGenerator(KogitoBuildContext buildContext, String packageName, String targetTypeName, String resourceCdi, String resourceSpring) {
+ this.templatedGenerator = new TemplatedGenerator(
+ buildContext,
+ packageName,
+ targetTypeName,
+ resourceCdi,
+ resourceSpring);
+ }
+
+ public Optional generate() {
+ Optional compilationUnit = templatedGenerator.compilationUnit();
+ return compilationUnit.map(cu ->
+ new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
+ templatedGenerator.generatedFilePath(),
+ cu.toString()));
+ }
+}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractGenerator.java
index c8d7133cd86..9e0d32669ce 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/AbstractGenerator.java
@@ -21,15 +21,13 @@
import java.util.List;
import java.util.Map;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import org.kie.kogito.codegen.metadata.DefaultLabeler;
import org.kie.kogito.codegen.metadata.Labeler;
public abstract class AbstractGenerator implements Generator {
protected Path projectDirectory;
- protected GeneratorContext context;
- protected DependencyInjectionAnnotator annotator;
+ protected GeneratorContext context = GeneratorContext.emptyContext();
protected String packageName = ApplicationGenerator.DEFAULT_PACKAGE_NAME;
protected AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
@@ -70,11 +68,6 @@ public final Map getLabels() {
return labels;
}
- @Override
- public void setDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- }
-
@Override
public void setPackageName(String packageName) {
this.packageName = packageName;
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationConfigGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationConfigGenerator.java
index e50917590ed..a60dc3d7766 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationConfigGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationConfigGenerator.java
@@ -15,9 +15,9 @@
package org.kie.kogito.codegen;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.Optional;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
@@ -26,33 +26,86 @@
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.ast.expr.StringLiteralExpr;
import org.kie.kogito.Addons;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+import org.kie.kogito.codegen.decision.config.DecisionConfigGenerator;
+import org.kie.kogito.codegen.prediction.config.PredictionConfigGenerator;
+import org.kie.kogito.codegen.process.config.ProcessConfigGenerator;
+import org.kie.kogito.codegen.rules.config.RuleConfigGenerator;
+import static java.util.Arrays.asList;
+import static java.util.Optional.ofNullable;
import static org.kie.kogito.codegen.CodegenUtils.newObject;
-public class ApplicationConfigGenerator extends TemplatedGenerator {
+public class ApplicationConfigGenerator {
private static final String CLASS_NAME = "ApplicationConfig";
private static final String RESOURCE_DEFAULT = "/class-templates/config/ApplicationConfigTemplate.java";
private static final String RESOURCE_CDI = "/class-templates/config/CdiApplicationConfigTemplate.java";
private static final String RESOURCE_SPRING = "/class-templates/config/SpringApplicationConfigTemplate.java";
+ private final TemplatedGenerator templatedGenerator;
+
private Collection addons = Collections.emptyList();
- public ApplicationConfigGenerator(String packageName) {
- super(packageName,
- CLASS_NAME,
- RESOURCE_CDI,
- RESOURCE_SPRING,
- RESOURCE_DEFAULT);
+ private ProcessConfigGenerator processConfig;
+ private RuleConfigGenerator ruleConfig;
+ private DecisionConfigGenerator decisionConfig;
+ private PredictionConfigGenerator predictionConfig;
+ private ConfigBeanGenerator configBean;
+
+ public ApplicationConfigGenerator(KogitoBuildContext buildContext, String packageName) {
+ this.templatedGenerator = new TemplatedGenerator(
+ buildContext,
+ packageName,
+ CLASS_NAME,
+ RESOURCE_CDI,
+ RESOURCE_SPRING,
+ RESOURCE_DEFAULT);
+
+ this.configBean = new ConfigBeanGenerator(buildContext, packageName);
+ }
+
+ public ApplicationConfigGenerator withProcessConfig(ProcessConfigGenerator cfg) {
+ this.processConfig = cfg;
+ return this;
+ }
+
+ public ApplicationConfigGenerator withRuleConfig(RuleConfigGenerator cfg) {
+ this.ruleConfig = cfg;
+ return this;
+ }
+
+ public ApplicationConfigGenerator withDecisionConfig(DecisionConfigGenerator cfg) {
+ this.decisionConfig = cfg;
+ return this;
+ }
+
+ public ApplicationConfigGenerator withPredictionConfig(PredictionConfigGenerator cfg) {
+ this.predictionConfig = cfg;
+ return this;
}
- @Override
- public Optional compilationUnit() {
- Optional compilationUnit = super.compilationUnit();
- compilationUnit
- .flatMap(u -> u.findFirst(ClassOrInterfaceDeclaration.class))
+ public Collection generate() {
+ ArrayList generatedFiles = new ArrayList<>();
+ generatedFiles.add(generateApplicationConfigDescriptor());
+
+ asList(processConfig, ruleConfig, predictionConfig, decisionConfig, configBean)
+ .forEach(configGenerator -> ofNullable(configGenerator)
+ .flatMap(AbstractConfigGenerator::generate)
+ .ifPresent(generatedFiles::add));
+
+ return generatedFiles;
+ }
+
+ private GeneratedFile generateApplicationConfigDescriptor() {
+ CompilationUnit compilationUnit = templatedGenerator.compilationUnitOrThrow();
+
+ compilationUnit.findFirst(ClassOrInterfaceDeclaration.class)
.ifPresent(this::replaceAddonPlaceHolder);
- return compilationUnit;
+
+ return new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
+ templatedGenerator.generatedFilePath(),
+ compilationUnit.toString());
}
private void replaceAddonPlaceHolder(ClassOrInterfaceDeclaration cls) {
@@ -60,15 +113,15 @@ private void replaceAddonPlaceHolder(ClassOrInterfaceDeclaration cls) {
NameExpr addonsPlaceHolder =
cls.findFirst(NameExpr.class, e -> e.getNameAsString().equals("$Addons$")).
orElseThrow(() -> new InvalidTemplateException(
- typeName(),
- templatePath(),
+ templatedGenerator.typeName(),
+ templatedGenerator.templatePath(),
"Missing $Addons$ placeholder"));
ObjectCreationExpr addonsList = generateAddonsList();
addonsPlaceHolder.getParentNode()
.orElseThrow(() -> new InvalidTemplateException(
- typeName(),
- templatePath(),
+ templatedGenerator.typeName(),
+ templatedGenerator.templatePath(),
"Cannot replace $Addons$ placeholder"))
.replace(addonsPlaceHolder, addonsList);
}
@@ -82,8 +135,7 @@ private ObjectCreationExpr generateAddonsList() {
return newObject(Addons.class, asListOfAddons);
}
- public ApplicationConfigGenerator withAddons(Collection addons) {
+ public void withAddons(Collection addons) {
this.addons = addons;
- return this;
}
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationContainerGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationContainerGenerator.java
index 7bc6bca6a40..4d97f1887a4 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationContainerGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationContainerGenerator.java
@@ -21,31 +21,38 @@
import com.github.javaparser.ast.expr.MethodCallExpr;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.ast.expr.ThisExpr;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
-public class ApplicationContainerGenerator extends TemplatedGenerator {
+public class ApplicationContainerGenerator {
public static final String APPLICATION_CLASS_NAME = "Application";
private static final String RESOURCE_CDI = "/class-templates/CdiApplicationTemplate.java";
private static final String RESOURCE_SPRING = "/class-templates/SpringApplicationTemplate.java";
private static final String RESOURCE_DEFAULT = "/class-templates/ApplicationTemplate.java";
+ private final TemplatedGenerator templatedGenerator;
private List sections = new ArrayList<>();
-
- public ApplicationContainerGenerator(String packageName) {
- super(packageName,
- APPLICATION_CLASS_NAME,
- RESOURCE_CDI,
- RESOURCE_SPRING,
- RESOURCE_DEFAULT);
+ private KogitoBuildContext buildContext;
+
+ public ApplicationContainerGenerator(KogitoBuildContext buildContext, String packageName) {
+ this.templatedGenerator = new TemplatedGenerator(
+ buildContext,
+ packageName,
+ APPLICATION_CLASS_NAME,
+ RESOURCE_CDI,
+ RESOURCE_SPRING,
+ RESOURCE_DEFAULT);
+
+ this.buildContext = buildContext;
}
public ApplicationContainerGenerator withSections(List sections) {
@@ -53,45 +60,37 @@ public ApplicationContainerGenerator withSections(List sections) {
return this;
}
- public CompilationUnit getCompilationUnitOrThrow() {
- return compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(
- APPLICATION_CLASS_NAME,
- templatePath(),
- "Cannot find template for " + super.typeName()));
- }
-
- @Override
- public Optional compilationUnit() {
- Optional optionalCompilationUnit = super.compilationUnit();
- CompilationUnit compilationUnit =
- optionalCompilationUnit
- .orElseThrow(() -> new InvalidTemplateException(
- APPLICATION_CLASS_NAME,
- templatePath(),
- "Cannot find template for " + super.typeName()));
+ protected CompilationUnit getCompilationUnitOrThrow() {
+ CompilationUnit compilationUnit = templatedGenerator.compilationUnitOrThrow("Cannot find template for " + templatedGenerator.typeName());
ClassOrInterfaceDeclaration cls = compilationUnit
.findFirst(ClassOrInterfaceDeclaration.class)
.orElseThrow(() -> new InvalidTemplateException(
APPLICATION_CLASS_NAME,
- templatePath(),
+ templatedGenerator.templatePath(),
"Compilation unit doesn't contain a class or interface declaration!"));
// ApplicationTemplate (no CDI/Spring) has placeholders to replace
- if (annotator == null) {
+ if (buildContext == null || buildContext instanceof JavaKogitoBuildContext) {
replacePlaceholder(getLoadEnginesMethod(cls), sections);
}
cls.getMembers().sort(new BodyDeclarationComparator());
- return optionalCompilationUnit;
+
+ return compilationUnit;
+ }
+
+ public GeneratedFile generate() {
+ return new GeneratedFile(GeneratedFile.Type.APPLICATION,
+ templatedGenerator.generatedFilePath(),
+ getCompilationUnitOrThrow().toString());
}
private MethodCallExpr getLoadEnginesMethod(ClassOrInterfaceDeclaration cls) {
return cls.findFirst(MethodCallExpr.class, mtd -> "loadEngines".equals(mtd.getNameAsString()))
.orElseThrow(() -> new InvalidTemplateException(
APPLICATION_CLASS_NAME,
- templatePath(),
+ templatedGenerator.templatePath(),
"Impossible to find loadEngines invocation"));
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationGenerator.java
index 0a295e4c543..9d214304777 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ApplicationGenerator.java
@@ -29,9 +29,7 @@
import java.util.Objects;
import java.util.stream.Collectors;
-import com.github.javaparser.ast.CompilationUnit;
import org.drools.core.util.StringUtils;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import org.kie.kogito.codegen.metadata.Labeler;
import org.kie.kogito.codegen.metadata.MetaDataWriter;
import org.kie.kogito.codegen.metadata.PrometheusLabeler;
@@ -49,10 +47,8 @@ public class ApplicationGenerator {
private final String packageName;
private final File targetDirectory;
- private DependencyInjectionAnnotator annotator;
-
private final ApplicationContainerGenerator applicationMainGenerator;
- private ConfigGenerator configGenerator;
+ private ApplicationConfigGenerator configGenerator;
private List generators = new ArrayList<>();
private Map labelers = new HashMap<>();
@@ -60,14 +56,14 @@ public class ApplicationGenerator {
private ClassLoader classLoader;
private AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
- public ApplicationGenerator(String packageName, File targetDirectory) {
-
+ public ApplicationGenerator(GeneratorContext context, String packageName, File targetDirectory) {
+ this.context = context;
this.packageName = packageName;
this.targetDirectory = targetDirectory;
this.classLoader = Thread.currentThread().getContextClassLoader();
- this.applicationMainGenerator = new ApplicationContainerGenerator(packageName);
+ this.applicationMainGenerator = new ApplicationContainerGenerator(context.getBuildContext(), packageName);
- this.configGenerator = new ConfigGenerator(packageName);
+ this.configGenerator = new ApplicationConfigGenerator(context.getBuildContext(), packageName);
this.configGenerator.withAddons(loadAddonList());
}
@@ -79,18 +75,6 @@ private String getFilePath(String className) {
return (this.packageName + "." + className).replace('.', '/') + ".java";
}
- public ApplicationGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- this.applicationMainGenerator.withDependencyInjection(annotator);
- this.configGenerator.withDependencyInjection(annotator);
- return this;
- }
-
- public ApplicationGenerator withGeneratorContext(GeneratorContext context) {
- this.context = context;
- return this;
- }
-
public ApplicationGenerator withAddons(AddonsConfig addonsConfig) {
if (addonsConfig.usePrometheusMonitoring()) {
this.labelers.put(PrometheusLabeler.class, new PrometheusLabeler());
@@ -130,10 +114,7 @@ public GeneratedFile generateApplicationDescriptor() {
.collect(Collectors.toList());
applicationMainGenerator.withSections(sections);
- CompilationUnit compilationUnit = applicationMainGenerator.getCompilationUnitOrThrow();
- return new GeneratedFile(GeneratedFile.Type.APPLICATION,
- applicationMainGenerator.generatedFilePath(),
- compilationUnit.toString());
+ return applicationMainGenerator.generate();
}
private List generateApplicationSections() {
@@ -161,7 +142,6 @@ private List generateApplicationSections() {
public G setupGenerator(G generator) {
this.generators.add(generator);
generator.setPackageName(packageName);
- generator.setDependencyInjection(annotator);
generator.setProjectDirectory(targetDirectory.getParentFile().toPath());
generator.setContext(context);
generator.setAddonsConfig(addonsConfig);
@@ -192,12 +172,13 @@ private Collection loadAddonList() {
private void logGeneratedFiles(Collection files) {
if (LOGGER.isDebugEnabled()) {
+ String separator = "=====";
for (GeneratedFile file : files) {
- LOGGER.debug("=====");
- LOGGER.debug(file.getType() + ": " + file.relativePath());
- LOGGER.debug("=====");
+ LOGGER.debug(separator);
+ LOGGER.debug("{}: {}", file.getType(), file.relativePath());
+ LOGGER.debug(separator);
LOGGER.debug(new String(file.contents()));
- LOGGER.debug("=====");
+ LOGGER.debug(separator);
}
}
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/CodegenUtils.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/CodegenUtils.java
index d160ef9d066..74eebd94330 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/CodegenUtils.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/CodegenUtils.java
@@ -24,15 +24,11 @@
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.expr.Expression;
-import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.ast.expr.SimpleName;
import com.github.javaparser.ast.stmt.BlockStmt;
-import com.github.javaparser.ast.stmt.IfStmt;
-import com.github.javaparser.ast.stmt.ReturnStmt;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
public class CodegenUtils {
@@ -120,18 +116,4 @@ public static boolean isApplicationField(FieldDeclaration fd) {
public static boolean isObjectMapperField(FieldDeclaration fd) {
return fd.getElementType().asClassOrInterfaceType().getNameAsString().equals("ObjectMapper");
}
-
- public static MethodDeclaration extractOptionalInjection(String type, String fieldName, String defaultMethod, DependencyInjectionAnnotator annotator) {
- BlockStmt body = new BlockStmt();
- MethodDeclaration extractMethod = new MethodDeclaration()
- .addModifier(Modifier.Keyword.PROTECTED)
- .setName("extract_" + fieldName)
- .setType(type)
- .setBody(body);
- Expression condition = annotator.optionalInstanceExists(fieldName);
- IfStmt valueExists = new IfStmt(condition, new ReturnStmt(annotator.getOptionalInstance(fieldName)), new ReturnStmt(new NameExpr(defaultMethod)));
- body.addStatement(valueExists);
- return extractMethod;
- }
-
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ConfigBeanGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ConfigBeanGenerator.java
index 11e597f356a..04d3fc15255 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ConfigBeanGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ConfigBeanGenerator.java
@@ -14,16 +14,15 @@
*/
package org.kie.kogito.codegen;
-public class ConfigBeanGenerator extends TemplatedGenerator {
+import org.kie.kogito.codegen.context.KogitoBuildContext;
- private static final String RESOURCE_CDI = "/class-templates/config/CdiConfigBeanTemplate.java";
- private static final String RESOURCE_SPRING = "/class-templates/config/SpringConfigBeanTemplate.java";
+public class ConfigBeanGenerator extends AbstractConfigGenerator {
- public ConfigBeanGenerator(String packageName) {
- super(packageName,
- "ConfigBean",
- RESOURCE_CDI,
- RESOURCE_SPRING);
+ public ConfigBeanGenerator(KogitoBuildContext buildContext, String packageName) {
+ super(buildContext,
+ packageName,
+ "ConfigBean",
+ "/class-templates/config/CdiConfigBeanTemplate.java",
+ "/class-templates/config/SpringConfigBeanTemplate.java");
}
-
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ConfigGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ConfigGenerator.java
deleted file mode 100644
index 62709d36538..00000000000
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ConfigGenerator.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.kie.kogito.codegen;
-
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Optional;
-
-import com.github.javaparser.ast.CompilationUnit;
-import com.github.javaparser.ast.expr.ObjectCreationExpr;
-import org.kie.kogito.codegen.decision.config.DecisionConfigGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
-import org.kie.kogito.codegen.prediction.config.PredictionConfigGenerator;
-import org.kie.kogito.codegen.process.config.ProcessConfigGenerator;
-import org.kie.kogito.codegen.rules.config.RuleConfigGenerator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ConfigGenerator {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(ConfigGenerator.class);
- private final ApplicationConfigGenerator applicationConfigGenerator;
-
- private DependencyInjectionAnnotator annotator;
- private ProcessConfigGenerator processConfig;
- private RuleConfigGenerator ruleConfig;
- private DecisionConfigGenerator decisionConfig;
- private PredictionConfigGenerator predictionConfig;
-
- private String packageName;
- private final String targetTypeName;
- private final String targetCanonicalName;
-
- public ConfigGenerator(String packageName) {
- this.packageName = packageName;
- this.targetTypeName = "ApplicationConfig";
- this.targetCanonicalName = this.packageName + "." + targetTypeName;
- this.applicationConfigGenerator = new ApplicationConfigGenerator(packageName);
- }
-
- public ConfigGenerator withProcessConfig(ProcessConfigGenerator cfg) {
- this.processConfig = cfg;
- if (this.processConfig != null) {
- this.processConfig.withDependencyInjection(annotator);
- }
- return this;
- }
-
- public ConfigGenerator withRuleConfig(RuleConfigGenerator cfg) {
- this.ruleConfig = cfg;
- if (this.ruleConfig != null) {
- this.ruleConfig.withDependencyInjection(annotator);
- }
- return this;
- }
-
- public ConfigGenerator withDecisionConfig(DecisionConfigGenerator cfg) {
- this.decisionConfig = cfg;
- if (this.decisionConfig != null) {
- this.decisionConfig.withDependencyInjection(annotator);
- }
- return this;
- }
-
- public ConfigGenerator withPredictionConfig(PredictionConfigGenerator cfg) {
- this.predictionConfig = cfg;
- if (this.predictionConfig != null) {
- this.predictionConfig.withDependencyInjection(annotator);
- }
- return this;
- }
-
- public ConfigGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- this.applicationConfigGenerator.withDependencyInjection(annotator);
- return this;
- }
-
- public ObjectCreationExpr newInstance() {
- return new ObjectCreationExpr()
- .setType(targetCanonicalName);
- }
-
- public Collection generate() {
- ArrayList generatedFiles = new ArrayList<>();
- generatedFiles.add(generateApplicationConfigDescriptor());
-
- generateProcessConfigDescriptor().ifPresent(generatedFiles::add);
- generateRuleConfigDescriptor().ifPresent(generatedFiles::add);
- generatePredictionConfigDescriptor().ifPresent(generatedFiles::add);
- generateDecisionConfigDescriptor().ifPresent(generatedFiles::add);
- generateBeanConfig().ifPresent(generatedFiles::add);
-
- return generatedFiles;
- }
-
- private GeneratedFile generateApplicationConfigDescriptor() {
- CompilationUnit compilationUnit = applicationConfigGenerator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(
- applicationConfigGenerator.typeName(),
- applicationConfigGenerator.templatePath(),
- "Missing template"));
- return new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
- applicationConfigGenerator.generatedFilePath(),
- compilationUnit.toString());
- }
-
- private Optional generateProcessConfigDescriptor() {
- if (processConfig == null) {
- return Optional.empty();
- }
- Optional compilationUnit = processConfig.compilationUnit();
- return compilationUnit.map(c -> new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
- processConfig.generatedFilePath(),
- c.toString()));
- }
-
- private Optional generateRuleConfigDescriptor() {
- if (ruleConfig == null) {
- return Optional.empty();
- }
- Optional compilationUnit = ruleConfig.compilationUnit();
- return compilationUnit.map(c -> new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
- ruleConfig.generatedFilePath(),
- c.toString()));
- }
-
- private Optional generateDecisionConfigDescriptor() {
- if (decisionConfig == null) {
- return Optional.empty();
- }
- Optional compilationUnit = decisionConfig.compilationUnit();
- return compilationUnit.map(c -> new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
- decisionConfig.generatedFilePath(),
- c.toString()));
- }
-
- private Optional generatePredictionConfigDescriptor() {
- if (predictionConfig == null) {
- return Optional.empty();
- }
- Optional compilationUnit = predictionConfig.compilationUnit();
- return compilationUnit.map(c -> new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
- predictionConfig.generatedFilePath(),
- c.toString()));
- }
-
- private Optional generateBeanConfig() {
- ConfigBeanGenerator configBeanGenerator = new ConfigBeanGenerator(packageName);
- configBeanGenerator.withDependencyInjection(annotator);
-
- Optional compilationUnit = configBeanGenerator.compilationUnit();
- return compilationUnit.map(c -> new GeneratedFile(GeneratedFile.Type.APPLICATION_CONFIG,
- configBeanGenerator.generatedFilePath(),
- c.toString()));
- }
-
- public void withAddons(Collection addons) {
- this.applicationConfigGenerator.withAddons(addons);
- }
-}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/Generator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/Generator.java
index 5e506cb15bf..fae80c3e714 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/Generator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/Generator.java
@@ -20,8 +20,6 @@
import java.util.Collections;
import java.util.Map;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
-
/**
* A code generator for a part of the platform, e.g. rules, processes, etc.
*/
@@ -41,17 +39,15 @@ public interface Generator {
Collection generate();
/**
- * Consumes the given ConfigGenerator so that it can enrich it with
+ * Consumes the given ApplicationConfigGenerator so that it can enrich it with
* further, Generator-specific details.
*
* This is automatically called by the ApplicationGenerator.
*/
- void updateConfig(ConfigGenerator cfg);
+ void updateConfig(ApplicationConfigGenerator cfg);
void setPackageName(String packageName);
- void setDependencyInjection(DependencyInjectionAnnotator annotator);
-
void setProjectDirectory(Path projectDirectory);
void setContext(GeneratorContext context);
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/GeneratorContext.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/GeneratorContext.java
index 0ac6c7c00d1..3ef0edbc68d 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/GeneratorContext.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/GeneratorContext.java
@@ -19,9 +19,11 @@
import java.io.FileReader;
import java.io.IOException;
import java.util.Collection;
+import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,6 +34,10 @@ public class GeneratorContext {
private static final String APPLICATION_PROPERTIES_FILE_NAME = "application.properties";
+ public static GeneratorContext emptyContext() {
+ return ofResourcePath().withBuildContext(new JavaKogitoBuildContext());
+ }
+
public static GeneratorContext ofResourcePath(File... resourcePaths) {
Properties applicationProperties = new Properties();
@@ -50,7 +56,7 @@ public static GeneratorContext ofProperties(Properties props) {
return new GeneratorContext(props);
}
- private KogitoBuildContext buildContext;
+ private KogitoBuildContext buildContext = new JavaKogitoBuildContext();
private Properties applicationProperties = new Properties();
@@ -59,6 +65,7 @@ private GeneratorContext(Properties properties) {
}
public GeneratorContext withBuildContext(KogitoBuildContext buildContext) {
+ Objects.requireNonNull(buildContext, "KogitoBuildContext cannot be null");
this.buildContext = buildContext;
return this;
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ResourceGeneratorFactory.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ResourceGeneratorFactory.java
index 83ffd1c50af..aff935976e2 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/ResourceGeneratorFactory.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/ResourceGeneratorFactory.java
@@ -22,6 +22,7 @@
import java.util.Optional;
import org.kie.api.definition.process.WorkflowProcess;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.context.SpringBootKogitoBuildContext;
@@ -36,7 +37,8 @@ enum GeneratorType {
SPRING(SpringBootKogitoBuildContext.class, false),
QUARKUS(QuarkusKogitoBuildContext.class, false),
SPRING_REACTIVE(SpringBootKogitoBuildContext.class, true),
- QUARKUS_REACTIVE(QuarkusKogitoBuildContext.class, true);
+ QUARKUS_REACTIVE(QuarkusKogitoBuildContext.class, true),
+ JAVA(JavaKogitoBuildContext.class, false);
Class extends KogitoBuildContext> buildContextClass;
boolean reactive;
@@ -76,6 +78,7 @@ public Optional create(GeneratorContext context,
modelfqcn,
processfqcn,
appCanonicalName);
+ case JAVA:
case QUARKUS:
return new ResourceGenerator(context,
process,
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/TemplatedGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/TemplatedGenerator.java
index 7177fdfd0ed..7c261f3e12f 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/TemplatedGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/TemplatedGenerator.java
@@ -22,13 +22,17 @@
import com.github.javaparser.ParseProblemException;
import com.github.javaparser.ast.CompilationUnit;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.SpringDependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
+import org.kie.kogito.codegen.context.SpringBootKogitoBuildContext;
import static com.github.javaparser.StaticJavaParser.parse;
-public class TemplatedGenerator {
+/**
+ * Utility class to handle multi platform template generation
+ */
+public final class TemplatedGenerator {
private final String packageName;
private final String sourceFilePath;
@@ -37,10 +41,11 @@ public class TemplatedGenerator {
private final String resourceSpring;
private final String resourceDefault;
- protected DependencyInjectionAnnotator annotator;
private final String targetTypeName;
+ private final KogitoBuildContext buildContext;
public TemplatedGenerator(
+ KogitoBuildContext buildContext,
String packageName,
String targetTypeName,
String resourceCdi,
@@ -55,6 +60,7 @@ public TemplatedGenerator(
"Package name \"{0}\" is not valid. It should be a valid Java package name.", packageName));
}
+ this.buildContext = buildContext;
this.packageName = packageName;
this.targetTypeName = targetTypeName;
String targetCanonicalName = this.packageName + "." + this.targetTypeName;
@@ -65,11 +71,13 @@ public TemplatedGenerator(
}
public TemplatedGenerator(
+ KogitoBuildContext buildContext,
String packageName,
String targetTypeName,
String resourceCdi,
String resourceSpring) {
- this(packageName,
+ this(buildContext,
+ packageName,
targetTypeName,
resourceCdi,
resourceSpring,
@@ -88,15 +96,6 @@ public String typeName() {
return targetTypeName;
}
- protected String packageName() {
- return this.packageName;
- }
-
- public TemplatedGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- return this;
- }
-
public Optional compilationUnit() {
String selectedResource = selectResource();
if (selectedResource == null) {
@@ -114,19 +113,26 @@ public Optional compilationUnit() {
}
}
+ public CompilationUnit compilationUnitOrThrow(String errorMessage) {
+ return compilationUnit().orElseThrow(() -> new InvalidTemplateException(
+ typeName(),
+ templatePath(),
+ errorMessage));
+ }
+
+ public CompilationUnit compilationUnitOrThrow() {
+ return compilationUnitOrThrow("Missing template");
+ }
+
private String selectResource() {
- if (annotator == null) {
- if (resourceDefault == null) {
- return null;
- } else {
- return resourceDefault;
- }
- } else if (annotator instanceof CDIDependencyInjectionAnnotator) {
+ if (buildContext == null || buildContext instanceof JavaKogitoBuildContext) {
+ return resourceDefault;
+ } else if (buildContext instanceof QuarkusKogitoBuildContext) {
return resourceCdi;
- } else if (annotator instanceof SpringDependencyInjectionAnnotator) {
+ } else if (buildContext instanceof SpringBootKogitoBuildContext) {
return resourceSpring;
} else {
- throw new IllegalArgumentException("Unknown annotator " + annotator);
+ throw new IllegalArgumentException("Unknown buildContext " + buildContext);
}
}
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/AbstractKogitoBuildContext.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/AbstractKogitoBuildContext.java
new file mode 100644
index 00000000000..ae5142e6732
--- /dev/null
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/AbstractKogitoBuildContext.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2020 Red Hat, Inc. and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.kie.kogito.codegen.context;
+
+import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+
+import java.util.function.Predicate;
+
+public abstract class AbstractKogitoBuildContext implements KogitoBuildContext {
+
+ protected final Predicate classAvailabilityResolver;
+ protected DependencyInjectionAnnotator dependencyInjectionAnnotator;
+
+ public AbstractKogitoBuildContext(Predicate classAvailabilityResolver, DependencyInjectionAnnotator dependencyInjectionAnnotator) {
+ this.classAvailabilityResolver = classAvailabilityResolver;
+ this.dependencyInjectionAnnotator = dependencyInjectionAnnotator;
+ }
+
+ @Override
+ public boolean hasClassAvailable(String fqcn) {
+ return classAvailabilityResolver.test(fqcn);
+ }
+
+ @Override
+ public DependencyInjectionAnnotator getDependencyInjectionAnnotator() {
+ return dependencyInjectionAnnotator;
+ }
+
+ @Override
+ public void setDependencyInjectionAnnotator(DependencyInjectionAnnotator dependencyInjectionAnnotator) {
+ this.dependencyInjectionAnnotator = dependencyInjectionAnnotator;
+ }
+}
\ No newline at end of file
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/JavaKogitoBuildContext.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/JavaKogitoBuildContext.java
new file mode 100644
index 00000000000..5644051957d
--- /dev/null
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/JavaKogitoBuildContext.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2020 Red Hat, Inc. and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.kie.kogito.codegen.context;
+
+import java.util.function.Predicate;
+
+public class JavaKogitoBuildContext extends AbstractKogitoBuildContext {
+
+ public JavaKogitoBuildContext() {
+ this(Thread.currentThread().getContextClassLoader());
+ }
+
+ public JavaKogitoBuildContext(final ClassLoader classLoader) {
+ this(className -> {
+ try {
+ classLoader.loadClass(className);
+ return true;
+ } catch (ClassNotFoundException e) {
+ return false;
+ }
+ });
+ }
+
+ public JavaKogitoBuildContext(Predicate classAvailabilityResolver) {
+ super(classAvailabilityResolver, null);
+ }
+}
\ No newline at end of file
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/KogitoBuildContext.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/KogitoBuildContext.java
index d93b9aec8ba..e547322e86c 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/KogitoBuildContext.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/KogitoBuildContext.java
@@ -16,10 +16,28 @@
package org.kie.kogito.codegen.context;
import org.kie.kogito.codegen.KogitoCodeGenConstants;
+import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
public interface KogitoBuildContext {
boolean hasClassAvailable(String fqcn);
+
+ /**
+ * Return DependencyInjectionAnnotator if available or null
+ * @return
+ */
+ DependencyInjectionAnnotator getDependencyInjectionAnnotator();
+
+ /**
+ * Method to override default dependency injection annotator
+ * @param dependencyInjectionAnnotator
+ * @return
+ */
+ void setDependencyInjectionAnnotator(DependencyInjectionAnnotator dependencyInjectionAnnotator);
+
+ default boolean hasDI() {
+ return getDependencyInjectionAnnotator() != null;
+ }
default boolean isValidationSupported() {
return hasClassAvailable(KogitoCodeGenConstants.VALIDATION_CLASS);
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/QuarkusKogitoBuildContext.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/QuarkusKogitoBuildContext.java
index bcb6b1ebd3f..885478f52f2 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/QuarkusKogitoBuildContext.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/QuarkusKogitoBuildContext.java
@@ -15,18 +15,13 @@
package org.kie.kogito.codegen.context;
-import java.util.function.Predicate;
+import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-public class QuarkusKogitoBuildContext implements KogitoBuildContext {
+import java.util.function.Predicate;
- private Predicate classAvailabilityResolver;
+public class QuarkusKogitoBuildContext extends AbstractKogitoBuildContext {
public QuarkusKogitoBuildContext(Predicate classAvailabilityResolver) {
- this.classAvailabilityResolver = classAvailabilityResolver;
- }
-
- @Override
- public boolean hasClassAvailable(String fqcn) {
- return classAvailabilityResolver.test(fqcn);
+ super(classAvailabilityResolver, new CDIDependencyInjectionAnnotator());
}
}
\ No newline at end of file
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/SpringBootKogitoBuildContext.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/SpringBootKogitoBuildContext.java
index c8eff87f4b6..f96495c6f9f 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/SpringBootKogitoBuildContext.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/context/SpringBootKogitoBuildContext.java
@@ -15,19 +15,13 @@
package org.kie.kogito.codegen.context;
+import org.kie.kogito.codegen.di.SpringDependencyInjectionAnnotator;
+
import java.util.function.Predicate;
-public class SpringBootKogitoBuildContext implements KogitoBuildContext {
+public class SpringBootKogitoBuildContext extends AbstractKogitoBuildContext {
- private Predicate classAvailabilityResolver;
-
public SpringBootKogitoBuildContext(Predicate classAvailabilityResolver) {
- this.classAvailabilityResolver = classAvailabilityResolver;
+ super(classAvailabilityResolver, new SpringDependencyInjectionAnnotator());
}
-
- @Override
- public boolean hasClassAvailable(String fqcn) {
- return classAvailabilityResolver.test(fqcn);
- }
-
}
\ No newline at end of file
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
index 8151954ba2f..f05dfb91b0c 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
@@ -47,7 +47,7 @@
import org.kie.dmn.typesafe.DMNTypeSafeTypeGenerator;
import org.kie.kogito.codegen.AbstractGenerator;
import org.kie.kogito.codegen.ApplicationSection;
-import org.kie.kogito.codegen.ConfigGenerator;
+import org.kie.kogito.codegen.ApplicationConfigGenerator;
import org.kie.kogito.codegen.DashboardGeneratedFileUtils;
import org.kie.kogito.codegen.GeneratedFile;
import org.kie.kogito.codegen.decision.config.DecisionConfigGenerator;
@@ -144,10 +144,10 @@ private void generateAndStoreRestResources() {
if (stronglyTypedEnabled) {
generateStronglyTypedInput(model);
}
- DecisionRestResourceGenerator resourceGenerator = new DecisionRestResourceGenerator(model, applicationCanonicalName()).withDependencyInjection(annotator)
- .withAddons(addonsConfig)
- .withStronglyTyped(stronglyTypedEnabled)
- .withOASResult(oasResult, isMPAnnotationsPresent(), isIOSwaggerOASv3AnnotationsPresent());
+ DecisionRestResourceGenerator resourceGenerator = new DecisionRestResourceGenerator(context.getBuildContext(), model, applicationCanonicalName())
+ .withAddons(addonsConfig)
+ .withStronglyTyped(stronglyTypedEnabled)
+ .withOASResult(oasResult, isMPAnnotationsPresent(), isIOSwaggerOASv3AnnotationsPresent());
rgs.add(resourceGenerator);
}
@@ -178,10 +178,10 @@ private void generateAndStoreRestResources() {
}
private void generateAndStoreDecisionModelResourcesProvider() {
- final DecisionModelResourcesProviderGenerator generator = new DecisionModelResourcesProviderGenerator(packageName,
+ final DecisionModelResourcesProviderGenerator generator = new DecisionModelResourcesProviderGenerator(context.getBuildContext(),
+ packageName,
applicationCanonicalName(),
resources)
- .withDependencyInjection(annotator)
.withAddons(addonsConfig);
storeFile(GeneratedFile.Type.CLASS, generator.generatedFilePath(), generator.generate());
}
@@ -250,9 +250,9 @@ private void generateAndStoreGrafanaDashboards(DecisionRestResourceGenerator res
}
@Override
- public void updateConfig(ConfigGenerator cfg) {
+ public void updateConfig(ApplicationConfigGenerator cfg) {
if (!cResources.isEmpty()) {
- cfg.withDecisionConfig(new DecisionConfigGenerator(packageName));
+ cfg.withDecisionConfig(new DecisionConfigGenerator(context().getBuildContext(), packageName));
}
}
@@ -266,8 +266,11 @@ public List getGeneratedFiles() {
@Override
public ApplicationSection section() {
- DecisionContainerGenerator decisionContainerGenerator = new DecisionContainerGenerator(packageName, applicationCanonicalName(), this.cResources);
- decisionContainerGenerator.withDependencyInjection(annotator);
+ DecisionContainerGenerator decisionContainerGenerator = new DecisionContainerGenerator(
+ context.getBuildContext(),
+ packageName,
+ applicationCanonicalName(),
+ this.cResources);
decisionContainerGenerator.withAddons(addonsConfig);
return decisionContainerGenerator;
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java
index 8ed120fbc9e..ef3df5ac7a8 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionContainerGenerator.java
@@ -28,7 +28,7 @@
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.io.CollectedResource;
import org.kie.kogito.dmn.DmnExecutionIdSupplier;
@@ -47,11 +47,12 @@ public class DecisionContainerGenerator extends AbstractApplicationSection {
private AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
private final TemplatedGenerator templatedGenerator;
- public DecisionContainerGenerator(String packageName, String applicationCanonicalName, List cResources) {
- super(SECTION_CLASS_NAME);
+ public DecisionContainerGenerator(KogitoBuildContext buildContext, String packageName, String applicationCanonicalName, List cResources) {
+ super(buildContext, SECTION_CLASS_NAME);
this.applicationCanonicalName = applicationCanonicalName;
this.resources = cResources;
this.templatedGenerator = new TemplatedGenerator(
+ buildContext,
packageName,
SECTION_CLASS_NAME,
RESOURCE_CDI,
@@ -64,18 +65,11 @@ public DecisionContainerGenerator withAddons(AddonsConfig addonsConfig) {
return this;
}
- public DecisionContainerGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.templatedGenerator.withDependencyInjection(annotator);
- return this;
- }
-
@Override
public CompilationUnit compilationUnit() {
- CompilationUnit compilationUnit = templatedGenerator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(
- SECTION_CLASS_NAME,
- templatedGenerator.templatePath(),
- "Invalid Template: No CompilationUnit"));
+ CompilationUnit compilationUnit = templatedGenerator.compilationUnitOrThrow("Invalid Template: No CompilationUnit");
+
+
ClassOrInterfaceType applicationClass = StaticJavaParser.parseClassOrInterfaceType(applicationCanonicalName);
final InitializerDeclaration staticDeclaration = compilationUnit
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGenerator.java
index aa995ac9394..8ccdee497fe 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGenerator.java
@@ -17,7 +17,6 @@
import java.util.List;
import java.util.NoSuchElementException;
-import java.util.Objects;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
@@ -33,7 +32,7 @@
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import org.kie.api.management.GAV;
import org.kie.kogito.codegen.AddonsConfig;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.decision.DecisionModelType;
import org.kie.kogito.dmn.DefaultDecisionModelResource;
@@ -45,26 +44,23 @@ public class DecisionModelResourcesProviderGenerator {
private static final String TEMPLATE_JAVA = "/class-templates/DecisionModelResourcesProviderTemplate.java";
+ private final KogitoBuildContext buildContext;
private final String packageName;
private final String applicationCanonicalName;
private final List resources;
- private DependencyInjectionAnnotator annotator;
private AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
- public DecisionModelResourcesProviderGenerator(final String packageName,
+ public DecisionModelResourcesProviderGenerator(final KogitoBuildContext buildContext,
+ final String packageName,
final String applicationCanonicalName,
final List resources) {
+ this.buildContext = buildContext;
this.packageName = packageName;
this.applicationCanonicalName = applicationCanonicalName;
this.resources = resources;
}
- public DecisionModelResourcesProviderGenerator withDependencyInjection(final DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- return this;
- }
-
public DecisionModelResourcesProviderGenerator withAddons(final AddonsConfig addonsConfig) {
this.addonsConfig = addonsConfig;
return this;
@@ -79,8 +75,8 @@ public String generate() {
.findFirst(ClassOrInterfaceDeclaration.class)
.orElseThrow(() -> new NoSuchElementException("Compilation unit doesn't contain a class or interface declaration!"));
- if (Objects.nonNull(this.annotator)) {
- annotator.withSingletonComponent(clazz);
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withSingletonComponent(clazz);
}
if (addonsConfig.useTracing()) {
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java
index e8c97b31d1c..9435392eb05 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java
@@ -15,7 +15,10 @@
package org.kie.kogito.codegen.decision;
+import java.io.UncheckedIOException;
+import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.function.Supplier;
@@ -33,7 +36,6 @@
import com.github.javaparser.ast.expr.NormalAnnotationExpr;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.ast.expr.SimpleName;
-import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr;
import com.github.javaparser.ast.expr.StringLiteralExpr;
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.ast.stmt.ExpressionStmt;
@@ -50,16 +52,21 @@
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.BodyDeclarationComparator;
import org.kie.kogito.codegen.CodegenUtils;
-import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static com.github.javaparser.StaticJavaParser.parseStatement;
public class DecisionRestResourceGenerator {
- public static final String CDI_TEMPLATE = "/class-templates/DecisionRestResourceTemplate.java";
- public static final String SPRING_TEMPLATE = "/class-templates/spring/SpringDecisionRestResourceTemplate.java";
+ private static final Logger LOGGER = LoggerFactory.getLogger(DecisionRestResourceGenerator.class);
+
+ private static final String CDI_TEMPLATE = "/class-templates/DecisionRestResourceTemplate.java";
+ private static final String SPRING_TEMPLATE = "/class-templates/spring/SpringDecisionRestResourceTemplate.java";
+
+ private final KogitoBuildContext buildContext;
private final DMNModel dmnModel;
private final String decisionName;
private final String nameURL;
@@ -68,7 +75,6 @@ public class DecisionRestResourceGenerator {
private final String relativePath;
private final String resourceClazzName;
private final String appCanonicalName;
- private DependencyInjectionAnnotator annotator;
private AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
private boolean isStronglyTyped = false;
private DMNOASResult withOASResult;
@@ -78,23 +84,32 @@ public class DecisionRestResourceGenerator {
private static final Supplier TEMPLATE_WAS_MODIFIED = () -> new RuntimeException("Template was modified!");
- public DecisionRestResourceGenerator(DMNModel model, String appCanonicalName) {
+ public DecisionRestResourceGenerator(KogitoBuildContext buildContext, DMNModel model, String appCanonicalName) {
+ this.buildContext = buildContext;
this.dmnModel = model;
this.packageName = CodegenStringUtil.escapeIdentifier(model.getNamespace());
this.decisionId = model.getDefinitions().getId();
this.decisionName = CodegenStringUtil.escapeIdentifier(model.getName());
- this.nameURL = URLEncoder.encode(model.getName()).replace("+", " ");
+ this.nameURL = encodeNameUrl(model.getName());
this.appCanonicalName = appCanonicalName;
String classPrefix = StringUtils.ucFirst(decisionName);
this.resourceClazzName = classPrefix + "Resource";
this.relativePath = packageName.replace(".", "/") + "/" + resourceClazzName + ".java";
- generator = new TemplatedGenerator(packageName, "DecisionRestResource",CDI_TEMPLATE, SPRING_TEMPLATE, CDI_TEMPLATE);
+ generator = new TemplatedGenerator(buildContext, packageName, "DecisionRestResource",CDI_TEMPLATE, SPRING_TEMPLATE, CDI_TEMPLATE);
+ }
+
+ private String encodeNameUrl(String name) {
+ try {
+ return URLEncoder.encode(name, StandardCharsets.UTF_8.name())
+ .replace("+", " ");
+ } catch (UnsupportedEncodingException e) {
+ LOGGER.warn("Error while encoding name URL " + e.toString(), e);
+ throw new UncheckedIOException(e);
+ }
}
public String generate() {
- CompilationUnit clazz = generator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(resourceClazzName, generator.templatePath(), "Cannot " +
- "generate Decision REST Resource"));
+ CompilationUnit clazz = generator.compilationUnitOrThrow("Cannot generate Decision REST Resource");
ClassOrInterfaceDeclaration template = clazz
.findFirst(ClassOrInterfaceDeclaration.class)
@@ -111,9 +126,9 @@ public String generate() {
modifyDmnMethodForStronglyTyped(template);
chooseMethodForStronglyTyped(template);
- if (useInjection()) {
+ if (buildContext.hasDI()) {
template.findAll(FieldDeclaration.class,
- CodegenUtils::isApplicationField).forEach(fd -> annotator.withInjection(fd));
+ CodegenUtils::isApplicationField).forEach(fd -> buildContext.getDependencyInjectionAnnotator().withInjection(fd));
} else {
template.findAll(FieldDeclaration.class,
CodegenUtils::isApplicationField).forEach(this::initializeApplicationField);
@@ -121,7 +136,10 @@ public String generate() {
MethodDeclaration dmnMethod = template.findAll(MethodDeclaration.class, x -> x.getName().toString().equals("dmn")).get(0);
processOASAnn(dmnMethod, null);
- template.addMember(cloneForDMNResult(dmnMethod, "dmn_dmnresult", "dmnresult", "$dmnMethodUrl$"));
+
+ 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;
@@ -139,7 +157,7 @@ public String generate() {
//insert request path
final String path = ds.getName();
- interpolateRequestPath(path, "$dmnMethodUrl$", clonedMethod);
+ interpolateRequestPath(path, dmnMethodUrlPlaceholder, clonedMethod);
ReturnStmt returnStmt = clonedMethod.findFirst(ReturnStmt.class).orElseThrow(TEMPLATE_WAS_MODIFIED);
if (ds.getOutputDecision().size() == 1) {
@@ -158,7 +176,7 @@ public String generate() {
}
//set the root path for the dmnMethod itself
- interpolateRequestPath("", "$dmnMethodUrl$", dmnMethod);
+ interpolateRequestPath("", dmnMethodUrlPlaceholder, dmnMethod);
interpolateOutputType(template);
@@ -337,12 +355,6 @@ public DMNModel getDmnModel() {
return this.dmnModel;
}
- public DecisionRestResourceGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- this.generator.withDependencyInjection(annotator);
- return this;
- }
-
public DecisionRestResourceGenerator withAddons(AddonsConfig addonsConfig) {
this.addonsConfig = addonsConfig;
return this;
@@ -404,10 +416,6 @@ public String generatedFilePath() {
return relativePath;
}
- protected boolean useInjection() {
- return this.annotator != null;
- }
-
public DecisionRestResourceGenerator withStronglyTyped(boolean stronglyTyped) {
this.isStronglyTyped = stronglyTyped;
return this;
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/config/DecisionConfigGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/config/DecisionConfigGenerator.java
index e318b9d36a1..d44b41daa28 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/config/DecisionConfigGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/decision/config/DecisionConfigGenerator.java
@@ -15,17 +15,16 @@
package org.kie.kogito.codegen.decision.config;
-import org.kie.kogito.codegen.TemplatedGenerator;
+import org.kie.kogito.codegen.AbstractConfigGenerator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
-public class DecisionConfigGenerator extends TemplatedGenerator {
+public class DecisionConfigGenerator extends AbstractConfigGenerator {
- private static final String RESOURCE_CDI = "/class-templates/config/CdiDecisionConfigTemplate.java";
- private static final String RESOURCE_SPRING = "/class-templates/config/SpringDecisionConfigTemplate.java";
-
- public DecisionConfigGenerator(String packageName) {
- super(packageName,
- "DecisionConfig",
- RESOURCE_CDI,
- RESOURCE_SPRING);
+ public DecisionConfigGenerator(KogitoBuildContext buildContext, String packageName) {
+ super(buildContext,
+ packageName,
+ "DecisionConfig",
+ "/class-templates/config/CdiDecisionConfigTemplate.java",
+ "/class-templates/config/SpringDecisionConfigTemplate.java");
}
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/di/SpringDependencyInjectionAnnotator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/di/SpringDependencyInjectionAnnotator.java
index 58f1b1c5aaf..7f984ab4adc 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/di/SpringDependencyInjectionAnnotator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/di/SpringDependencyInjectionAnnotator.java
@@ -40,7 +40,6 @@
import static com.github.javaparser.StaticJavaParser.parse;
-
public class SpringDependencyInjectionAnnotator implements DependencyInjectionAnnotator {
@Override
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGenerator.java
index e7580a36fbe..1565ad7dba2 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGenerator.java
@@ -27,12 +27,10 @@
import org.kie.dmn.feel.codegen.feel11.CodegenStringUtil;
import org.kie.kogito.codegen.BodyDeclarationComparator;
import org.kie.kogito.codegen.CodegenUtils;
-import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.pmml.commons.model.KiePMMLModel;
-import static com.github.javaparser.StaticJavaParser.parse;
import static org.kie.pmml.commons.utils.KiePMMLModelUtils.getSanitizedClassName;
public class PMMLRestResourceGenerator {
@@ -43,13 +41,14 @@ public class PMMLRestResourceGenerator {
private final String nameURL;
final String packageName;
final String appCanonicalName;
- DependencyInjectionAnnotator annotator;
private final String resourceClazzName;
private final String relativePath;
+ private final KogitoBuildContext buildContext;
private final KiePMMLModel kiePMMLModel;
private final TemplatedGenerator generator;
- public PMMLRestResourceGenerator(KiePMMLModel model, String appCanonicalName) {
+ public PMMLRestResourceGenerator(KogitoBuildContext buildContext, KiePMMLModel model, String appCanonicalName) {
+ this.buildContext = buildContext;
this.kiePMMLModel = model;
this.packageName = "org.kie.kogito." + CodegenStringUtil.escapeIdentifier(model.getClass().getPackage().getName());
String classPrefix = getSanitizedClassName(model.getName());
@@ -57,13 +56,11 @@ public PMMLRestResourceGenerator(KiePMMLModel model, String appCanonicalName) {
this.appCanonicalName = appCanonicalName;
this.resourceClazzName = classPrefix + "Resource";
this.relativePath = packageName.replace(".", "/") + "/" + resourceClazzName + ".java";
- this.generator = new TemplatedGenerator(packageName, "DecisionRestResource",CDI_TEMPLATE, SPRING_TEMPLATE, CDI_TEMPLATE);
+ this.generator = new TemplatedGenerator(buildContext, packageName, "DecisionRestResource",CDI_TEMPLATE, SPRING_TEMPLATE, CDI_TEMPLATE);
}
public String generate() {
- CompilationUnit clazz = generator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(resourceClazzName, generator.templatePath(), "Cannot " +
- "generate Prediction REST Resource"));
+ CompilationUnit clazz = generator.compilationUnitOrThrow("Cannot generate Prediction REST Resource");
ClassOrInterfaceDeclaration template = clazz
.findFirst(ClassOrInterfaceDeclaration.class)
@@ -75,9 +72,9 @@ public String generate() {
setPathValue(template);
setPredictionModelName(template);
- if (useInjection()) {
+ if (buildContext.hasDI()) {
template.findAll(FieldDeclaration.class,
- CodegenUtils::isApplicationField).forEach(fd -> annotator.withInjection(fd));
+ CodegenUtils::isApplicationField).forEach(fd -> buildContext.getDependencyInjectionAnnotator().withInjection(fd));
} else {
template.findAll(FieldDeclaration.class,
CodegenUtils::isApplicationField).forEach(this::initializeApplicationField);
@@ -95,12 +92,6 @@ public KiePMMLModel getKiePMMLModel() {
return this.kiePMMLModel;
}
- public PMMLRestResourceGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- this.generator.withDependencyInjection(annotator);
- return this;
- }
-
public String className() {
return resourceClazzName;
}
@@ -109,10 +100,6 @@ public String generatedFilePath() {
return relativePath;
}
- protected boolean useInjection() {
- return this.annotator != null;
- }
-
void setPathValue(ClassOrInterfaceDeclaration template) {
template.findFirst(SingleMemberAnnotationExpr.class).orElseThrow(() -> new RuntimeException("")).setMemberValue(new StringLiteralExpr(nameURL));
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegen.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegen.java
index 28ddc7e6868..5b5c9e14d05 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegen.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegen.java
@@ -38,7 +38,7 @@
import org.kie.internal.builder.CompositeKnowledgeBuilder;
import org.kie.kogito.codegen.AbstractGenerator;
import org.kie.kogito.codegen.ApplicationSection;
-import org.kie.kogito.codegen.ConfigGenerator;
+import org.kie.kogito.codegen.ApplicationConfigGenerator;
import org.kie.kogito.codegen.GeneratedFile;
import org.kie.kogito.codegen.KogitoPackageSources;
import org.kie.kogito.codegen.io.CollectedResource;
@@ -96,16 +96,15 @@ private static List parsePredictions(Path path, List res
}
@Override
- public void updateConfig(ConfigGenerator cfg) {
+ public void updateConfig(ApplicationConfigGenerator cfg) {
if (!resources.isEmpty()) {
- cfg.withPredictionConfig(new PredictionConfigGenerator(packageName));
+ cfg.withPredictionConfig(new PredictionConfigGenerator(context().getBuildContext(), packageName));
}
}
@Override
public ApplicationSection section() {
- PredictionModelsGenerator moduleGenerator = new PredictionModelsGenerator(packageName, applicationCanonicalName(), resources);
- moduleGenerator.withDependencyInjection(annotator);
+ PredictionModelsGenerator moduleGenerator = new PredictionModelsGenerator(context.getBuildContext(), packageName, applicationCanonicalName(), resources);
moduleGenerator.withAddons(addonsConfig);
return moduleGenerator;
}
@@ -155,9 +154,7 @@ private void addModels(final List kiepmmlModels, final PMMLResourc
batch.add( new DescrResource( packageDescr ), ResourceType.DESCR );
}
if (!(model instanceof KiePMMLFactoryModel)) {
- PMMLRestResourceGenerator resourceGenerator = new PMMLRestResourceGenerator(model,
- applicationCanonicalName())
- .withDependencyInjection(annotator);
+ PMMLRestResourceGenerator resourceGenerator = new PMMLRestResourceGenerator(context.getBuildContext(), model, applicationCanonicalName());
storeFile(GeneratedFile.Type.PMML, resourceGenerator.generatedFilePath(), resourceGenerator.generate());
}
if (model instanceof HasNestedModels) {
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionModelsGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionModelsGenerator.java
index 778a345a0a1..f3bf4fa7440 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionModelsGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/PredictionModelsGenerator.java
@@ -23,7 +23,7 @@
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import java.util.List;
@@ -39,12 +39,13 @@ public class PredictionModelsGenerator extends AbstractApplicationSection {
protected AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
protected final TemplatedGenerator templatedGenerator;
- public PredictionModelsGenerator(String packageName, String applicationCanonicalName, List resources) {
- super(SECTION_CLASS_NAME);
+ public PredictionModelsGenerator(KogitoBuildContext buildContext, String packageName, String applicationCanonicalName, List resources) {
+ super(buildContext, SECTION_CLASS_NAME);
this.applicationCanonicalName = applicationCanonicalName;
this.resources = resources;
this.templatedGenerator = new TemplatedGenerator(
+ buildContext,
packageName,
SECTION_CLASS_NAME,
RESOURCE_CDI,
@@ -57,18 +58,9 @@ public PredictionModelsGenerator withAddons(AddonsConfig addonsConfig) {
return this;
}
- public PredictionModelsGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.templatedGenerator.withDependencyInjection(annotator);
- return this;
- }
-
@Override
public CompilationUnit compilationUnit() {
- CompilationUnit compilationUnit = templatedGenerator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(
- SECTION_CLASS_NAME,
- templatedGenerator.templatePath(),
- "Invalid Template: No CompilationUnit"));
+ CompilationUnit compilationUnit = templatedGenerator.compilationUnitOrThrow("Invalid Template: No CompilationUnit");
populateStaticKieRuntimeFactoryFunctionInit(compilationUnit);
return compilationUnit;
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGenerator.java
index c343fe38a76..a798a729aff 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGenerator.java
@@ -15,34 +15,26 @@
package org.kie.kogito.codegen.prediction.config;
+import com.github.javaparser.ast.body.BodyDeclaration;
+import org.kie.kogito.codegen.AbstractConfigGenerator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+
import java.util.ArrayList;
import java.util.List;
-import com.github.javaparser.ast.body.BodyDeclaration;
-import com.github.javaparser.ast.expr.ObjectCreationExpr;
-import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.pmml.config.StaticPredictionConfig;
-
-public class PredictionConfigGenerator extends TemplatedGenerator {
+public class PredictionConfigGenerator extends AbstractConfigGenerator {
private List> members = new ArrayList<>();
- private static final String RESOURCE_CDI = "/class-templates/config/CdiPredictionConfigTemplate.java";
- private static final String RESOURCE_SPRING = "/class-templates/config/SpringPredictionConfigTemplate.java";
-
- public PredictionConfigGenerator(String packageName) {
- super(packageName,
- "PredictionConfig",
- RESOURCE_CDI,
- RESOURCE_SPRING);
- }
-
- public ObjectCreationExpr newInstance() {
- return new ObjectCreationExpr().setType(StaticPredictionConfig.class.getCanonicalName());
+ public PredictionConfigGenerator(KogitoBuildContext buildContext, String packageName) {
+ super(buildContext,
+ packageName,
+ "PredictionConfig",
+ "/class-templates/config/CdiPredictionConfigTemplate.java",
+ "/class-templates/config/SpringPredictionConfigTemplate.java");
}
public List> members() {
-
return members;
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/AbstractResourceGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/AbstractResourceGenerator.java
index fe3a7ebd096..e79814e399a 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/AbstractResourceGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/AbstractResourceGenerator.java
@@ -37,7 +37,6 @@
import org.kie.kogito.codegen.CodegenUtils;
import org.kie.kogito.codegen.GeneratorContext;
import org.kie.kogito.codegen.context.KogitoBuildContext;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import java.util.HashMap;
import java.util.List;
@@ -67,7 +66,6 @@ public abstract class AbstractResourceGenerator {
private String processId;
private String dataClazzName;
private String modelfqcn;
- private DependencyInjectionAnnotator annotator;
private boolean startable;
private boolean dynamic;
@@ -93,11 +91,6 @@ public AbstractResourceGenerator(
this.processClazzName = processfqcn;
}
- public AbstractResourceGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- return this;
- }
-
public AbstractResourceGenerator withUserTasks(List userTasks) {
this.userTasks = userTasks;
return this;
@@ -230,12 +223,14 @@ public String generate() {
template.findAll(ClassOrInterfaceType.class).forEach(cls -> interpolateTypes(cls, typeInterpolations));
template.findAll(MethodDeclaration.class).forEach(this::interpolateMethods);
- if (useInjection()) {
+ KogitoBuildContext buildContext = context.getBuildContext();
+
+ if (buildContext.hasDI()) {
template.findAll(FieldDeclaration.class,
- CodegenUtils::isProcessField).forEach(fd -> annotator.withNamedInjection(fd, processId));
+ CodegenUtils::isProcessField).forEach(fd -> buildContext.getDependencyInjectionAnnotator().withNamedInjection(fd, processId));
template.findAll(FieldDeclaration.class,
- CodegenUtils::isApplicationField).forEach(fd -> annotator.withInjection(fd));
+ CodegenUtils::isApplicationField).forEach(fd -> buildContext.getDependencyInjectionAnnotator().withInjection(fd));
} else {
template.findAll(FieldDeclaration.class,
CodegenUtils::isProcessField).forEach(this::initializeProcessField);
@@ -250,8 +245,8 @@ public String generate() {
createResourceMethod.ifPresent(template::remove);
}
- if (useInjection()) {
- annotator.withApplicationComponent(template);
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(template);
}
enableValidation(template);
@@ -265,9 +260,11 @@ public String generate() {
public abstract String getUserTaskResourceTemplate();
private void securityAnnotated(ClassOrInterfaceDeclaration template) {
- if (useInjection() && process.getMetaData().containsKey("securityRoles")) {
+ KogitoBuildContext buildContext = context.getBuildContext();
+ if (buildContext.hasDI() && process.getMetaData().containsKey("securityRoles")) {
String[] roles = ((String) process.getMetaData().get("securityRoles")).split(",");
- template.findAll(MethodDeclaration.class).stream().filter(this::requiresSecurity).forEach(md -> annotator.withSecurityRoles(md, roles));
+ template.findAll(MethodDeclaration.class).stream().filter(this::requiresSecurity)
+ .forEach(md -> buildContext.getDependencyInjectionAnnotator().withSecurityRoles(md, roles));
}
}
@@ -365,10 +362,6 @@ public String generatedFilePath() {
return relativePath;
}
- protected boolean useInjection() {
- return this.annotator != null;
- }
-
protected boolean isPublic() {
return WorkflowProcess.PUBLIC_VISIBILITY.equalsIgnoreCase(process.getVisibility());
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java
index 69a621f5627..3206b4a26d2 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageConsumerGenerator.java
@@ -28,9 +28,8 @@
import org.jbpm.compiler.canonical.TriggerMetaData;
import org.kie.api.definition.process.WorkflowProcess;
import org.kie.kogito.codegen.BodyDeclarationComparator;
-import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import static org.kie.kogito.codegen.CodegenUtils.interpolateTypes;
import static org.kie.kogito.codegen.CodegenUtils.isApplicationField;
@@ -46,6 +45,7 @@ public class MessageConsumerGenerator {
private static final String OBJECT_MAPPER_CANONICAL_NAME = ObjectMapper.class.getCanonicalName();
private final TemplatedGenerator generator;
+ private KogitoBuildContext buildContext;
private WorkflowProcess process;
private final String packageName;
private final String resourceClazzName;
@@ -55,17 +55,18 @@ public class MessageConsumerGenerator {
private final String processName;
private final String appCanonicalName;
private final String messageDataEventClassName;
- private DependencyInjectionAnnotator annotator;
private TriggerMetaData trigger;
public MessageConsumerGenerator(
+ KogitoBuildContext buildContext,
WorkflowProcess process,
String modelfqcn,
String processfqcn,
String appCanonicalName,
String messageDataEventClassName,
TriggerMetaData trigger) {
+ this.buildContext = buildContext;
this.process = process;
this.trigger = trigger;
this.packageName = process.getPackageName();
@@ -79,6 +80,7 @@ public MessageConsumerGenerator(
this.messageDataEventClassName = messageDataEventClassName;
this.generator = new TemplatedGenerator(
+ buildContext,
packageName,
resourceClazzName,
RESOURCE_CDI,
@@ -86,12 +88,6 @@ public MessageConsumerGenerator(
RESOURCE);
}
- public MessageConsumerGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- this.generator.withDependencyInjection(annotator);
- return this;
- }
-
public String className() {
return resourceClazzName;
}
@@ -100,13 +96,8 @@ public String generatedFilePath() {
return generator.generatedFilePath();
}
- protected boolean useInjection() {
- return this.annotator != null;
- }
-
public String generate() {
- CompilationUnit clazz = generator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(resourceClazzName, generator.templatePath(), "Cannot generate message consumer"));
+ CompilationUnit clazz = generator.compilationUnitOrThrow("Cannot generate message consumer");
clazz.setPackageDeclaration(process.getPackageName());
ClassOrInterfaceDeclaration template = clazz.findFirst(ClassOrInterfaceDeclaration.class).get();
@@ -121,7 +112,7 @@ public String generate() {
template.findAll(MethodCallExpr.class).forEach(this::interpolateStrings);
// legacy: force initialize fields
- if (!useInjection()) {
+ if (!buildContext.hasDI()) {
template.findAll(FieldDeclaration.class,
fd -> isProcessField(fd)).forEach(fd -> initializeProcessField(fd));
template.findAll(FieldDeclaration.class,
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageDataEventGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageDataEventGenerator.java
index 098179c2110..d3f0d29b5e1 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageDataEventGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageDataEventGenerator.java
@@ -24,7 +24,6 @@
import org.jbpm.compiler.canonical.TriggerMetaData;
import org.kie.api.definition.process.WorkflowProcess;
import org.kie.kogito.codegen.BodyDeclarationComparator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import static com.github.javaparser.StaticJavaParser.parse;
import static org.kie.kogito.codegen.CodegenUtils.interpolateTypes;
@@ -37,7 +36,6 @@ public class MessageDataEventGenerator {
private final String resourceClazzName;
private String processId;
private final String processName;
- private DependencyInjectionAnnotator annotator;
private TriggerMetaData trigger;
@@ -54,11 +52,6 @@ public MessageDataEventGenerator(
this.relativePath = packageName.replace(".", "/") + "/" + resourceClazzName + ".java";
}
- public MessageDataEventGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- return this;
- }
-
public String className() {
return resourceClazzName;
}
@@ -66,11 +59,7 @@ public String className() {
public String generatedFilePath() {
return relativePath;
}
-
- protected boolean useInjection() {
- return this.annotator != null;
- }
-
+
public String generate() {
CompilationUnit clazz = parse(
this.getClass().getResourceAsStream("/class-templates/MessageDataEventTemplate.java"));
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageProducerGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageProducerGenerator.java
index bf3a11707f3..018cafbe4c7 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageProducerGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/MessageProducerGenerator.java
@@ -24,9 +24,8 @@
import org.jbpm.compiler.canonical.TriggerMetaData;
import org.kie.api.definition.process.WorkflowProcess;
import org.kie.kogito.codegen.BodyDeclarationComparator;
-import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import static org.kie.kogito.codegen.CodegenUtils.interpolateTypes;
@@ -43,18 +42,20 @@ public class MessageProducerGenerator {
protected final String resourceClazzName;
private final String processName;
protected final String messageDataEventClassName;
+ protected final KogitoBuildContext buildContext;
protected WorkflowProcess process;
private String processId;
- protected DependencyInjectionAnnotator annotator;
protected TriggerMetaData trigger;
public MessageProducerGenerator(
+ KogitoBuildContext buildContext,
WorkflowProcess process,
String modelfqcn,
String processfqcn,
String messageDataEventClassName,
TriggerMetaData trigger) {
+ this.buildContext = buildContext;
this.process = process;
this.trigger = trigger;
this.packageName = process.getPackageName();
@@ -65,6 +66,7 @@ public MessageProducerGenerator(
this.messageDataEventClassName = messageDataEventClassName;
this.generator = new TemplatedGenerator(
+ buildContext,
packageName,
resourceClazzName,
RESOURCE_CDI,
@@ -72,15 +74,8 @@ public MessageProducerGenerator(
RESOURCE);
}
- public MessageProducerGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- generator.withDependencyInjection(annotator);
- return this;
- }
-
public String generate() {
- CompilationUnit clazz = generator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(resourceClazzName, generator.templatePath(), "Cannot generate message producer"));
+ CompilationUnit clazz = generator.compilationUnitOrThrow("Cannot generate message producer");
clazz.setPackageDeclaration(process.getPackageName());
ClassOrInterfaceDeclaration template = clazz.findFirst(ClassOrInterfaceDeclaration.class).get();
@@ -104,8 +99,4 @@ public String className() {
public String generatedFilePath() {
return generator.generatedFilePath();
}
-
- protected boolean useInjection() {
- return this.annotator != null;
- }
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
index c680565a11c..01351b17bec 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
@@ -47,7 +47,7 @@
import org.kie.api.io.Resource;
import org.kie.kogito.codegen.AbstractGenerator;
import org.kie.kogito.codegen.ApplicationSection;
-import org.kie.kogito.codegen.ConfigGenerator;
+import org.kie.kogito.codegen.ApplicationConfigGenerator;
import org.kie.kogito.codegen.GeneratedFile;
import org.kie.kogito.codegen.GeneratedFile.Type;
import org.kie.kogito.codegen.ResourceGeneratorFactory;
@@ -267,13 +267,13 @@ public Set generate() {
processIdToModelGenerator.get(execModelGen.getProcessId());
ProcessGenerator p = new ProcessGenerator(
+ context.getBuildContext(),
workFlowProcess,
execModelGen,
classPrefix,
modelClassGenerator.className(),
applicationCanonicalName()
)
- .withDependencyInjection(annotator)
.withAddons(addonsConfig);
ProcessInstanceGenerator pi = new ProcessInstanceGenerator(
@@ -290,7 +290,6 @@ public Set generate() {
execModelGen.className(),
applicationCanonicalName())
.map(r -> r
- .withDependencyInjection(annotator)
.withUserTasks(processIdToUserTaskModel.get(workFlowProcess.getId()))
.withSignals(metaData.getSignals())
.withTriggers(metaData.isStartable(), metaData.isDynamic()))
@@ -304,23 +303,21 @@ public Set generate() {
if (trigger.getType().equals(TriggerMetaData.TriggerType.ConsumeMessage)) {
MessageDataEventGenerator msgDataEventGenerator = new MessageDataEventGenerator(workFlowProcess,
- trigger)
- .withDependencyInjection(annotator);
+ trigger);
mdegs.add(msgDataEventGenerator);
megs.add(new MessageConsumerGenerator(
+ context.getBuildContext(),
workFlowProcess,
modelClassGenerator.className(),
execModelGen.className(),
applicationCanonicalName(),
msgDataEventGenerator.className(),
- trigger)
- .withDependencyInjection(annotator));
+ trigger));
} else if (trigger.getType().equals(TriggerMetaData.TriggerType.ProduceMessage)) {
MessageDataEventGenerator msgDataEventGenerator = new MessageDataEventGenerator(workFlowProcess,
- trigger)
- .withDependencyInjection(annotator);
+ trigger);
mdegs.add(msgDataEventGenerator);
// this is not cool, we should have a way to process addons
@@ -328,20 +325,20 @@ public Set generate() {
// see: https://issues.redhat.com/browse/KOGITO-1767
if (addonsConfig.useKnativeEventing()) {
mpgs.add(new CloudEventsMessageProducerGenerator(
+ context.getBuildContext(),
workFlowProcess,
modelClassGenerator.className(),
execModelGen.className(),
msgDataEventGenerator.className(),
- trigger)
- .withDependencyInjection(annotator));
+ trigger));
} else {
mpgs.add(new MessageProducerGenerator(
+ context.getBuildContext(),
workFlowProcess,
modelClassGenerator.className(),
execModelGen.className(),
msgDataEventGenerator.className(),
- trigger)
- .withDependencyInjection(annotator));
+ trigger));
}
}
}
@@ -414,12 +411,12 @@ public Set generate() {
if (this.addonsConfig.useKnativeEventing()) {
LOGGER.info("Knative Eventing addon enabled, generating CloudEvent HTTP listener");
final CloudEventsResourceGenerator ceGenerator =
- new CloudEventsResourceGenerator(packageName, processExecutableModelGenerators, annotator);
+ new CloudEventsResourceGenerator(context.getBuildContext(), packageName, processExecutableModelGenerators);
storeFile(Type.REST, ceGenerator.generatedFilePath(), ceGenerator.generate());
}
final TopicsInformationResourceGenerator topicsGenerator =
- new TopicsInformationResourceGenerator(packageName, processExecutableModelGenerators, annotator, addonsConfig);
+ new TopicsInformationResourceGenerator(context.getBuildContext(), packageName, processExecutableModelGenerators, addonsConfig);
storeFile(Type.REST, topicsGenerator.generatedFilePath(), topicsGenerator.generate());
@@ -438,9 +435,9 @@ public Set generate() {
}
@Override
- public void updateConfig(ConfigGenerator cfg) {
+ public void updateConfig(ApplicationConfigGenerator cfg) {
if (!processes.isEmpty()) {
- cfg.withProcessConfig(new ProcessConfigGenerator(packageName));
+ cfg.withProcessConfig(new ProcessConfigGenerator(context().getBuildContext(), packageName));
}
}
@@ -458,8 +455,7 @@ public Set getGeneratedFiles() {
@Override
public ApplicationSection section() {
- ProcessContainerGenerator moduleGenerator = new ProcessContainerGenerator(packageName);
- moduleGenerator.withDependencyInjection(annotator);
+ ProcessContainerGenerator moduleGenerator = new ProcessContainerGenerator(context.getBuildContext(), packageName);
processGenerators.forEach(moduleGenerator::addProcess);
return moduleGenerator;
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessContainerGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessContainerGenerator.java
index a2842a4a353..58c14554738 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessContainerGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessContainerGenerator.java
@@ -39,7 +39,7 @@
import org.kie.kogito.codegen.AbstractApplicationSection;
import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import static com.github.javaparser.ast.NodeList.nodeList;
@@ -54,19 +54,18 @@ public class ProcessContainerGenerator extends AbstractApplicationSection {
private final List processes;
private final List> factoryMethods;
- private DependencyInjectionAnnotator annotator;
-
private BlockStmt byProcessIdBody = new BlockStmt();
private BlockStmt processesBody = new BlockStmt();
private final TemplatedGenerator templatedGenerator;
- public ProcessContainerGenerator(String packageName) {
- super(SECTION_CLASS_NAME);
+ public ProcessContainerGenerator(KogitoBuildContext buildContext, String packageName) {
+ super(buildContext, SECTION_CLASS_NAME);
this.packageName = packageName;
this.processes = new ArrayList<>();
this.factoryMethods = new ArrayList<>();
this.templatedGenerator = new TemplatedGenerator(
+ buildContext,
packageName,
SECTION_CLASS_NAME,
RESOURCE_CDI,
@@ -94,16 +93,9 @@ public void addProcessToApplication(ProcessGenerator r) {
byProcessIdBody.addStatement(byProcessId);
}
- public ProcessContainerGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- this.templatedGenerator.withDependencyInjection(annotator);
- return this;
- }
-
@Override
public CompilationUnit compilationUnit() {
- CompilationUnit compilationUnit = templatedGenerator.compilationUnit()
- .orElseThrow(() -> new IllegalArgumentException("Invalid Template: No CompilationUnit"));
+ CompilationUnit compilationUnit = templatedGenerator.compilationUnitOrThrow("Invalid Template: No CompilationUnit");
registerProcessesExplicitly(compilationUnit);
return compilationUnit;
@@ -111,7 +103,7 @@ public CompilationUnit compilationUnit() {
private void registerProcessesExplicitly(CompilationUnit compilationUnit) {
// only for non-DI cases
- if (annotator == null) {
+ if (!buildContext.hasDI()) {
setupProcessById(compilationUnit);
setupProcessIds(compilationUnit);
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessGenerator.java
index 0639a3e484e..2b6b4faf00c 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/ProcessGenerator.java
@@ -63,7 +63,7 @@
import org.kie.kogito.Model;
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.BodyDeclarationComparator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.process.ProcessInstancesFactory;
import org.kie.kogito.process.Processes;
import org.kie.kogito.process.impl.AbstractProcess;
@@ -92,18 +92,20 @@ public class ProcessGenerator {
private final String generatedFilePath;
private final String completePath;
private final String targetCanonicalName;
+ private final KogitoBuildContext buildContext;
private final String appCanonicalName;
private String targetTypeName;
- private DependencyInjectionAnnotator annotator;
private AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
private List additionalClasses = new ArrayList<>();
- public ProcessGenerator(WorkflowProcess process,
+ public ProcessGenerator(KogitoBuildContext buildContext,
+ WorkflowProcess process,
ProcessExecutableModelGenerator processGenerator,
String typeName,
String modelTypeName,
String appCanonicalName) {
+ this.buildContext = buildContext;
this.appCanonicalName = appCanonicalName;
@@ -357,10 +359,10 @@ public ClassOrInterfaceDeclaration classDeclaration() {
.addStatement(superMethod)
.addStatement(new MethodCallExpr("activate")));
- if (useInjection()) {
- annotator.withNamedApplicationComponent(cls, process.getId());
- annotator.withEagerStartup(cls);
- annotator.withInjection(constructor);
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withNamedApplicationComponent(cls, process.getId());
+ buildContext.getDependencyInjectionAnnotator().withEagerStartup(cls);
+ buildContext.getDependencyInjectionAnnotator().withInjection(constructor);
}
Map handlers = processMetaData.getGeneratedHandlers();
@@ -394,9 +396,9 @@ public ClassOrInterfaceDeclaration classDeclaration() {
ClassOrInterfaceType clazzNameType = parseClassOrInterfaceType(clazzName);
Parameter parameter = new Parameter(clazzNameType, varName);
- if (useInjection()) {
- annotator.withApplicationComponent(handlerClazz);
- annotator
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(handlerClazz);
+ buildContext.getDependencyInjectionAnnotator()
.withInjection(
handlerClazz
.getConstructors()
@@ -453,10 +455,10 @@ public ClassOrInterfaceDeclaration classDeclaration() {
String fieldName = "process" + subProcess.getKey();
ClassOrInterfaceType modelType = new ClassOrInterfaceType(null, new SimpleName(org.kie.kogito.process.Process.class.getCanonicalName()), NodeList.nodeList(new ClassOrInterfaceType(null, StringUtils.ucFirst(subProcess.getKey() + "Model"))));
- if (useInjection()) {
+ if (buildContext.hasDI()) {
subprocessFieldDeclaration
.addVariable(new VariableDeclarator(modelType, fieldName));
- annotator.withInjection(subprocessFieldDeclaration);
+ buildContext.getDependencyInjectionAnnotator().withInjection(subprocessFieldDeclaration);
} else {
// app.get(org.kie.kogito.process.Processes.class).processById()
MethodCallExpr initSubProcessField = new MethodCallExpr(
@@ -485,8 +487,8 @@ public ClassOrInterfaceDeclaration classDeclaration() {
.addVariable(new VariableDeclarator(new ClassOrInterfaceType(null, producerFieldType), producerFielName));
cls.addMember(producerFieldieldDeclaration);
- if (useInjection()) {
- annotator.withInjection(producerFieldieldDeclaration);
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withInjection(producerFieldieldDeclaration);
} else {
AssignExpr assignExpr = new AssignExpr(
@@ -526,18 +528,9 @@ public String processId() {
public List getAdditionalClasses() {
return additionalClasses;
}
-
- public ProcessGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- return this;
- }
public ProcessGenerator withAddons(AddonsConfig addonsConfig) {
this.addonsConfig = addonsConfig;
return this;
}
-
- protected boolean useInjection() {
- return this.annotator != null;
- }
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/config/ProcessConfigGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/config/ProcessConfigGenerator.java
index 3dd66d7b7b1..fc7cb392357 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/config/ProcessConfigGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/config/ProcessConfigGenerator.java
@@ -15,17 +15,16 @@
package org.kie.kogito.codegen.process.config;
-import org.kie.kogito.codegen.TemplatedGenerator;
+import org.kie.kogito.codegen.AbstractConfigGenerator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
-public class ProcessConfigGenerator extends TemplatedGenerator {
+public class ProcessConfigGenerator extends AbstractConfigGenerator {
- private static final String RESOURCE_CDI = "/class-templates/config/CdiProcessConfigTemplate.java";
- private static final String RESOURCE_SPRING = "/class-templates/config/SpringProcessConfigTemplate.java";
-
- public ProcessConfigGenerator(String packageName) {
- super(packageName,
- "ProcessConfig",
- RESOURCE_CDI,
- RESOURCE_SPRING);
+ public ProcessConfigGenerator(KogitoBuildContext buildContext, String packageName) {
+ super(buildContext,
+ packageName,
+ "ProcessConfig",
+ "/class-templates/config/CdiProcessConfigTemplate.java",
+ "/class-templates/config/SpringProcessConfigTemplate.java");
}
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGenerator.java
index 9ea67532fa7..d1ac289641c 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGenerator.java
@@ -30,6 +30,7 @@
import org.kie.api.definition.process.WorkflowProcess;
import org.kie.kogito.codegen.BodyDeclarationComparator;
import org.kie.kogito.codegen.TemplateInstantiationException;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.process.MessageProducerGenerator;
import static com.github.javaparser.StaticJavaParser.parse;
@@ -41,8 +42,13 @@
@Deprecated
public class CloudEventsMessageProducerGenerator extends MessageProducerGenerator {
- public CloudEventsMessageProducerGenerator(WorkflowProcess process, String modelfqcn, String processfqcn, String messageDataEventClassName, TriggerMetaData trigger) {
- super(process, modelfqcn, processfqcn, messageDataEventClassName, trigger);
+ public CloudEventsMessageProducerGenerator(KogitoBuildContext buildContext,
+ WorkflowProcess process,
+ String modelfqcn,
+ String processfqcn,
+ String messageDataEventClassName,
+ TriggerMetaData trigger) {
+ super(buildContext, process, modelfqcn, processfqcn, messageDataEventClassName, trigger);
}
public String generate() {
@@ -66,22 +72,22 @@ public String generate() {
md.findAll(ClassOrInterfaceType.class).forEach(t -> t.setName(t.getNameAsString().replace("$DataEventType$", messageDataEventClassName)));
});
- if (useInjection()) {
- annotator.withApplicationComponent(template);
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(template);
FieldDeclaration emitterField = template.findFirst(FieldDeclaration.class)
.filter(fd -> fd.getVariables().stream().anyMatch(v -> v.getNameAsString().equals("emitter")))
.orElseThrow(() -> new IllegalStateException("Cannot find emitter field in MessageProducerTemplate"));
- annotator.withInjection(emitterField);
- annotator.withOutgoingMessage(emitterField, trigger.getName());
- emitterField.getVariable(0).setType(annotator.emitterType("String"));
+ buildContext.getDependencyInjectionAnnotator().withInjection(emitterField);
+ buildContext.getDependencyInjectionAnnotator().withOutgoingMessage(emitterField, trigger.getName());
+ emitterField.getVariable(0).setType(buildContext.getDependencyInjectionAnnotator().emitterType("String"));
MethodDeclaration produceMethod = template.findAll(MethodDeclaration.class).stream()
.filter(md -> md.getNameAsString().equals("produce"))
.findFirst().orElseThrow(() -> new IllegalStateException("Cannot find produce methods in MessageProducerTemplate"));
MethodCallExpr sendMethodCall = new MethodCallExpr(new NameExpr("emitter"), "send");
- annotator.withMessageProducer(
+ buildContext.getDependencyInjectionAnnotator().withMessageProducer(
sendMethodCall,
trigger.getName(),
new MethodCallExpr(new ThisExpr(), "marshall")
@@ -91,7 +97,8 @@ public String generate() {
this.generateProduceMethodBody(produceMethod, sendMethodCall);
template.findAll(FieldDeclaration.class,
- fd -> fd.getVariable(0).getNameAsString().equals("useCloudEvents")).forEach(fd -> annotator.withConfigInjection(fd, "kogito.messaging.as-cloudevents"));
+ fd -> fd.getVariable(0).getNameAsString().equals("useCloudEvents"))
+ .forEach(fd -> buildContext.getDependencyInjectionAnnotator().withConfigInjection(fd, "kogito.messaging.as-cloudevents"));
}
template.getMembers().sort(new BodyDeclarationComparator());
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGenerator.java
index 4fcb34347d2..6eb9d08c173 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGenerator.java
@@ -25,12 +25,9 @@
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import org.jbpm.compiler.canonical.TriggerMetaData;
-import org.kie.kogito.codegen.ApplicationGenerator;
import org.kie.kogito.codegen.BodyDeclarationComparator;
-import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.process.ProcessExecutableModelGenerator;
public class CloudEventsResourceGenerator extends AbstractEventResourceGenerator {
@@ -39,16 +36,21 @@ public class CloudEventsResourceGenerator extends AbstractEventResourceGenerator
private static final String CDI_TEMPLATE = "/class-templates/events/CloudEventsListenerResource.java";
private static final String CLASS_NAME = "CloudEventListenerResource";
- // even if we only support Quarkus for now, this will come in handy when we add SpringBoot support.
- private final DependencyInjectionAnnotator annotator;
+ private final KogitoBuildContext buildContext;
private final List triggers;
- public CloudEventsResourceGenerator(final String packageName, final List generators, final DependencyInjectionAnnotator annotator) {
- super(new TemplatedGenerator(packageName, CLASS_NAME, CDI_TEMPLATE,
- null, CDI_TEMPLATE)
- .withDependencyInjection(annotator));
+ public CloudEventsResourceGenerator(final KogitoBuildContext buildContext,
+ final String packageName,
+ final List generators) {
+ super(new TemplatedGenerator(
+ buildContext,
+ packageName,
+ CLASS_NAME,
+ CDI_TEMPLATE,
+ null,
+ CDI_TEMPLATE));
+ this.buildContext = buildContext;
this.triggers = this.filterTriggers(generators);
- this.annotator = annotator;
}
/**
@@ -66,9 +68,7 @@ List getTriggers() {
* @return
*/
public String generate() {
- final CompilationUnit clazz = generator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(CLASS_NAME, generator.templatePath(),
- "Cannot generate CloudEvents REST Resource"));
+ final CompilationUnit clazz = generator.compilationUnitOrThrow("Cannot generate CloudEvents REST Resource");
final ClassOrInterfaceDeclaration template = clazz
.findFirst(ClassOrInterfaceDeclaration.class)
.orElseThrow(() -> new NoSuchElementException("Compilation unit doesn't contain a class or interface declaration!"));
@@ -98,9 +98,11 @@ private List filterTriggers(final List fd.getVariables().get(0).getNameAsString().contains(EMITTER_PREFIX))
- .forEach(annotator::withInjection);
+ if(buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(template);
+ template.findAll(FieldDeclaration.class, fd -> fd.getVariables().get(0).getNameAsString().contains(EMITTER_PREFIX))
+ .forEach(buildContext.getDependencyInjectionAnnotator()::withInjection);
+ }
}
String sanitizeEmitterName(String triggerName) {
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGenerator.java
index 8387a86c7bc..70159431fa1 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGenerator.java
@@ -31,9 +31,8 @@
import org.jbpm.compiler.canonical.TriggerMetaData;
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.BodyDeclarationComparator;
-import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.process.ProcessExecutableModelGenerator;
import org.kie.kogito.event.EventKind;
import org.kie.kogito.services.event.DataEventAttrBuilder;
@@ -44,19 +43,18 @@ public class TopicsInformationResourceGenerator extends AbstractEventResourceGen
private static final String SPRING_TEMPLATE = "/class-templates/events/SpringTopicsInformationResourceTemplate.java";
private static final String CLASS_NAME = "TopicsInformationResource";
- private final DependencyInjectionAnnotator annotator;
+ private final KogitoBuildContext buildContext;
private final Map> triggers;
private final AddonsConfig addonsConfig;
- public TopicsInformationResourceGenerator(final String packageName,
+ public TopicsInformationResourceGenerator(final KogitoBuildContext buildContext,
+ final String packageName,
final List generators,
- final DependencyInjectionAnnotator annotator,
final AddonsConfig addonsConfig) {
- super(new TemplatedGenerator(packageName, CLASS_NAME,
- CDI_TEMPLATE, SPRING_TEMPLATE, CDI_TEMPLATE)
- .withDependencyInjection(annotator));
+ super(new TemplatedGenerator(buildContext, packageName, CLASS_NAME,
+ CDI_TEMPLATE, SPRING_TEMPLATE, CDI_TEMPLATE));
+ this.buildContext = buildContext;
this.triggers = this.filterTriggers(generators);
- this.annotator = annotator;
this.addonsConfig = addonsConfig;
}
@@ -65,9 +63,7 @@ Map> getTriggers() {
}
public String generate() {
- final CompilationUnit clazz = generator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(CLASS_NAME, generator.templatePath(),
- "Cannot generate TopicInformation REST Resource"));
+ final CompilationUnit clazz = generator.compilationUnitOrThrow("Cannot generate TopicInformation REST Resource");
final ClassOrInterfaceDeclaration template = clazz
.findFirst(ClassOrInterfaceDeclaration.class)
.orElseThrow(() -> new NoSuchElementException("Compilation unit doesn't contain a class or interface declaration!"));
@@ -75,10 +71,10 @@ public String generate() {
this.addEventsMeta(template);
// in case we don't have the bean in the classpath, just ignore the injection that the generated class will use NoOp instead
- if (annotator != null && addonsConfig.useCloudEvents()) {
- annotator.withApplicationComponent(template);
+ if (buildContext.hasDI() && addonsConfig.useCloudEvents()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(template);
template.findAll(FieldDeclaration.class, fd -> fd.getVariables().get(0).getNameAsString().contains("discovery"))
- .forEach(annotator::withInjection);
+ .forEach(buildContext.getDependencyInjectionAnnotator()::withInjection);
} else {
template.findFirst(MethodDeclaration.class, md -> md.getName().toString().equals("getTopics"))
.orElseThrow(() -> new NoSuchElementException("Compilation unit doesn't contain method getTopics!"))
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/persistence/PersistenceGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/persistence/PersistenceGenerator.java
index 0942ce66e8d..e8f988b0616 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/persistence/PersistenceGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/process/persistence/PersistenceGenerator.java
@@ -50,11 +50,11 @@
import org.kie.kogito.codegen.AbstractGenerator;
import org.kie.kogito.codegen.ApplicationSection;
import org.kie.kogito.codegen.BodyDeclarationComparator;
-import org.kie.kogito.codegen.ConfigGenerator;
+import org.kie.kogito.codegen.ApplicationConfigGenerator;
import org.kie.kogito.codegen.GeneratedFile;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.SpringDependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
+import org.kie.kogito.codegen.context.SpringBootKogitoBuildContext;
import org.kie.kogito.codegen.metadata.MetaDataWriter;
import org.kie.kogito.codegen.metadata.PersistenceLabeler;
import org.kie.kogito.codegen.metadata.PersistenceProtoFilesLabeler;
@@ -142,11 +142,8 @@ public Collection generate() {
}
@Override
- public void updateConfig(ConfigGenerator cfg) {
- }
-
- protected boolean useInjection() {
- return this.annotator != null;
+ public void updateConfig(ApplicationConfigGenerator cfg) {
+ // Persistence has no custom/additional config
}
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -191,14 +188,15 @@ protected void infinispanBasedPersistence(List generatedFiles) {
ConstructorDeclaration constructor = createConstructorForClazz(persistenceProviderClazz);
- if (useInjection()) {
- annotator.withApplicationComponent(persistenceProviderClazz);
- annotator.withInjection(constructor);
+ KogitoBuildContext buildContext = context.getBuildContext();
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(persistenceProviderClazz);
+ buildContext.getDependencyInjectionAnnotator().withInjection(constructor);
FieldDeclaration templateNameField = new FieldDeclaration().addVariable(new VariableDeclarator()
.setType(new ClassOrInterfaceType(null, new SimpleName(Optional.class.getCanonicalName()), NodeList.nodeList(new ClassOrInterfaceType(null, String.class.getCanonicalName()))))
.setName(TEMPLATE_NAME));
- annotator.withConfigInjection(templateNameField, "kogito.persistence.infinispan.template");
+ buildContext.getDependencyInjectionAnnotator().withConfigInjection(templateNameField, "kogito.persistence.infinispan.template");
// allow to inject template name for the cache
BlockStmt templateMethodBody = new BlockStmt();
templateMethodBody.addStatement(new ReturnStmt(new MethodCallExpr(new NameExpr(TEMPLATE_NAME), OR_ELSE).addArgument(new StringLiteralExpr(""))));
@@ -285,13 +283,14 @@ protected void fileSystemBasedPersistence(List generatedFiles) {
CompilationUnit compilationUnit = new CompilationUnit(KOGITO_PROCESS_INSTANCE_PACKAGE);
compilationUnit.getTypes().add(persistenceProviderClazz);
- if (useInjection()) {
- annotator.withApplicationComponent(persistenceProviderClazz);
+ KogitoBuildContext buildContext = context.getBuildContext();
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(persistenceProviderClazz);
FieldDeclaration pathField = new FieldDeclaration().addVariable(new VariableDeclarator()
.setType(new ClassOrInterfaceType(null, new SimpleName(Optional.class.getCanonicalName()), NodeList.nodeList(new ClassOrInterfaceType(null, String.class.getCanonicalName()))))
.setName(PATH_NAME));
- annotator.withConfigInjection(pathField, KOGITO_PERSISTENCE_FS_PATH_PROP);
+ buildContext.getDependencyInjectionAnnotator().withConfigInjection(pathField, KOGITO_PERSISTENCE_FS_PATH_PROP);
// allow to inject path for the file system storage
BlockStmt pathMethodBody = new BlockStmt();
pathMethodBody.addStatement(new ReturnStmt(new MethodCallExpr(new NameExpr(PATH_NAME), OR_ELSE).addArgument(new StringLiteralExpr("/tmp"))));
@@ -320,9 +319,11 @@ private void mongodbBasedPersistence(List generatedFiles) {
persistenceProviderClazz.addConstructor(Keyword.PUBLIC).setBody(new BlockStmt().addStatement(new ExplicitConstructorInvocationStmt(false, null, NodeList.nodeList(new NullLiteralExpr()))));
ConstructorDeclaration constructor = createConstructorForClazz(persistenceProviderClazz);
- if (useInjection()) {
- annotator.withApplicationComponent(persistenceProviderClazz);
- annotator.withInjection(constructor);
+
+ KogitoBuildContext buildContext = context.getBuildContext();
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withApplicationComponent(persistenceProviderClazz);
+ buildContext.getDependencyInjectionAnnotator().withInjection(constructor);
FieldDeclaration dbNameField = new FieldDeclaration().addVariable(new VariableDeclarator()
.setType(new ClassOrInterfaceType(null, new SimpleName(Optional.class.getCanonicalName()), NodeList.nodeList(
@@ -330,10 +331,10 @@ private void mongodbBasedPersistence(List generatedFiles) {
String.class.getCanonicalName()))))
.setName(MONGODB_DB_NAME));
//injecting dbName from quarkus/springboot properties else default kogito
- if (annotator instanceof CDIDependencyInjectionAnnotator) {
- annotator.withConfigInjection(dbNameField, QUARKUS_PERSISTENCE_MONGODB_NAME_PROP);
- } else if (annotator instanceof SpringDependencyInjectionAnnotator) {
- annotator.withConfigInjection(dbNameField, SPRINGBOOT_PERSISTENCE_MONGODB_NAME_PROP);
+ if (buildContext instanceof QuarkusKogitoBuildContext) {
+ buildContext.getDependencyInjectionAnnotator().withConfigInjection(dbNameField, QUARKUS_PERSISTENCE_MONGODB_NAME_PROP);
+ } else if (buildContext instanceof SpringBootKogitoBuildContext) {
+ buildContext.getDependencyInjectionAnnotator().withConfigInjection(dbNameField, SPRINGBOOT_PERSISTENCE_MONGODB_NAME_PROP);
}
BlockStmt dbNameMethodBody = new BlockStmt();
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/DeclaredTypeCodegen.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/DeclaredTypeCodegen.java
index b6a8751e17d..7c4801cc6f7 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/DeclaredTypeCodegen.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/DeclaredTypeCodegen.java
@@ -42,7 +42,7 @@
import org.kie.internal.builder.CompositeKnowledgeBuilder;
import org.kie.kogito.codegen.AbstractGenerator;
import org.kie.kogito.codegen.ApplicationSection;
-import org.kie.kogito.codegen.ConfigGenerator;
+import org.kie.kogito.codegen.ApplicationConfigGenerator;
import org.kie.kogito.codegen.KogitoPackageSources;
import org.kie.kogito.codegen.rules.config.RuleConfigGenerator;
import org.slf4j.Logger;
@@ -159,8 +159,8 @@ protected void compileKnowledgePackages(PackageDescr packageDescr, PackageRegist
}
@Override
- public void updateConfig(ConfigGenerator cfg) {
- cfg.withRuleConfig(new RuleConfigGenerator("defaultpkg"));
+ public void updateConfig(ApplicationConfigGenerator cfg) {
+ cfg.withRuleConfig(new RuleConfigGenerator(context().getBuildContext(), "defaultpkg"));
}
public DeclaredTypeCodegen withClassLoader(ClassLoader projectClassLoader) {
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegen.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegen.java
index ef0906e939b..0dbbeae8b53 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegen.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegen.java
@@ -55,10 +55,11 @@
import org.kie.internal.ruleunit.RuleUnitDescription;
import org.kie.kogito.codegen.AbstractGenerator;
import org.kie.kogito.codegen.ApplicationSection;
-import org.kie.kogito.codegen.ConfigGenerator;
+import org.kie.kogito.codegen.ApplicationConfigGenerator;
import org.kie.kogito.codegen.DashboardGeneratedFileUtils;
import org.kie.kogito.codegen.GeneratorContext;
import org.kie.kogito.codegen.KogitoPackageSources;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.io.CollectedResource;
import org.kie.kogito.codegen.rules.config.NamedRuleUnitConfig;
import org.kie.kogito.codegen.rules.config.RuleConfigGenerator;
@@ -83,11 +84,11 @@ public class IncrementalRuleCodegen extends AbstractGenerator {
private static final Logger LOGGER = LoggerFactory.getLogger(IncrementalRuleCodegen.class);
public static IncrementalRuleCodegen ofCollectedResources(Collection resources) {
- List dmnResources = resources.stream()
+ List generatedRules = resources.stream()
.map(CollectedResource::resource)
.filter(r -> r.getResourceType() == ResourceType.DRL || r.getResourceType() == ResourceType.DTABLE || r.getResourceType() == ResourceType.PROPERTIES)
.collect(toList());
- return ofResources(dmnResources);
+ return ofResources(generatedRules);
}
public static IncrementalRuleCodegen ofJavaResources(Collection resources) {
@@ -141,8 +142,7 @@ public void setContext(GeneratorContext context) {
@Override
public ApplicationSection section() {
- RuleUnitContainerGenerator moduleGenerator = new RuleUnitContainerGenerator(packageName);
- moduleGenerator.withDependencyInjection(annotator);
+ RuleUnitContainerGenerator moduleGenerator = new RuleUnitContainerGenerator(context.getBuildContext(), packageName);
ruleUnitGenerators.forEach(moduleGenerator::addRuleUnit);
return moduleGenerator;
}
@@ -196,7 +196,7 @@ public List generate() {
if (hasRuleUnits) {
generateRuleUnits( errors, generatedFiles );
} else {
- if (annotator != null && !hotReloadMode) {
+ if (context.getBuildContext().hasDI() && !hotReloadMode) {
generateSessionUnits( generatedFiles );
}
generateProject( dummyReleaseId, modelsByUnit, generatedFiles );
@@ -253,8 +253,7 @@ private boolean generateModels( ModelBuilderImpl modelBuil
hasRuleUnits = true;
for (RuleUnitDescription ruleUnit : ruleUnits) {
String canonicalName = ruleUnit.getCanonicalName();
- RuleUnitGenerator ruSource = new RuleUnitGenerator(ruleUnit, pkgSources.getRulesFileName())
- .withDependencyInjection(annotator)
+ RuleUnitGenerator ruSource = new RuleUnitGenerator(ruleUnit, pkgSources.getRulesFileName(), context.getBuildContext())
.withQueries(pkgSources.getQueriesInRuleUnit(canonicalName))
.withAddons(addonsConfig)
.mergeConfig(configs.get(canonicalName));
@@ -283,8 +282,9 @@ private void generateProject( ReleaseIdImpl dummyReleaseId, Map
modelSourceClass.generate()));
ProjectSourceClass projectSourceClass = new ProjectSourceClass(modelSourceClass.getModelMethod());
- if (annotator != null) {
- projectSourceClass.withDependencyInjection("@" + annotator.applicationComponentType());
+ KogitoBuildContext buildContext = context.getBuildContext();
+ if (buildContext.hasDI()) {
+ projectSourceClass.withDependencyInjection("@" + buildContext.getDependencyInjectionAnnotator().applicationComponentType());
}
generatedFiles.add(new org.kie.kogito.codegen.GeneratedFile(
@@ -296,9 +296,10 @@ private void generateProject( ReleaseIdImpl dummyReleaseId, Map
private void generateRuleUnits( List errors, List generatedFiles ) {
RuleUnitHelper ruleUnitHelper = new RuleUnitHelper();
- if (annotator != null) {
+ if (context.getBuildContext().hasDI()) {
generatedFiles.add( new org.kie.kogito.codegen.GeneratedFile( org.kie.kogito.codegen.GeneratedFile.Type.JSON_MAPPER,
- packageName.replace('.', '/') + "/KogitoObjectMapper.java", annotator.objectMapperInjectorSource(packageName) ) );
+ packageName.replace('.', '/') + "/KogitoObjectMapper.java",
+ context.getBuildContext().getDependencyInjectionAnnotator().objectMapperInjectorSource(packageName) ) );
}
for (RuleUnitGenerator ruleUnit : ruleUnitGenerators) {
@@ -325,7 +326,7 @@ private List generateQueriesEndpoint( List errors, List ge
for (String sessionName : kBaseModel.getKieSessionModels().keySet()) {
CompilationUnit cu = parse( getClass().getResourceAsStream( "/class-templates/SessionRuleUnitTemplate.java" ) );
ClassOrInterfaceDeclaration template = cu.findFirst( ClassOrInterfaceDeclaration.class ).get();
- annotator.withNamedSingletonComponent(template, "$SessionName$");
+ context.getBuildContext().getDependencyInjectionAnnotator().withNamedSingletonComponent(template, "$SessionName$");
template.setName( "SessionRuleUnit_" + sessionName );
- template.findAll( FieldDeclaration.class).stream().filter( fd -> fd.getVariable(0).getNameAsString().equals("runtimeBuilder")).forEach( fd -> annotator.withInjection(fd));
+ template.findAll( FieldDeclaration.class).stream()
+ .filter( fd -> fd.getVariable(0).getNameAsString().equals("runtimeBuilder"))
+ .forEach( fd -> context.getBuildContext().getDependencyInjectionAnnotator().withInjection(fd));
template.findAll( StringLiteralExpr.class ).forEach( s -> s.setString( s.getValue().replace( "$SessionName$", sessionName ) ) );
generatedFiles.add(new org.kie.kogito.codegen.GeneratedFile(
@@ -416,8 +419,8 @@ private String ruleUnit2KieSessionName(String ruleUnit) {
}
@Override
- public void updateConfig(ConfigGenerator cfg) {
- cfg.withRuleConfig(new RuleConfigGenerator(packageName));
+ public void updateConfig(ApplicationConfigGenerator cfg) {
+ cfg.withRuleConfig(new RuleConfigGenerator(context().getBuildContext(), packageName));
}
public IncrementalRuleCodegen withKModule(KieModuleModel model) {
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java
index 1384f6721a2..577b4240bed 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java
@@ -48,9 +48,8 @@
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.BodyDeclarationComparator;
import org.kie.kogito.codegen.FileGenerator;
-import org.kie.kogito.codegen.TemplateInstantiationException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import static com.github.javaparser.StaticJavaParser.parseClassOrInterfaceType;
import static com.github.javaparser.StaticJavaParser.parseStatement;
@@ -64,9 +63,9 @@ public class QueryEndpointGenerator implements FileGenerator {
private final RuleUnitDescription ruleUnit;
private final QueryModel query;
- private final DependencyInjectionAnnotator annotator;
private final String name;
+ private final KogitoBuildContext buildContext;
private final String endpointName;
private final String queryClassName;
private final String targetCanonicalName;
@@ -74,20 +73,22 @@ public class QueryEndpointGenerator implements FileGenerator {
private final AddonsConfig addonsConfig;
private final TemplatedGenerator generator;
- public QueryEndpointGenerator(RuleUnitDescription ruleUnit, QueryModel query, DependencyInjectionAnnotator annotator, AddonsConfig addonsConfig) {
+ public QueryEndpointGenerator(RuleUnitDescription ruleUnit,
+ QueryModel query,
+ KogitoBuildContext buildContext,
+ AddonsConfig addonsConfig) {
this.ruleUnit = ruleUnit;
this.query = query;
this.name = toCamelCase(query.getName());
+ this.buildContext = buildContext;
this.endpointName = toKebabCase(name);
- this.annotator = annotator;
this.queryClassName = ruleUnit.getSimpleName() + "Query" + name;
this.targetCanonicalName = queryClassName + "Endpoint";
this.generatedFilePath = (query.getNamespace() + "." + targetCanonicalName).replace('.', '/') + ".java";
this.addonsConfig = addonsConfig;
this.generator =
- new TemplatedGenerator(query.getNamespace(), targetCanonicalName, RESOURCE_CDI, RESOURCE_SPRING, RESOURCE_DEFAULT)
- .withDependencyInjection(annotator);
+ new TemplatedGenerator(buildContext, query.getNamespace(), targetCanonicalName, RESOURCE_CDI, RESOURCE_SPRING, RESOURCE_DEFAULT);
}
public QueryGenerator getQueryGenerator() {
@@ -134,11 +135,7 @@ public int[] getLines() {
@Override
public String generate() {
- CompilationUnit cu = generator.compilationUnit()
- .orElseThrow(() -> {
- throw new TemplateInstantiationException(
- generator.typeName(), generator.templatePath(), "Could not create CompilationUnit");
- });
+ CompilationUnit cu = generator.compilationUnitOrThrow("Could not create CompilationUnit");
cu.setPackageDeclaration(query.getNamespace());
ClassOrInterfaceDeclaration clazz = cu
@@ -174,7 +171,7 @@ private void generateConstructors(ClassOrInterfaceDeclaration clazz) {
}
private void generateQueryMethods(CompilationUnit cu, ClassOrInterfaceDeclaration clazz, String returnType) {
- boolean hasDI = annotator != null;
+ boolean hasDI = buildContext.hasDI();
MethodDeclaration queryMethod = clazz.getMethodsByName("executeQuery").get(0);
queryMethod.getParameter(0).setType(ruleUnit.getCanonicalName() + (hasDI ? "" : "DTO"));
setGeneric(queryMethod.getType(), returnType);
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitContainerGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitContainerGenerator.java
index 5ac7059b12c..d8ffd7f1ce1 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitContainerGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitContainerGenerator.java
@@ -20,9 +20,8 @@
import com.github.javaparser.ast.CompilationUnit;
import org.kie.kogito.codegen.AbstractApplicationSection;
-import org.kie.kogito.codegen.InvalidTemplateException;
import org.kie.kogito.codegen.TemplatedGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import com.github.javaparser.ast.body.BodyDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
@@ -44,13 +43,13 @@ public class RuleUnitContainerGenerator extends AbstractApplicationSection {
private final List ruleUnits;
private final TemplatedGenerator templatedGenerator;
- private DependencyInjectionAnnotator annotator;
private List> factoryMethods = new ArrayList<>();
- public RuleUnitContainerGenerator(String packageName) {
- super(SECTION_CLASS_NAME);
+ public RuleUnitContainerGenerator(KogitoBuildContext buildContext, String packageName) {
+ super(buildContext, SECTION_CLASS_NAME);
this.ruleUnits = new ArrayList<>();
this.templatedGenerator = new TemplatedGenerator(
+ buildContext,
packageName,
SECTION_CLASS_NAME,
RESOURCE_CDI,
@@ -86,13 +85,9 @@ private BlockStmt factoryByIdBody() {
@Override
public CompilationUnit compilationUnit() {
- CompilationUnit compilationUnit = templatedGenerator.compilationUnit()
- .orElseThrow(() -> new InvalidTemplateException(
- SECTION_CLASS_NAME,
- templatedGenerator.templatePath(),
- "No CompilationUnit"));
+ CompilationUnit compilationUnit = templatedGenerator.compilationUnitOrThrow("No CompilationUnit");
- if (annotator == null) {
+ if (!buildContext.hasDI()) {
// only in a non DI context
compilationUnit.findFirst(MethodDeclaration.class, m -> m.getNameAsString().equals("create"))
.ifPresent(m -> m.setBody(factoryByIdBody())); // ignore if missing
@@ -100,14 +95,4 @@ public CompilationUnit compilationUnit() {
return compilationUnit;
}
-
- public RuleUnitContainerGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- this.templatedGenerator.withDependencyInjection(annotator);
- return this;
- }
-
- List getRuleUnits() {
- return ruleUnits;
- }
}
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitGenerator.java
index 60a36c48972..7359fb434bf 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/RuleUnitGenerator.java
@@ -37,7 +37,7 @@
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.ApplicationGenerator;
import org.kie.kogito.codegen.FileGenerator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.conf.ClockType;
import org.kie.kogito.conf.EventProcessingType;
import org.kie.kogito.rules.RuleUnit;
@@ -59,20 +59,21 @@ public class RuleUnitGenerator implements FileGenerator {
private final String packageName;
private final String typeName;
private final String generatedSourceFile;
+ private KogitoBuildContext buildContext;
private final String generatedFilePath;
private final String targetCanonicalName;
private RuleUnitConfig config;
private String targetTypeName;
- private DependencyInjectionAnnotator annotator;
private Collection queries;
private String applicationPackageName;
private AddonsConfig addonsConfig = AddonsConfig.DEFAULT;
- public RuleUnitGenerator(RuleUnitDescription ruleUnit, String generatedSourceFile) {
+ public RuleUnitGenerator(RuleUnitDescription ruleUnit, String generatedSourceFile, KogitoBuildContext buildContext) {
this.ruleUnit = ruleUnit;
this.packageName = ruleUnit.getPackageName();
this.typeName = ruleUnit.getSimpleName();
this.generatedSourceFile = generatedSourceFile;
+ this.buildContext = buildContext;
this.targetTypeName = typeName + "RuleUnit";
this.targetCanonicalName = packageName + "." + targetTypeName;
this.generatedFilePath = targetCanonicalName.replace('.', '/') + ".java";
@@ -95,7 +96,7 @@ public RuleUnitInstanceGenerator instance(RuleUnitHelper ruleUnitHelper, List queries() {
return queries.stream()
.filter(query -> !query.hasParameters())
- .map(query -> new QueryEndpointGenerator(ruleUnit, query, annotator, addonsConfig))
+ .map(query -> new QueryEndpointGenerator(ruleUnit, query, buildContext, addonsConfig))
.collect(toList());
}
@@ -158,10 +159,10 @@ public void classDeclaration(ClassOrInterfaceDeclaration cls) {
.setModifiers(Modifier.Keyword.PUBLIC)
.getExtendedTypes().get(0).setTypeArguments(nodeList(new ClassOrInterfaceType(null, typeName)));
- if (annotator != null) {
- annotator.withSingletonComponent(cls);
+ if (buildContext.hasDI()) {
+ buildContext.getDependencyInjectionAnnotator().withSingletonComponent(cls);
cls.findFirst(ConstructorDeclaration.class, c -> !c.getParameters().isEmpty()) // non-empty constructor
- .ifPresent(annotator::withInjection);
+ .ifPresent(buildContext.getDependencyInjectionAnnotator()::withInjection);
}
String ruleUnitInstanceFQCN = RuleUnitInstanceGenerator.qualifiedName(packageName, typeName);
@@ -215,11 +216,6 @@ private void setClassName(ConstructorDeclaration constructorDeclaration) {
constructorDeclaration.setName(targetTypeName);
}
- public RuleUnitGenerator withDependencyInjection(DependencyInjectionAnnotator annotator) {
- this.annotator = annotator;
- return this;
- }
-
public RuleUnitGenerator withQueries(Collection queries) {
this.queries = queries;
return this;
diff --git a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/config/RuleConfigGenerator.java b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/config/RuleConfigGenerator.java
index 0d24e40accf..cb4b2add284 100644
--- a/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/config/RuleConfigGenerator.java
+++ b/kogito-codegen/src/main/java/org/kie/kogito/codegen/rules/config/RuleConfigGenerator.java
@@ -15,17 +15,16 @@
package org.kie.kogito.codegen.rules.config;
-import org.kie.kogito.codegen.TemplatedGenerator;
+import org.kie.kogito.codegen.AbstractConfigGenerator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
-public class RuleConfigGenerator extends TemplatedGenerator {
+public class RuleConfigGenerator extends AbstractConfigGenerator {
- private static final String RESOURCE_CDI = "/class-templates/config/CdiRuleConfigTemplate.java";
- private static final String RESOURCE_SPRING = "/class-templates/config/SpringRuleConfigTemplate.java";
-
- public RuleConfigGenerator(String packageName) {
- super(packageName,
- "RuleConfig",
- RESOURCE_CDI,
- RESOURCE_SPRING);
+ public RuleConfigGenerator(KogitoBuildContext buildContext, String packageName) {
+ super(buildContext,
+ packageName,
+ "RuleConfig",
+ "/class-templates/config/CdiRuleConfigTemplate.java",
+ "/class-templates/config/SpringRuleConfigTemplate.java");
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/AbstractCodegenTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/AbstractCodegenTest.java
index c72945ed3cf..3113e28d07b 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/AbstractCodegenTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/AbstractCodegenTest.java
@@ -30,11 +30,11 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
import org.kie.memorycompiler.CompilationResult;
import org.kie.memorycompiler.JavaCompiler;
import org.kie.memorycompiler.JavaCompilerFactory;
@@ -78,6 +78,8 @@ protected enum TYPE {
private static final Map, Generator>> generatorTypeMap = new HashMap<>();
+ private KogitoBuildContext buildContext = new JavaKogitoBuildContext(this.getClass().getClassLoader());
+
private static final String DUMMY_PROCESS_RUNTIME =
"package org.drools.project.model;\n" +
"\n" +
@@ -143,10 +145,20 @@ private static List toFiles(List strings, String path) {
.collect(Collectors.toList());
}
- private boolean withSpringContext;
- public void withSpringContext(boolean withSpringContext){
- this.withSpringContext = withSpringContext;
+ public void withSpringContext() {
+ this.buildContext = new SpringBootKogitoBuildContext(className -> true);
+ throw new UnsupportedOperationException("To be fixed KOGITO-4000");
+ }
+
+ public void withQuarkusContext() {
+ this.buildContext = new QuarkusKogitoBuildContext(className -> true);
+ throw new UnsupportedOperationException("To be fixed KOGITO-4000");
+ }
+
+ public void withJavaContext() {
+ this.buildContext = new JavaKogitoBuildContext(className -> true);
+ throw new UnsupportedOperationException("To be fixed KOGITO-4000");
}
protected Application generateCodeProcessesOnly(String... processes) throws Exception {
@@ -174,16 +186,10 @@ protected Application generateCode(Map> resourcesTypeMap) thr
protected Application generateCode(Map> resourcesTypeMap, String packageName) throws Exception {
GeneratorContext context = GeneratorContext.ofResourcePath(new File(TEST_RESOURCES));
- //Testing based on Quarkus as Default
- context.withBuildContext(Optional.ofNullable(withSpringContext)
- .filter(Boolean.TRUE::equals)
- .map(t -> new SpringBootKogitoBuildContext((className -> true)))
- .orElse(new QuarkusKogitoBuildContext((className -> true))));
+ context.withBuildContext(buildContext);
ApplicationGenerator appGen =
- new ApplicationGenerator(packageName, new File("target/codegen-tests"))
- .withGeneratorContext(context)
- .withDependencyInjection(null);
+ new ApplicationGenerator(context, packageName, new File("target/codegen-tests"));
// Hack just to avoid test breaking
Set generatedTypes = new HashSet<>();
@@ -195,7 +201,7 @@ protected Application generateCode(Map> resourcesTypeMap, Str
}
// Hack just to avoid test breaking
if (generatedTypes.contains(TYPE.DECISION) && !generatedTypes.contains(TYPE.PREDICTION)) {
- appGen.setupGenerator(generatorTypeMap.get(TYPE.PREDICTION).apply(Collections.EMPTY_LIST));
+ appGen.setupGenerator(generatorTypeMap.get(TYPE.PREDICTION).apply(Collections.emptyList()));
}
Collection generatedFiles = appGen.generate();
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/ConfigGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/ApplicationConfigGeneratorTest.java
similarity index 57%
rename from kogito-codegen/src/test/java/org/kie/kogito/codegen/ConfigGeneratorTest.java
rename to kogito-codegen/src/test/java/org/kie/kogito/codegen/ApplicationConfigGeneratorTest.java
index 5bcb53720f2..781baf9280b 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/ConfigGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/ApplicationConfigGeneratorTest.java
@@ -21,26 +21,25 @@
import org.kie.kogito.codegen.process.config.ProcessConfigGenerator;
import org.mockito.Mockito;
-import com.github.javaparser.ast.expr.NullLiteralExpr;
-import com.github.javaparser.ast.expr.ObjectCreationExpr;
-
-public class ConfigGeneratorTest {
+public class ApplicationConfigGeneratorTest {
@Test
public void withProcessConfig() {
- final ConfigGenerator generator = new ConfigGenerator("org.kie.kogito.test");
+ final ApplicationConfigGenerator generator = new ApplicationConfigGenerator(null, "org.kie.kogito.test");
final ProcessConfigGenerator processConfigGenerator = Mockito.mock(ProcessConfigGenerator.class);
- final ConfigGenerator returnedConfigGenerator = generator.withProcessConfig(processConfigGenerator);
- assertThat(returnedConfigGenerator).isNotNull();
- assertThat(returnedConfigGenerator).isSameAs(generator);
+ final ApplicationConfigGenerator returnedConfigGenerator = generator.withProcessConfig(processConfigGenerator);
+ assertThat(returnedConfigGenerator)
+ .isNotNull()
+ .isSameAs(generator);
}
@Test
public void withProcessConfigNull() {
- final ConfigGenerator generator = new ConfigGenerator("org.kie.kogito.test");
- final ConfigGenerator returnedConfigGenerator = generator.withProcessConfig(null);
- assertThat(returnedConfigGenerator).isNotNull();
- assertThat(returnedConfigGenerator).isSameAs(generator);
+ final ApplicationConfigGenerator generator = new ApplicationConfigGenerator(null, "org.kie.kogito.test");
+ final ApplicationConfigGenerator returnedConfigGenerator = generator.withProcessConfig(null);
+ assertThat(returnedConfigGenerator)
+ .isNotNull()
+ .isSameAs(generator);
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/ApplicationGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/ApplicationGeneratorTest.java
index 9f5154c088d..ac5785a27da 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/ApplicationGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/ApplicationGeneratorTest.java
@@ -36,7 +36,7 @@
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.MethodCallExpr;
import org.junit.jupiter.api.Test;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.metadata.MetaDataWriter;
import org.kie.kogito.codegen.metadata.PrometheusLabeler;
@@ -47,29 +47,32 @@ public class ApplicationGeneratorTest {
private static final String PACKAGE_NAME = "org.drools.test";
private static final String EXPECTED_APPLICATION_NAME = PACKAGE_NAME + ".Application";
+ private static final GeneratorContext context = GeneratorContext.emptyContext();
@Test
public void targetCanonicalName() {
- final ApplicationGenerator appGenerator = new ApplicationGenerator(PACKAGE_NAME, new File(""));
+ final ApplicationGenerator appGenerator = new ApplicationGenerator(context, PACKAGE_NAME, new File(""));
assertThat(appGenerator.targetCanonicalName()).isNotNull();
assertThat(appGenerator.targetCanonicalName()).isEqualTo(EXPECTED_APPLICATION_NAME);
}
@Test
public void packageNameNull() {
- assertThatThrownBy(() -> new ApplicationGenerator(null, new File("")))
+ final File testFile = new File("");
+ assertThatThrownBy(() -> new ApplicationGenerator(context, null, testFile))
.isInstanceOf(IllegalArgumentException.class);
}
@Test
public void packageNameInvalid() {
- assertThatThrownBy(() -> new ApplicationGenerator("i.am.an-invalid.package-name.sorry", new File("")))
+ final File testFile = new File("");
+ assertThatThrownBy(() -> new ApplicationGenerator(context, "i.am.an-invalid.package-name.sorry", testFile))
.isInstanceOf(IllegalArgumentException.class);
}
@Test
public void generatedFilePath() {
- final ApplicationGenerator appGenerator = new ApplicationGenerator(PACKAGE_NAME, new File(""));
+ final ApplicationGenerator appGenerator = new ApplicationGenerator(context, PACKAGE_NAME, new File(""));
String path = appGenerator.generateApplicationDescriptor().relativePath();
assertThat(path).isNotNull();
assertThat(path).isEqualTo(EXPECTED_APPLICATION_NAME.replace(".", "/") + ".java");
@@ -77,21 +80,21 @@ public void generatedFilePath() {
@Test
public void compilationUnit() {
- final ApplicationContainerGenerator appGenerator = new ApplicationContainerGenerator(PACKAGE_NAME);
+ final ApplicationContainerGenerator appGenerator = new ApplicationContainerGenerator(context.getBuildContext(), PACKAGE_NAME);
assertCompilationUnit(appGenerator.getCompilationUnitOrThrow(), false);
}
@Test
public void compilationUnitWithCDI() {
- final ApplicationContainerGenerator appGenerator = new ApplicationContainerGenerator(PACKAGE_NAME);
- appGenerator.withDependencyInjection(new CDIDependencyInjectionAnnotator());
+ final ApplicationContainerGenerator appGenerator = new ApplicationContainerGenerator(new QuarkusKogitoBuildContext(s -> false), PACKAGE_NAME);
assertCompilationUnit(appGenerator.getCompilationUnitOrThrow(), true);
}
@Test
public void generateWithMonitoring() throws IOException {
final Path targetDirectory = Paths.get("target");
- final ApplicationGenerator appGenerator = new ApplicationGenerator(PACKAGE_NAME, targetDirectory.toFile()).withAddons(new AddonsConfig().withPrometheusMonitoring(true));
+ final ApplicationGenerator appGenerator = new ApplicationGenerator(context, PACKAGE_NAME, targetDirectory.toFile())
+ .withAddons(new AddonsConfig().withPrometheusMonitoring(true));
appGenerator.generate();
assertImageMetadata(targetDirectory, new PrometheusLabeler().generateLabels());
}
@@ -99,7 +102,7 @@ public void generateWithMonitoring() throws IOException {
@Test
public void writeLabelsImageMetadata() throws IOException {
final Path targetDirectory = Paths.get("target");
- final ApplicationGenerator appGenerator = new ApplicationGenerator(PACKAGE_NAME, targetDirectory.toFile());
+ final ApplicationGenerator appGenerator = new ApplicationGenerator(context, PACKAGE_NAME, targetDirectory.toFile());
final Map labels = new HashMap<>();
labels.put("testKey1", "testValue1");
@@ -112,7 +115,7 @@ public void writeLabelsImageMetadata() throws IOException {
@Test
public void applicationSectionReplace() {
- final ApplicationContainerGenerator appGenerator = new ApplicationContainerGenerator(PACKAGE_NAME);
+ final ApplicationContainerGenerator appGenerator = new ApplicationContainerGenerator(context.getBuildContext(), PACKAGE_NAME);
assertApplicationPlaceholderReplace(appGenerator, 0);
appGenerator.withSections(Arrays.asList("Processes", "DecisionModels"));
@@ -179,10 +182,9 @@ private void assertGeneratedFiles(final Collection generatedFiles
}
private void assertApplicationPlaceholderReplace(ApplicationContainerGenerator appGenerator, long expectedParams) {
- Optional compilationUnit = appGenerator.compilationUnit();
- assertThat(compilationUnit).isPresent();
+ CompilationUnit compilationUnit = appGenerator.getCompilationUnitOrThrow();
- Optional> expressions = compilationUnit.get().findFirst(MethodCallExpr.class, mtd -> "loadEngines".equals(mtd.getNameAsString()))
+ Optional> expressions = compilationUnit.findFirst(MethodCallExpr.class, mtd -> "loadEngines".equals(mtd.getNameAsString()))
.map(MethodCallExpr::getArguments);
assertThat(expressions).isPresent();
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java
index c0811fe9127..61100e9737f 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java
@@ -33,20 +33,18 @@
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.kie.dmn.feel.codegen.feel11.CodegenStringUtil;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import org.kie.pmml.commons.model.KiePMMLModel;
import static com.github.javaparser.StaticJavaParser.parse;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static org.kie.kogito.codegen.prediction.PMMLRestResourceGenerator.CDI_TEMPLATE;
import static org.kie.pmml.commons.utils.KiePMMLModelUtils.getSanitizedClassName;
-import static org.mockito.Mockito.mock;
class PMMLRestResourceGeneratorTest {
@@ -54,10 +52,12 @@ class PMMLRestResourceGeneratorTest {
private final static KiePMMLModel KIE_PMML_MODEL = getKiePMMLModelInternal();
private static PMMLRestResourceGenerator pmmlRestResourceGenerator;
private static ClassOrInterfaceDeclaration template = getClassOrInterfaceDeclaration();
+ private static KogitoBuildContext buildContext;
@BeforeAll
public static void setup() {
- pmmlRestResourceGenerator = new PMMLRestResourceGenerator(KIE_PMML_MODEL, APP_CANONICAL_NAME);
+ buildContext = new JavaKogitoBuildContext();
+ pmmlRestResourceGenerator = new PMMLRestResourceGenerator(buildContext, KIE_PMML_MODEL, APP_CANONICAL_NAME);
assertNotNull(pmmlRestResourceGenerator);
}
@@ -89,7 +89,8 @@ void constructor() {
@Test
void generateWithDependencyInjection() {
- String retrieved = pmmlRestResourceGenerator.withDependencyInjection(new CDIDependencyInjectionAnnotator()).generate();
+ buildContext.setDependencyInjectionAnnotator(new CDIDependencyInjectionAnnotator());
+ String retrieved = pmmlRestResourceGenerator.generate();
commonEvaluateGenerate(retrieved);
String expected = "Application application;";
assertTrue(retrieved.contains(expected));
@@ -97,7 +98,8 @@ void generateWithDependencyInjection() {
@Test
void generateWithoutDependencyInjection() {
- String retrieved = pmmlRestResourceGenerator.withDependencyInjection(null).generate();
+ buildContext.setDependencyInjectionAnnotator(null);
+ String retrieved = pmmlRestResourceGenerator.generate();
commonEvaluateGenerate(retrieved);
String expected = String.format("Application application = new %s();", APP_CANONICAL_NAME);
assertTrue(retrieved.contains(expected));
@@ -115,16 +117,6 @@ void getKiePMMLModel() {
assertEquals(KIE_PMML_MODEL, pmmlRestResourceGenerator.getKiePMMLModel());
}
- @Test
- void withDependencyInjection() {
- assertNull(pmmlRestResourceGenerator.annotator);
- DependencyInjectionAnnotator dependencyInjectionAnnotator = mock(DependencyInjectionAnnotator.class);
- PMMLRestResourceGenerator retrieved =
- pmmlRestResourceGenerator.withDependencyInjection(dependencyInjectionAnnotator);
- assertEquals(pmmlRestResourceGenerator, retrieved);
- assertEquals(dependencyInjectionAnnotator, pmmlRestResourceGenerator.annotator);
- }
-
@Test
void className() {
String classPrefix = getSanitizedClassName(KIE_PMML_MODEL.getName());
@@ -141,14 +133,6 @@ void generatedFilePath() {
assertTrue(retrieved.endsWith(expected));
}
- @Test
- void useInjection() {
- pmmlRestResourceGenerator.withDependencyInjection(null);
- assertFalse(pmmlRestResourceGenerator.useInjection());
- pmmlRestResourceGenerator.withDependencyInjection(mock(DependencyInjectionAnnotator.class));
- assertTrue(pmmlRestResourceGenerator.useInjection());
- }
-
@Test
void setPathValue() {
final Optional retrievedOpt = template.findFirst(SingleMemberAnnotationExpr.class);
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PredictionContainerGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PredictionContainerGeneratorTest.java
index c480dce1c8f..d10011e829f 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PredictionContainerGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/PredictionContainerGeneratorTest.java
@@ -50,7 +50,8 @@ class PredictionContainerGeneratorTest {
@BeforeAll
public static void setup() {
- predictionContainerGenerator = new PredictionModelsGenerator(ApplicationGenerator.DEFAULT_PACKAGE_NAME,
+ predictionContainerGenerator = new PredictionModelsGenerator(
+ null, ApplicationGenerator.DEFAULT_PACKAGE_NAME,
APP_CANONICAL_NAME,
PMML_RESOURCES);
assertNotNull(predictionContainerGenerator);
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGeneratorTest.java
index 9cb6158b9cc..6cd46bf41a4 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/prediction/config/PredictionConfigGeneratorTest.java
@@ -17,15 +17,13 @@
import java.util.List;
import java.util.Optional;
-import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.BodyDeclaration;
-import com.github.javaparser.ast.expr.ObjectCreationExpr;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.SpringDependencyInjectionAnnotator;
+import org.kie.kogito.codegen.GeneratedFile;
+import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
+import org.kie.kogito.codegen.context.SpringBootKogitoBuildContext;
-import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -33,20 +31,14 @@
class PredictionConfigGeneratorTest {
private final static String PACKAGE_NAME = "PACKAGENAME";
- private static PredictionConfigGenerator predictionConfigGenerator;
-
- @BeforeAll
- public static void setup() {
- predictionConfigGenerator = new PredictionConfigGenerator(PACKAGE_NAME);
- assertNotNull(predictionConfigGenerator);
- }
@Test
void compilationUnitWithCDI() {
- predictionConfigGenerator.withDependencyInjection(new CDIDependencyInjectionAnnotator());
- final Optional retrievedOpt = predictionConfigGenerator.compilationUnit();
+ PredictionConfigGenerator predictionConfigGenerator = new PredictionConfigGenerator(new QuarkusKogitoBuildContext(s -> false), PACKAGE_NAME);
+ Optional retrievedOpt = predictionConfigGenerator.generate();
+ assertNotNull(retrievedOpt);
assertTrue(retrievedOpt.isPresent());
- String retrieved = retrievedOpt.get().toString();
+ String retrieved = new String(retrievedOpt.get().contents());
String expected = "@javax.inject.Singleton";
assertTrue(retrieved.contains(expected));
expected = "@javax.inject.Inject";
@@ -59,10 +51,11 @@ void compilationUnitWithCDI() {
@Test
void compilationUnitWithSpring() {
- predictionConfigGenerator.withDependencyInjection(new SpringDependencyInjectionAnnotator());
- final Optional retrievedOpt = predictionConfigGenerator.compilationUnit();
+ PredictionConfigGenerator predictionConfigGenerator = new PredictionConfigGenerator(new SpringBootKogitoBuildContext(s -> false), PACKAGE_NAME);
+ Optional retrievedOpt = predictionConfigGenerator.generate();
+ assertNotNull(retrievedOpt);
assertTrue(retrievedOpt.isPresent());
- String retrieved = retrievedOpt.get().toString();
+ String retrieved = new String(retrievedOpt.get().contents());
String expected = "@org.springframework.stereotype.Component";
assertTrue(retrieved.contains(expected));
expected = "@org.springframework.beans.factory.annotation.Autowired";
@@ -73,15 +66,9 @@ void compilationUnitWithSpring() {
assertFalse(retrieved.contains(unexpected));
}
- @Test
- void newInstance() {
- ObjectCreationExpr retrieved = predictionConfigGenerator.newInstance();
- String expected = "new org.kie.kogito.pmml.config.StaticPredictionConfig()";
- assertEquals(expected, retrieved.toString());
- }
-
@Test
void members() {
+ PredictionConfigGenerator predictionConfigGenerator = new PredictionConfigGenerator(new QuarkusKogitoBuildContext(s -> false), PACKAGE_NAME);
List> retrieved = predictionConfigGenerator.members();
assertNotNull(retrieved);
assertTrue(retrieved.isEmpty());
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGeneratorTest.java
index 6095df6145c..54291392019 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsMessageProducerGeneratorTest.java
@@ -20,8 +20,8 @@
import org.assertj.core.api.Assertions;
import org.jbpm.compiler.canonical.TriggerMetaData;
import org.junit.jupiter.api.Test;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.process.MessageDataEventGenerator;
import org.kie.kogito.codegen.process.MessageProducerGenerator;
import org.kie.kogito.codegen.process.ProcessExecutableModelGenerator;
@@ -33,7 +33,7 @@ class CloudEventsMessageProducerGeneratorTest {
void verifyKnativeAddonProcessing() {
final List models =
ProcessGenerationUtils.execModelFromProcessFile("/messageevent/IntermediateThrowEventMessage.bpmn2");
- final DependencyInjectionAnnotator annotator = new CDIDependencyInjectionAnnotator();
+ final KogitoBuildContext buildContext = new QuarkusKogitoBuildContext(s -> true);
Assertions.assertThat(models).isNotEmpty();
models.forEach(m -> {
final TriggerMetaData metaData = m.generate().getTriggers()
@@ -42,10 +42,9 @@ void verifyKnativeAddonProcessing() {
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("Process does not contains any message producers"));
final MessageDataEventGenerator msgDataEventGenerator =
- new MessageDataEventGenerator(m.process(), metaData).withDependencyInjection(annotator);
+ new MessageDataEventGenerator(m.process(), metaData);
final MessageProducerGenerator gen =
- new CloudEventsMessageProducerGenerator(m.process(), "", "", msgDataEventGenerator.className(), metaData)
- .withDependencyInjection(annotator);
+ new CloudEventsMessageProducerGenerator(buildContext, m.process(), "", "", msgDataEventGenerator.className(), metaData);
final String code = gen.generate();
Assertions.assertThat(code).isNotBlank();
Assertions.assertThat(code).contains("decorator.get().decorate");
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGeneratorTest.java
index c13e8082c52..19615a9f1e1 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/CloudEventsResourceGeneratorTest.java
@@ -26,9 +26,9 @@
import com.github.javaparser.ast.ImportDeclaration;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import org.junit.jupiter.api.Test;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.ApplicationGenerator;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -37,11 +37,11 @@
class CloudEventsResourceGeneratorTest {
- private final DependencyInjectionAnnotator annotator = new CDIDependencyInjectionAnnotator();
+ private final KogitoBuildContext buildContext = new QuarkusKogitoBuildContext(s -> true);
@Test
void verifyBasicGenerationCase() {
- final String sourceCode = new CloudEventsResourceGenerator(ApplicationGenerator.DEFAULT_PACKAGE_NAME, Collections.emptyList(), annotator).generate();
+ final String sourceCode = new CloudEventsResourceGenerator(buildContext, ApplicationGenerator.DEFAULT_PACKAGE_NAME, Collections.emptyList()).generate();
assertNotNull(sourceCode);
final CompilationUnit clazz = StaticJavaParser.parse(sourceCode);
assertNotNull(clazz);
@@ -52,16 +52,16 @@ void verifyBasicGenerationCase() {
@Test
void generatedFilePath() throws URISyntaxException {
- final String filePath = new CloudEventsResourceGenerator(ApplicationGenerator.DEFAULT_PACKAGE_NAME, Collections.emptyList(), annotator).generatedFilePath();
+ final String filePath = new CloudEventsResourceGenerator(buildContext, ApplicationGenerator.DEFAULT_PACKAGE_NAME, Collections.emptyList()).generatedFilePath();
assertThat(new URI(filePath).toString()).endsWith(".java");
}
@Test
void verifyProcessWithIntermediateEvent() {
final CloudEventsResourceGenerator generator = new CloudEventsResourceGenerator(
+ buildContext,
ApplicationGenerator.DEFAULT_PACKAGE_NAME,
- execModelFromProcessFile("/messageevent/IntermediateCatchEventMessage.bpmn2"),
- annotator);
+ execModelFromProcessFile("/messageevent/IntermediateCatchEventMessage.bpmn2"));
final String source = generator.generate();
assertThat(source).isNotNull();
assertThat(generator.getTriggers()).hasSize(1);
@@ -81,7 +81,7 @@ void verifyProcessWithIntermediateEvent() {
@Test
void verifyEmitterVariableNameGen() {
- final CloudEventsResourceGenerator generator = new CloudEventsResourceGenerator(ApplicationGenerator.DEFAULT_PACKAGE_NAME, Collections.emptyList(), annotator);
+ final CloudEventsResourceGenerator generator = new CloudEventsResourceGenerator(buildContext, ApplicationGenerator.DEFAULT_PACKAGE_NAME, Collections.emptyList());
final Map tableTest = new HashMap<>();
tableTest.put("http://github.com/me/myrepo", EMITTER_PREFIX + "httpgithubcommemyrepo");
tableTest.put("$%@1234whatever123", EMITTER_PREFIX + "1234whatever123");
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGeneratorTest.java
index 2685945e5a4..d1860316a84 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/events/TopicsInformationResourceGeneratorTest.java
@@ -26,8 +26,9 @@
import org.junit.jupiter.api.Test;
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.ApplicationGenerator;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
+import org.kie.kogito.codegen.context.KogitoBuildContext;
+import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.process.ProcessGenerationUtils;
import org.kie.kogito.event.EventKind;
@@ -103,15 +104,15 @@ void verifyProcessWithoutMessageEvent() {
}
private ClassOrInterfaceDeclaration generateAndParseClass(String bpmnFile, int expectedTriggers, boolean withInjection) {
- DependencyInjectionAnnotator annotator = null;
+ KogitoBuildContext buildContext = new JavaKogitoBuildContext();
if (withInjection) {
- annotator = new CDIDependencyInjectionAnnotator();
+ buildContext = new QuarkusKogitoBuildContext(s -> true);
}
final TopicsInformationResourceGenerator generator =
new TopicsInformationResourceGenerator(
+ buildContext,
ApplicationGenerator.DEFAULT_PACKAGE_NAME,
ProcessGenerationUtils.execModelFromProcessFile(bpmnFile),
- annotator,
AddonsConfig.DEFAULT.withCloudEvents(true));
if (expectedTriggers > 0) {
assertThat(generator.getTriggers()).isNotEmpty();
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/persistence/MongoDBPersistenceGeneratorTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/persistence/MongoDBPersistenceGeneratorTest.java
index 3a535a538e1..da0181aea3b 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/persistence/MongoDBPersistenceGeneratorTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/process/persistence/MongoDBPersistenceGeneratorTest.java
@@ -35,7 +35,6 @@
import org.kie.kogito.codegen.GeneratorContext;
import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.data.Person;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
import static com.github.javaparser.StaticJavaParser.parse;
import static org.assertj.core.api.Assertions.assertThat;
@@ -52,11 +51,16 @@ class MongoDBPersistenceGeneratorTest {
@Test
void test() {
context.withBuildContext(new QuarkusKogitoBuildContext((className -> true)));
- PersistenceGenerator persistenceGenerator = new PersistenceGenerator(targetDirectory.toFile(), Collections.singleton(Person.class), true, null, null, Arrays.asList("com.mongodb.client.MongoClient"), "mongodb");
+ PersistenceGenerator persistenceGenerator = new PersistenceGenerator(
+ targetDirectory.toFile(),
+ Collections.singleton(Person.class),
+ true,
+ null,
+ null,
+ Arrays.asList("com.mongodb.client.MongoClient"),
+ "mongodb");
persistenceGenerator.setPackageName(this.getClass().getPackage().getName());
- persistenceGenerator.setDependencyInjection(null);
persistenceGenerator.setContext(context);
- persistenceGenerator.setDependencyInjection(new CDIDependencyInjectionAnnotator());
Collection generatedFiles = persistenceGenerator.generate();
Optional generatedCLASSFile = generatedFiles.stream().filter(gf -> gf.getType() == GeneratedFile.Type.CLASS).findFirst();
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegenTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegenTest.java
index c0534f22e48..71a85cc9140 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegenTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/rules/IncrementalRuleCodegenTest.java
@@ -26,6 +26,7 @@
import org.kie.api.internal.utils.ServiceRegistry;
import org.kie.kogito.codegen.AddonsConfig;
import org.kie.kogito.codegen.GeneratedFile;
+import org.kie.kogito.codegen.GeneratorContext;
import org.kie.kogito.codegen.io.CollectedResource;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleTaskSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleTaskSpringTest.java
index a09fa859f61..68e5f3cae7c 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleTaskSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleTaskSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.BusinessRuleTaskTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class BusinessRuleTaskSpringTest extends BusinessRuleTaskTest {
public BusinessRuleTaskSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleUnitSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleUnitSpringTest.java
index b2b23ff1fbc..210633d576a 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleUnitSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/BusinessRuleUnitSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.BusinessRuleUnitTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class BusinessRuleUnitSpringTest extends BusinessRuleUnitTest {
public BusinessRuleUnitSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/CallActivityTaskSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/CallActivityTaskSpringTest.java
index de1e0fe9d84..8159d473ccd 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/CallActivityTaskSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/CallActivityTaskSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.CallActivityTaskTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class CallActivityTaskSpringTest extends CallActivityTaskTest {
public CallActivityTaskSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EmbeddedSubProcessSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EmbeddedSubProcessSpringTest.java
index c31e1de122e..4f5eb3c7169 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EmbeddedSubProcessSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EmbeddedSubProcessSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.EmbeddedSubProcessTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class EmbeddedSubProcessSpringTest extends EmbeddedSubProcessTest {
public EmbeddedSubProcessSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EventSubProcessSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EventSubProcessSpringTest.java
index fd384395225..3777b437acb 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EventSubProcessSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/EventSubProcessSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.EventSubProcessTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class EventSubProcessSpringTest extends EventSubProcessTest {
public EventSubProcessSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/GatewaySpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/GatewaySpringTest.java
index a446058afed..afd6cab4936 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/GatewaySpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/GatewaySpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.GatewayTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class GatewaySpringTest extends GatewayTest {
public GatewaySpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/InvalidProcessSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/InvalidProcessSpringTest.java
index 2a2d9c75502..e622c4f79bd 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/InvalidProcessSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/InvalidProcessSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.InvalidProcessTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class InvalidProcessSpringTest extends InvalidProcessTest {
public InvalidProcessSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageIntermediateEventSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageIntermediateEventSpringTest.java
index 246f94c99b2..986ecf50a33 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageIntermediateEventSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageIntermediateEventSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.MessageIntermediateEventTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class MessageIntermediateEventSpringTest extends MessageIntermediateEventTest {
public MessageIntermediateEventSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageStartEventSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageStartEventSpringTest.java
index 0701b933368..c6cd9ec9d3c 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageStartEventSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/MessageStartEventSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.MessageStartEventTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class MessageStartEventSpringTest extends MessageStartEventTest {
public MessageStartEventSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/PublishEventSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/PublishEventSpringTest.java
index 36dc6544e97..cc8dc045c8d 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/PublishEventSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/PublishEventSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.PublishEventTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class PublishEventSpringTest extends PublishEventTest {
public PublishEventSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/ServiceTaskSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/ServiceTaskSpringTest.java
index 19368534b07..839439cd71a 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/ServiceTaskSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/ServiceTaskSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.ServiceTaskTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class ServiceTaskSpringTest extends ServiceTaskTest {
public ServiceTaskSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/SignalEventSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/SignalEventSpringTest.java
index 0b395f187b5..0422dda05af 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/SignalEventSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/SignalEventSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.SignalEventTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class SignalEventSpringTest extends SignalEventTest {
public SignalEventSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/TimerEventSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/TimerEventSpringTest.java
index a28fefda1c3..f9d318ebddc 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/TimerEventSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/TimerEventSpringTest.java
@@ -19,10 +19,10 @@
import org.junit.jupiter.api.Disabled;
import org.kie.kogito.codegen.tests.TimerEventTest;
-@Disabled
+@Disabled("KOGITO-4000")
public class TimerEventSpringTest extends TimerEventTest {
public TimerEventSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
}
diff --git a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/UserTaskSpringTest.java b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/UserTaskSpringTest.java
index 544aadb74b7..f0a345b2ac5 100644
--- a/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/UserTaskSpringTest.java
+++ b/kogito-codegen/src/test/java/org/kie/kogito/codegen/tests/spring/UserTaskSpringTest.java
@@ -23,11 +23,11 @@
import org.kie.kogito.codegen.tests.UserTaskTest;
import org.springframework.web.bind.annotation.PostMapping;
-@Disabled
+@Disabled("KOGITO-4000")
public class UserTaskSpringTest extends UserTaskTest {
public UserTaskSpringTest() {
- withSpringContext(true);
+ withSpringContext();
}
private class Dummy {
diff --git a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java
index 3f2af187217..ee340438e9e 100644
--- a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java
+++ b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java
@@ -24,12 +24,10 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.project.MavenProject;
+import org.kie.kogito.codegen.context.JavaKogitoBuildContext;
import org.kie.kogito.codegen.context.KogitoBuildContext;
import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.context.SpringBootKogitoBuildContext;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.SpringDependencyInjectionAnnotator;
public abstract class AbstractKieMojo extends AbstractMojo {
@@ -44,19 +42,11 @@ protected void setSystemProperties(Map properties) {
}
}
- protected DependencyInjectionAnnotator discoverDependencyInjectionAnnotator(MavenProject project) {
- switch (discoverFramework(project)) {
- case QUARKUS: return new CDIDependencyInjectionAnnotator();
- case SPRING: return new SpringDependencyInjectionAnnotator();
- default: return null;
- }
- }
-
protected KogitoBuildContext discoverKogitoRuntimeContext(MavenProject project) {
switch (discoverFramework(project)) {
case QUARKUS: return new QuarkusKogitoBuildContext(fqcn -> hasClassOnClasspath(project, fqcn));
case SPRING: return new SpringBootKogitoBuildContext(fqcn -> hasClassOnClasspath(project, fqcn));
- default: return null;
+ default: return new JavaKogitoBuildContext(fqcn -> hasClassOnClasspath(project, fqcn));
}
}
diff --git a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateDeclaredTypes.java b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateDeclaredTypes.java
index ea6f3fecf5d..f843613a6c4 100644
--- a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateDeclaredTypes.java
+++ b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateDeclaredTypes.java
@@ -155,10 +155,8 @@ private ApplicationGenerator createApplicationGenerator(
context.withBuildContext(discoverKogitoRuntimeContext(project));
ApplicationGenerator appGen =
- new ApplicationGenerator(appPackageName, targetDirectory)
- .withDependencyInjection(discoverDependencyInjectionAnnotator(project))
- .withClassLoader(projectClassLoader)
- .withGeneratorContext(context);
+ new ApplicationGenerator(context, appPackageName, targetDirectory)
+ .withClassLoader(projectClassLoader);
if (generateRuleUnits) {
appGen.setupGenerator(DeclaredTypeCodegen.ofPath(kieSourcesDirectory.toPath()))
diff --git a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java
index 6bba56ac894..a3c68dc7cf3 100644
--- a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java
+++ b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java
@@ -50,7 +50,6 @@
import org.kie.kogito.codegen.GeneratorContext;
import org.kie.kogito.codegen.DashboardGeneratedFileUtils;
import org.kie.kogito.codegen.decision.DecisionCodegen;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import org.kie.kogito.codegen.io.CollectedResource;
import org.kie.kogito.codegen.prediction.PredictionCodegen;
import org.kie.kogito.codegen.process.ProcessCodegen;
@@ -242,7 +241,6 @@ private ApplicationGenerator createApplicationGenerator() throws IOException, Mo
boolean useTracing = hasClassOnClasspath(project, "org.kie.kogito.tracing.decision.DecisionTracingListener");
boolean useKnativeEventing = hasClassOnClasspath(project, "org.kie.kogito.events.knative.ce.extensions.KogitoProcessExtension");
boolean useCloudEvents = hasClassOnClasspath(project, "org.kie.kogito.addon.cloudevents.AbstractTopicDiscovery");
- DependencyInjectionAnnotator dependencyInjectionAnnotator = discoverDependencyInjectionAnnotator(project);
AddonsConfig addonsConfig = new AddonsConfig()
.withPersistence(usePersistence)
@@ -261,11 +259,9 @@ private ApplicationGenerator createApplicationGenerator() throws IOException, Mo
context.withBuildContext(discoverKogitoRuntimeContext(project));
ApplicationGenerator appGen =
- new ApplicationGenerator(appPackageName, targetDirectory)
- .withDependencyInjection(dependencyInjectionAnnotator)
+ new ApplicationGenerator(context, appPackageName, targetDirectory)
.withAddons(addonsConfig)
- .withClassLoader(projectClassLoader)
- .withGeneratorContext(context);
+ .withClassLoader(projectClassLoader);
// if unspecified, then default to checking for file type existence
// if not null, the property has been overridden, and we should use the specified value
diff --git a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java
index c87da138f11..15a8468bcd5 100644
--- a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java
+++ b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java
@@ -15,7 +15,6 @@
package org.kie.kogito.maven.plugin;
-
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
@@ -121,7 +120,6 @@ public void execute() throws MojoExecutionException {
String persistenceType = context.getApplicationProperty("kogito.persistence.type").orElse(PersistenceGenerator.DEFAULT_PERSISTENCE_TYPE);
PersistenceGenerator persistenceGenerator = new PersistenceGenerator(new File(project.getBuild().getDirectory()), modelClasses, !classes.isEmpty(), new ReflectionProtoGenerator(), cl, parameters, persistenceType);
persistenceGenerator.setPackageName(appPackageName);
- persistenceGenerator.setDependencyInjection(discoverDependencyInjectionAnnotator(project));
persistenceGenerator.setContext(context);
Collection generatedFiles = persistenceGenerator.generate();
generatedFiles = generatedFiles.stream().filter(x -> x.getType().equals(GeneratedFile.Type.CLASS)).collect(Collectors.toList());
diff --git a/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoAssetsProcessor.java b/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoAssetsProcessor.java
index 66984913153..d83f8f43ecd 100644
--- a/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoAssetsProcessor.java
+++ b/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoAssetsProcessor.java
@@ -76,8 +76,6 @@
import org.kie.kogito.codegen.JsonSchemaGenerator;
import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
import org.kie.kogito.codegen.decision.DecisionCodegen;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
-import org.kie.kogito.codegen.di.DependencyInjectionAnnotator;
import org.kie.kogito.codegen.io.CollectedResource;
import org.kie.kogito.codegen.prediction.PredictionCodegen;
import org.kie.kogito.codegen.process.ProcessCodegen;
@@ -169,8 +167,6 @@ public void generateModel(
boolean useCloudEvents = combinedIndexBuildItem.getIndex().getClassByName(quarkusCloudEvents) != null;
boolean useProcessSVG = combinedIndexBuildItem.getIndex().getClassByName(quarkusSVGService) != null;
- DependencyInjectionAnnotator dependencyInjectionAnnotator = new CDIDependencyInjectionAnnotator();
-
AddonsConfig addonsConfig = new AddonsConfig()
.withPersistence(usePersistence)
.withMonitoring(useMonitoring)
@@ -188,11 +184,10 @@ public void generateModel(
ApplicationGenerator appGen =
new ApplicationGenerator(
+ context,
appPackageName,
new File(appPaths.getFirstProjectPath().toFile(), "target"))
- .withDependencyInjection(dependencyInjectionAnnotator)
- .withAddons(addonsConfig)
- .withGeneratorContext(context);
+ .withAddons(addonsConfig);
// configure each individual generator. Ordering is relevant.
@@ -413,7 +408,6 @@ private PersistenceGenerator makePersistenceGenerator(
jandexProtoGenerator,
parameters,
persistenceType);
- persistenceGenerator.setDependencyInjection(new CDIDependencyInjectionAnnotator());
persistenceGenerator.setPackageName(appPackageName);
persistenceGenerator.setContext(context);
return persistenceGenerator;
diff --git a/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoCompilationProvider.java b/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoCompilationProvider.java
index d929bdf8ad3..41dc4935f80 100644
--- a/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoCompilationProvider.java
+++ b/kogito-quarkus-extension/deployment/src/main/java/org/kie/kogito/quarkus/deployment/KogitoCompilationProvider.java
@@ -38,7 +38,6 @@
import org.kie.kogito.codegen.Generator;
import org.kie.kogito.codegen.GeneratorContext;
import org.kie.kogito.codegen.context.QuarkusKogitoBuildContext;
-import org.kie.kogito.codegen.di.CDIDependencyInjectionAnnotator;
public abstract class KogitoCompilationProvider extends JavaCompilationProvider {
@@ -66,9 +65,7 @@ public final void compile(Set filesToCompile, Context context) {
generationContext
.withBuildContext(new QuarkusKogitoBuildContext(className -> hasClassOnClasspath(cl, className)));
- ApplicationGenerator appGen = new ApplicationGenerator(appPackageName, outputDirectory)
- .withDependencyInjection(new CDIDependencyInjectionAnnotator())
- .withGeneratorContext(generationContext);
+ ApplicationGenerator appGen = new ApplicationGenerator(generationContext, appPackageName, outputDirectory);
addGenerator(appGen, filesToCompile, context, cl);