This is an automated email from the ASF dual-hosted git repository.

gitgabrio pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new 0691bcac71 [incubator-kie-issues#1891] Add kie-dmn-efesto 
dependencies.  (#3896)
0691bcac71 is described below

commit 0691bcac718ad91c132277fa2830186e6eb69e6d
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Tue May 20 12:05:18 2025 +0200

    [incubator-kie-issues#1891] Add kie-dmn-efesto dependencies.  (#3896)
    
    * [incubator-kie-issues#1891] Add kie-dmn-efesto dependencies. Remove 
override of KogitoDMNScenarioRunner.java
    
    * [incubator-kie-issues#1891] Add kie-dmn-efesto dependencies. Remove 
override of KogitoDMNScenarioRunner.java
    
    * [incubator-kie-issues#1891] Managing set of DMN resources
    
    * [incubator-kie-issues#1891] Refactoring DevMojoIT
    
    * [incubator-kie-issues#1891] experiment refactoring DevMojoIT
    
    * [incubator-kie-issues#1891] Disabling DevMojoIT
    
    * [incubator-kie-issues#1891] Fixing IndexFile discovery
    
    ---------
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 drools/kogito-scenario-simulation/pom.xml          |  12 +-
 .../runner/KogitoDMNScenarioRunner.java            |  52 ---
 .../runner/KogitoDMNScenarioRunnerHelper.java      | 114 -------
 .../runner/KogitoJunitActivator.java               |  11 +-
 .../test/resources/dmnPmml/KiePMMLTreeTest.scesim  |   2 +-
 kogito-build/kogito-kie-bom/pom.xml                |  11 +
 .../kogito-codegen-decisions/pom.xml               |   4 +
 .../kogito/codegen/decision/DecisionCodegen.java   | 252 +++------------
 .../codegen/decision/DecisionCodegenUtils.java     | 355 +++++++++++++++++++++
 ...DecisionCloudEventMetaFactoryGeneratorTest.java |   4 +-
 .../io/quarkus/it/kogito/devmode/DevMojoIT.java    |   5 +
 11 files changed, 429 insertions(+), 393 deletions(-)

diff --git a/drools/kogito-scenario-simulation/pom.xml 
b/drools/kogito-scenario-simulation/pom.xml
index 01f98cde4e..9ec945b918 100644
--- a/drools/kogito-scenario-simulation/pom.xml
+++ b/drools/kogito-scenario-simulation/pom.xml
@@ -61,7 +61,8 @@
         <groupId>org.kie.kogito</groupId>
         <artifactId>kogito-pmml</artifactId>
       </dependency>
-<!--       EFESTO -->
+     <!-- EFESTO -->
+      <!-- DRL -->
       <dependency>
         <groupId>org.kie</groupId>
         <artifactId>kie-drl-compilation-common</artifactId>
@@ -70,6 +71,15 @@
         <groupId>org.kie</groupId>
         <artifactId>kie-drl-map-input-runtime</artifactId>
       </dependency>
+      <!-- DMN -->
+      <dependency>
+        <groupId>org.kie</groupId>
+        <artifactId>kie-dmn-efesto-compilation</artifactId>
+      </dependency>
+      <dependency>
+        <groupId>org.kie</groupId>
+        <artifactId>kie-dmn-efesto-runtime</artifactId>
+      </dependency>
 
 
         <!-- Used indirectly by PMML during compilation of Drools based models 
 -->
diff --git 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunner.java
 
b/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunner.java
deleted file mode 100644
index 66ce7cf92e..0000000000
--- 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunner.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   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.kogito.scenariosimulation.runner;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
-
-import org.drools.scenariosimulation.backend.runner.AbstractRunnerHelper;
-import org.drools.scenariosimulation.backend.runner.DMNScenarioRunner;
-import org.drools.scenariosimulation.backend.runner.model.ScenarioRunnerDTO;
-import org.kie.api.runtime.KieContainer;
-
-public class KogitoDMNScenarioRunner extends DMNScenarioRunner {
-
-    private static final KieContainer mockKieContainer = mockKieContainer();
-
-    public KogitoDMNScenarioRunner(ScenarioRunnerDTO scenarioRunnerDTO) {
-        super(mockKieContainer, scenarioRunnerDTO);
-    }
-
-    @Override
-    protected AbstractRunnerHelper newRunnerHelper() {
-        return new KogitoDMNScenarioRunnerHelper();
-    }
-
-    /**
-     * Temporary hack, it is needed because AbstractScenarioRunner invokes 
kieContainer.getClassLoader() in the constructor
-     * 
-     * @return
-     */
-    private static KieContainer mockKieContainer() {
-        InvocationHandler nullHandler = (o, method, objects) -> null;
-        return (KieContainer) 
Proxy.newProxyInstance(KieContainer.class.getClassLoader(),
-                new Class[] { KieContainer.class }, nullHandler);
-    }
-}
diff --git 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunnerHelper.java
 
b/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunnerHelper.java
deleted file mode 100644
index 2babf30313..0000000000
--- 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunnerHelper.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   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.kogito.scenariosimulation.runner;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Stream;
-
-import org.drools.codegen.common.AppPaths;
-import org.drools.io.FileSystemResource;
-import org.drools.scenariosimulation.api.model.ScenarioSimulationModel;
-import org.drools.scenariosimulation.api.model.ScesimModelDescriptor;
-import org.drools.scenariosimulation.api.model.Settings;
-import 
org.drools.scenariosimulation.backend.expression.ExpressionEvaluatorFactory;
-import org.drools.scenariosimulation.backend.runner.DMNScenarioRunnerHelper;
-import org.drools.scenariosimulation.backend.runner.ScenarioException;
-import org.drools.scenariosimulation.backend.runner.model.ScenarioRunnerData;
-import org.drools.scenariosimulation.backend.util.DMNSimulationUtils;
-import org.kie.api.io.Resource;
-import org.kie.api.runtime.KieContainer;
-import org.kie.dmn.api.core.DMNContext;
-import org.kie.dmn.api.core.DMNModel;
-import org.kie.dmn.api.core.DMNResult;
-import org.kie.dmn.api.core.DMNRuntime;
-import org.kie.dmn.core.internal.utils.DMNRuntimeBuilder;
-
-import static java.util.stream.Collectors.toList;
-import static 
org.drools.scenariosimulation.backend.fluent.DMNScenarioExecutableBuilder.DMN_MODEL;
-import static 
org.drools.scenariosimulation.backend.fluent.DMNScenarioExecutableBuilder.DMN_RESULT;
-
-public class KogitoDMNScenarioRunnerHelper extends DMNScenarioRunnerHelper {
-
-    private DMNRuntime dmnRuntime = initDmnRuntime();
-
-    private static final String targetFolder = File.separator + 
AppPaths.TARGET_DIR + File.separator;
-    private static final String generatedResourcesFolder = targetFolder + 
"generated-resources" + File.separator;
-
-    @Override
-    protected Map<String, Object> executeScenario(KieContainer kieContainer,
-            ScenarioRunnerData scenarioRunnerData,
-            ExpressionEvaluatorFactory expressionEvaluatorFactory,
-            ScesimModelDescriptor scesimModelDescriptor,
-            Settings settings) {
-        if (!ScenarioSimulationModel.Type.DMN.equals(settings.getType())) {
-            throw new ScenarioException("Impossible to run a not-DMN 
simulation with DMN runner");
-        }
-        DMNModel dmnModel = getDMNModel(dmnRuntime, settings);
-        DMNContext dmnContext = dmnRuntime.newContext();
-
-        defineInputValues(scenarioRunnerData.getBackgrounds(), 
scenarioRunnerData.getGivens()).forEach(dmnContext::set);
-
-        DMNResult dmnResult = dmnRuntime.evaluateAll(dmnModel, dmnContext);
-
-        Map<String, Object> toReturn = new HashMap<>();
-        toReturn.put(DMN_MODEL, dmnModel);
-        toReturn.put(DMN_RESULT, dmnResult);
-
-        return toReturn;
-    }
-
-    private DMNModel getDMNModel(DMNRuntime dmnRuntime, Settings settings) {
-        try {
-            return DMNSimulationUtils.extractDMNModel(dmnRuntime, 
settings.getDmnFilePath());
-        } catch (Exception e) {
-            // if filename is not available or it fails, try directly with 
namespace/name
-            return dmnRuntime.getModel(settings.getDmnNamespace(), 
settings.getDmnName());
-        }
-    }
-
-    private DMNRuntime initDmnRuntime() {
-        try (Stream<Path> fileStream = Files.walk(Paths.get("."))) {
-            List<Resource> resources = fileStream.filter(path -> 
filterResource(path, ".dmn"))
-                    .map(Path::toFile)
-                    .map(FileSystemResource::new)
-                    .collect(toList());
-
-            return DMNRuntimeBuilder.fromDefaults()
-                    .buildConfiguration()
-                    .fromResources(resources)
-                    .getOrElseThrow(e -> new RuntimeException("Error 
initializing DMNRuntime", e));
-        } catch (IOException e) {
-            throw new IllegalStateException("Error initializing 
KogitoDMNScenarioRunnerHelper", e);
-        }
-    }
-
-    private boolean filterResource(Path path, String extension) {
-        return path.toString().endsWith(extension) &&
-                (path.toString().contains(generatedResourcesFolder) || 
!(path.toString().contains(targetFolder)))
-                && Files.isRegularFile(path);
-    }
-
-}
diff --git 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoJunitActivator.java
 
b/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoJunitActivator.java
index 9548b22c1e..3235f9d1d8 100644
--- 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoJunitActivator.java
+++ 
b/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoJunitActivator.java
@@ -19,19 +19,12 @@
 package org.kogito.scenariosimulation.runner;
 
 import org.drools.scenariosimulation.backend.runner.ScenarioJunitActivator;
-import org.drools.scenariosimulation.backend.runner.model.ScenarioRunnerDTO;
-import org.junit.runner.notification.RunNotifier;
 import org.junit.runners.model.InitializationError;
 
+@Deprecated(since = "10.2", forRemoval = true)
 public class KogitoJunitActivator extends ScenarioJunitActivator {
 
     public KogitoJunitActivator(Class<?> testClass) throws InitializationError 
{
         super(testClass);
     }
-
-    @Override
-    protected void runChild(ScenarioRunnerDTO child, RunNotifier notifier) {
-        KogitoDMNScenarioRunner scenarioRunner = new 
KogitoDMNScenarioRunner(child);
-        scenarioRunner.run(notifier);
-    }
-}
\ No newline at end of file
+}
diff --git 
a/drools/kogito-scenario-simulation/src/test/resources/dmnPmml/KiePMMLTreeTest.scesim
 
b/drools/kogito-scenario-simulation/src/test/resources/dmnPmml/KiePMMLTreeTest.scesim
index d731a3d8a3..a7d5442f3c 100644
--- 
a/drools/kogito-scenario-simulation/src/test/resources/dmnPmml/KiePMMLTreeTest.scesim
+++ 
b/drools/kogito-scenario-simulation/src/test/resources/dmnPmml/KiePMMLTreeTest.scesim
@@ -275,7 +275,7 @@ under the License.
     </scesimData>
   </background>
   <settings>
-    
<dmnFilePath>src/main/resources/com/myspace/puppa/KiePMMLTree.dmn</dmnFilePath>
+    <dmnFilePath>src/test/resources/dmnPmml/KiePMMLTree.dmn</dmnFilePath>
     <type>DMN</type>
     
<dmnNamespace>https://kiegroup.org/dmn/_FAA4232D-9D61-4089-BB05-5F5D7C1AECE1</dmnNamespace>
     <dmnName>TestTreeDMN</dmnName>
diff --git a/kogito-build/kogito-kie-bom/pom.xml 
b/kogito-build/kogito-kie-bom/pom.xml
index 683003cdcc..0c068c5607 100644
--- a/kogito-build/kogito-kie-bom/pom.xml
+++ b/kogito-build/kogito-kie-bom/pom.xml
@@ -254,6 +254,17 @@
         <artifactId>kie-dmn-openapi</artifactId>
         <version>${version.org.kie}</version>
       </dependency>
+      <!--  Efesto decisions -->
+      <dependency>
+        <groupId>org.kie</groupId>
+        <artifactId>kie-dmn-efesto-compilation</artifactId>
+        <version>${version.org.kie}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.kie</groupId>
+        <artifactId>kie-dmn-efesto-runtime</artifactId>
+        <version>${version.org.kie}</version>
+      </dependency>
 
       <!-- PMML -->
       <dependency>
diff --git a/kogito-codegen-modules/kogito-codegen-decisions/pom.xml 
b/kogito-codegen-modules/kogito-codegen-decisions/pom.xml
index 52b841b01d..d9ff03ab2b 100644
--- a/kogito-codegen-modules/kogito-codegen-decisions/pom.xml
+++ b/kogito-codegen-modules/kogito-codegen-decisions/pom.xml
@@ -71,6 +71,10 @@
             <groupId>org.kie</groupId>
             <artifactId>kie-dmn-openapi</artifactId>
         </dependency>
+      <dependency>
+        <groupId>org.kie</groupId>
+        <artifactId>kie-dmn-efesto-compilation</artifactId>
+      </dependency>
 
         <!--    Required because of GrafanaConfigurationWriter    -->
         <dependency>
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
index dfef61899d..bcc27fcaec 100644
--- 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegen.java
@@ -21,56 +21,33 @@ package org.kie.kogito.codegen.decision;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 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.drools.codegen.common.GeneratedFile;
-import org.drools.codegen.common.GeneratedFileType;
 import org.eclipse.microprofile.openapi.spi.OASFactoryResolver;
-import org.kie.api.io.Resource;
 import org.kie.api.io.ResourceType;
-import org.kie.dmn.api.core.DMNModel;
-import org.kie.dmn.api.core.DMNRuntime;
-import org.kie.dmn.api.marshalling.DMNMarshaller;
-import org.kie.dmn.backend.marshalling.v1x.DMNMarshallerFactory;
 import org.kie.dmn.core.compiler.DMNProfile;
 import org.kie.dmn.core.compiler.RuntimeTypeCheckOption;
-import org.kie.dmn.core.internal.utils.DMNRuntimeBuilder;
-import org.kie.dmn.feel.codegen.feel11.CodegenStringUtil;
-import org.kie.dmn.model.api.BusinessKnowledgeModel;
-import org.kie.dmn.model.api.DRGElement;
-import org.kie.dmn.model.api.Decision;
-import org.kie.dmn.model.api.Definitions;
-import org.kie.dmn.openapi.DMNOASGeneratorFactory;
-import org.kie.dmn.openapi.model.DMNOASResult;
-import org.kie.dmn.typesafe.DMNAllTypesIndex;
-import org.kie.dmn.typesafe.DMNTypeSafePackageName;
-import org.kie.dmn.typesafe.DMNTypeSafeTypeGenerator;
-import org.kie.kogito.KogitoGAV;
+import org.kie.efesto.common.api.model.GeneratedResources;
 import org.kie.kogito.codegen.api.ApplicationSection;
 import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import org.kie.kogito.codegen.api.io.CollectedResource;
 import org.kie.kogito.codegen.core.AbstractGenerator;
-import org.kie.kogito.codegen.core.DashboardGeneratedFileUtils;
 import org.kie.kogito.codegen.core.io.CollectedResourceProducer;
 import org.kie.kogito.codegen.decision.config.DecisionConfigGenerator;
-import 
org.kie.kogito.codegen.decision.events.DecisionCloudEventMetaFactoryGenerator;
-import org.kie.kogito.grafana.GrafanaConfigurationWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import static java.util.stream.Collectors.toList;
 import static 
org.kie.dmn.core.assembler.DMNAssemblerService.DMN_PROFILE_PREFIX;
-import static 
org.kie.kogito.codegen.decision.CodegenUtils.getDefinitionsFileFromModel;
+import static 
org.kie.kogito.codegen.decision.DecisionCodegenUtils.generateModelFromGeneratedResources;
+import static 
org.kie.kogito.codegen.decision.DecisionCodegenUtils.generateModelsFromResources;
 
 public class DecisionCodegen extends AbstractGenerator {
 
@@ -122,54 +99,59 @@ public class DecisionCodegen extends AbstractGenerator {
         return ofCollectedResources(context, 
CollectedResourceProducer.fromPaths(context.ignoreHiddenFiles(), paths));
     }
 
-    private static final String operationalDashboardDmnTemplate = 
"/grafana-dashboard-template/operational-dashboard-template.json";
-    private static final String domainDashboardDmnTemplate = 
"/grafana-dashboard-template/blank-dashboard.json";
-
     private final List<CollectedResource> cResources;
-    private final List<DMNResource> resources = new ArrayList<>();
-    private final List<GeneratedFile> generatedFiles = new ArrayList<>();
     private final List<String> classesForManualReflection = new ArrayList<>();
     private final Set<DMNProfile> customDMNProfiles = new HashSet<>();
     private final boolean enableRuntimeTypeCheckOption;
 
     public DecisionCodegen(KogitoBuildContext context, List<CollectedResource> 
cResources) {
         super(context, GENERATOR_NAME, new DecisionConfigGenerator(context));
+        LOGGER.debug("DecisionCodegen {}", cResources);
         Set<String> customDMNProfilesProperties = 
getCustomDMNProfilesProperties();
         
customDMNProfiles.addAll(getCustomDMNProfiles(customDMNProfilesProperties, 
context.getClassLoader()));
         enableRuntimeTypeCheckOption = getEnableRuntimeTypeCheckOption();
         this.cResources = cResources;
     }
 
-    private void loadModelsAndValidate() {
-        Map<Resource, CollectedResource> r2cr = 
cResources.stream().collect(Collectors.toMap(CollectedResource::resource, 
Function.identity()));
-        // First, we perform static validation on directly the XML
-        DecisionValidation.dmnValidateResources(context(), r2cr.keySet());
-        // DMN model processing; any semantic error during compilation will 
also be thrown accordingly
-        DMNRuntimeBuilder dmnRuntimeBuilder = 
DMNRuntimeBuilder.fromDefaults().setOption(new 
RuntimeTypeCheckOption(enableRuntimeTypeCheckOption));
-        customDMNProfiles.forEach(dmnRuntimeBuilder::addProfile);
-        DMNRuntime dmnRuntime = dmnRuntimeBuilder
-                .setRootClassLoader(context().getClassLoader()) // KOGITO-4788
-                .buildConfiguration()
-                .fromResources(r2cr.keySet())
-                .getOrElseThrow(e -> new RuntimeException("Error compiling DMN 
model(s)", e));
-        // Any post-compilation of the DMN model validations: DT (static) 
analysis
-        DecisionValidation.dmnValidateDecisionTablesInModels(context(), 
dmnRuntime.getModels());
-        List<DMNResource> dmnResources = 
dmnRuntime.getModels().stream().map(model -> new DMNResource(model, 
r2cr.get(model.getResource()))).collect(toList());
-        resources.addAll(dmnResources);
+    @Override
+    public Optional<ApplicationSection> section() {
+        LOGGER.debug("section");
+        return Optional.of(new DecisionContainerGenerator(
+                context(),
+                applicationCanonicalName(),
+                this.cResources,
+                this.classesForManualReflection,
+                this.customDMNProfiles,
+                this.enableRuntimeTypeCheckOption));
     }
 
     @Override
-    protected Collection<GeneratedFile> internalGenerate() {
-        loadModelsAndValidate();
-        generateAndStoreRestResources();
-        generateAndStoreDecisionModelResourcesProvider();
+    public boolean isEmpty() {
+        return cResources.isEmpty();
+    }
 
-        return generatedFiles;
+    @Override
+    public int priority() {
+        return 30;
     }
 
     @Override
-    public boolean isEmpty() {
-        return cResources.isEmpty();
+    public String applicationCanonicalName() {
+        return super.applicationCanonicalName();
+    }
+
+    @Override
+    protected Collection<GeneratedFile> internalGenerate() {
+        LOGGER.debug("internalGenerate");
+        Collection<GeneratedFile> generatedFiles = new ArrayList<>();
+        Map.Entry<String, GeneratedResources> generatedResourcesEntry = 
generateModelsFromResources(generatedFiles,
+                classesForManualReflection,
+                cResources,
+                customDMNProfiles,
+                new RuntimeTypeCheckOption(getEnableRuntimeTypeCheckOption()),
+                this);
+        generateModelFromGeneratedResources(generatedFiles, 
generatedResourcesEntry);
+        return generatedFiles;
     }
 
     Set<String> getCustomDMNProfilesProperties() {
@@ -205,169 +187,11 @@ public class DecisionCodegen extends AbstractGenerator {
         return toReturn;
     }
 
-    private void generateAndStoreRestResources() {
-        List<DecisionRestResourceGenerator> rgs = new ArrayList<>(); // REST 
resources
-        List<DMNModel> models = 
resources.stream().map(DMNResource::getDmnModel).collect(Collectors.toList());
-
-        for (DMNModel model : models) {
-            if (model.getName() == null || model.getName().isEmpty()) {
-                throw new RuntimeException("Model name should not be empty");
-            }
-            DMNOASResult oasResult = generateAndStoreDefinitionsJson(model);
-
-            boolean stronglyTypedEnabled = Optional.ofNullable(context())
-                    .flatMap(c -> 
c.getApplicationProperty(STRONGLY_TYPED_CONFIGURATION_KEY))
-                    .map(Boolean::parseBoolean)
-                    .orElse(false);
-
-            if (stronglyTypedEnabled) {
-                generateStronglyTypedInput(model);
-            }
-            DecisionRestResourceGenerator resourceGenerator = new 
DecisionRestResourceGenerator(context(), model, applicationCanonicalName())
-                    .withStronglyTyped(stronglyTypedEnabled)
-                    .withOASResult(oasResult, isMPAnnotationsPresent(), 
isIOSwaggerOASv3AnnotationsPresent());
-            rgs.add(resourceGenerator);
-        }
-
-        if (context().hasRESTForGenerator(this)) {
-            for (DecisionRestResourceGenerator resourceGenerator : rgs) {
-                if (context().getAddonsConfig().usePrometheusMonitoring()) {
-                    generateAndStoreGrafanaDashboards(resourceGenerator);
-                }
-
-                storeFile(REST_TYPE, resourceGenerator.generatedFilePath(), 
resourceGenerator.generate());
-            }
-        }
-
-        DMNMarshaller marshaller = DMNMarshallerFactory.newDefaultMarshaller();
-        for (DMNResource resource : resources) {
-            DMNModel model = resource.getDmnModel();
-            Definitions definitions = model.getDefinitions();
-            for (DRGElement drg : definitions.getDrgElement()) {
-                if (drg instanceof Decision) {
-                    Decision decision = (Decision) drg;
-                    decision.setExpression(null);
-                } else if (drg instanceof BusinessKnowledgeModel) {
-                    BusinessKnowledgeModel bkm = (BusinessKnowledgeModel) drg;
-                    bkm.setEncapsulatedLogic(null);
-                }
-            }
-            String relativePath = 
CodegenStringUtil.escapeIdentifier(model.getNamespace()).replace(".", "/") + 
"/" + CodegenStringUtil.escapeIdentifier(model.getName()) + ".dmn_nologic";
-            storeFile(GeneratedFileType.INTERNAL_RESOURCE, relativePath, 
marshaller.marshal(definitions));
-        }
-
-        if (context().getAddonsConfig().useCloudEvents()) {
-            final DecisionCloudEventMetaFactoryGenerator 
ceMetaFactoryGenerator = new DecisionCloudEventMetaFactoryGenerator(context(), 
models);
-            storeFile(REST_TYPE, ceMetaFactoryGenerator.generatedFilePath(), 
ceMetaFactoryGenerator.generate());
-        }
-    }
-
-    private DMNOASResult generateAndStoreDefinitionsJson(DMNModel dmnModel) {
-        DMNOASResult toReturn = null;
-        try {
-            toReturn = 
DMNOASGeneratorFactory.generator(Collections.singleton(dmnModel)).build();
-            String jsonContent = new 
ObjectMapper().writeValueAsString(toReturn.getJsonSchemaNode());
-            final String DMN_DEFINITIONS_JSON = 
getDefinitionsFileFromModel(dmnModel);
-            storeFile(GeneratedFileType.STATIC_HTTP_RESOURCE, 
DMN_DEFINITIONS_JSON, jsonContent);
-        } catch (Exception e) {
-            LOGGER.error("Error while trying to generate OpenAPI specification 
for the DMN models", e);
-        }
-        return toReturn;
-    }
-
-    private void generateAndStoreDecisionModelResourcesProvider() {
-        final DecisionModelResourcesProviderGenerator generator = new 
DecisionModelResourcesProviderGenerator(context(),
-                applicationCanonicalName(),
-                resources);
-        storeFile(GeneratedFileType.SOURCE, generator.generatedFilePath(), 
generator.generate());
-    }
-
-    private void generateStronglyTypedInput(DMNModel model) {
-        try {
-            DMNTypeSafePackageName.Factory factory = m -> new 
DMNTypeSafePackageName("", m.getNamespace(), "");
-            DMNAllTypesIndex index = new DMNAllTypesIndex(factory, model);
-
-            DMNTypeSafeTypeGenerator generator = new 
DMNTypeSafeTypeGenerator(model, index, factory).withJacksonAnnotation();
-            boolean useMPAnnotations = isMPAnnotationsPresent();
-            if (useMPAnnotations) {
-                LOGGER.debug("useMPAnnotations");
-                generator.withMPAnnotation();
-            } else {
-                LOGGER.debug("NO useMPAnnotations");
-            }
-            boolean useIOSwaggerOASv3Annotations = 
isIOSwaggerOASv3AnnotationsPresent();
-            if (useIOSwaggerOASv3Annotations) {
-                LOGGER.debug("useIOSwaggerOASv3Annotations");
-                generator.withIOSwaggerOASv3();
-            } else {
-                LOGGER.debug("NO useIOSwaggerOASv3Annotations");
-            }
-            Map<String, String> allTypesSourceCode = generator
-                    .processTypes()
-                    .generateSourceCodeOfAllTypes();
-
-            for (Entry<String, String> kv : allTypesSourceCode.entrySet()) {
-                String fqcn = kv.getKey();
-                String sourceCode = kv.getValue();
-
-                storeFile(GeneratedFileType.SOURCE, fqcn.replace(".", "/") + 
".java", sourceCode);
-                classesForManualReflection.add(fqcn);
-            }
-            LOGGER.debug("classesForManualReflection: {}", 
classesForManualReflection);
-        } catch (Exception e) {
-            LOGGER.error("Unable to generate Strongly Typed Input for: {} {}", 
model.getNamespace(), model.getName());
-            throw e;
-        }
-    }
-
-    private boolean isMPAnnotationsPresent() {
+    boolean isMPAnnotationsPresent() {
         return 
context().hasClassAvailable("org.eclipse.microprofile.openapi.models.OpenAPI");
     }
 
-    private boolean isIOSwaggerOASv3AnnotationsPresent() {
+    boolean isIOSwaggerOASv3AnnotationsPresent() {
         return 
context().hasClassAvailable("io.swagger.v3.oas.annotations.media.Schema");
     }
-
-    private void 
generateAndStoreGrafanaDashboards(DecisionRestResourceGenerator 
resourceGenerator) {
-        Definitions definitions = 
resourceGenerator.getDmnModel().getDefinitions();
-        List<Decision> decisions = 
definitions.getDrgElement().stream().filter(x -> x.getParentDRDElement() 
instanceof Decision).map(x -> (Decision) x).collect(toList());
-        Optional<String> operationalDashboard = 
GrafanaConfigurationWriter.generateOperationalDashboard(
-                operationalDashboardDmnTemplate,
-                resourceGenerator.getNameURL(),
-                context().getPropertiesMap(),
-                resourceGenerator.getNameURL(),
-                context().getGAV().orElse(KogitoGAV.EMPTY_GAV),
-                context().getAddonsConfig().useTracing());
-        String dashboardName = 
GrafanaConfigurationWriter.buildDashboardName(context().getGAV(), 
resourceGenerator.getNameURL());
-        operationalDashboard.ifPresent(dashboard -> 
generatedFiles.addAll(DashboardGeneratedFileUtils.operational(dashboard, 
dashboardName + ".json")));
-        Optional<String> domainDashboard = 
GrafanaConfigurationWriter.generateDomainSpecificDMNDashboard(
-                domainDashboardDmnTemplate,
-                resourceGenerator.getNameURL(),
-                context().getPropertiesMap(),
-                resourceGenerator.getNameURL(),
-                context().getGAV().orElse(KogitoGAV.EMPTY_GAV),
-                decisions,
-                context().getAddonsConfig().useTracing());
-        domainDashboard.ifPresent(dashboard -> 
generatedFiles.addAll(DashboardGeneratedFileUtils.domain(dashboard, 
dashboardName + ".json")));
-    }
-
-    private void storeFile(GeneratedFileType type, String path, String source) 
{
-        generatedFiles.add(new GeneratedFile(type, path, source));
-    }
-
-    @Override
-    public Optional<ApplicationSection> section() {
-        return Optional.of(new DecisionContainerGenerator(
-                context(),
-                applicationCanonicalName(),
-                this.cResources,
-                this.classesForManualReflection,
-                this.customDMNProfiles,
-                this.enableRuntimeTypeCheckOption));
-    }
-
-    @Override
-    public int priority() {
-        return 30;
-    }
 }
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegenUtils.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegenUtils.java
new file mode 100644
index 0000000000..21543a3b14
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegenUtils.java
@@ -0,0 +1,355 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    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.decision;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import org.drools.codegen.common.GeneratedFile;
+import org.drools.codegen.common.GeneratedFileType;
+import org.kie.api.io.Resource;
+import org.kie.dmn.api.core.DMNModel;
+import org.kie.dmn.api.marshalling.DMNMarshaller;
+import org.kie.dmn.backend.marshalling.v1x.DMNMarshallerFactory;
+import org.kie.dmn.core.compiler.DMNProfile;
+import org.kie.dmn.core.compiler.RuntimeTypeCheckOption;
+import org.kie.dmn.efesto.compiler.model.DMNResourceSetResource;
+import org.kie.dmn.efesto.compiler.model.DmnCompilationContext;
+import org.kie.dmn.feel.codegen.feel11.CodegenStringUtil;
+import org.kie.dmn.model.api.BusinessKnowledgeModel;
+import org.kie.dmn.model.api.DRGElement;
+import org.kie.dmn.model.api.Decision;
+import org.kie.dmn.model.api.Definitions;
+import org.kie.dmn.openapi.DMNOASGeneratorFactory;
+import org.kie.dmn.openapi.model.DMNOASResult;
+import org.kie.dmn.typesafe.DMNAllTypesIndex;
+import org.kie.dmn.typesafe.DMNTypeSafePackageName;
+import org.kie.dmn.typesafe.DMNTypeSafeTypeGenerator;
+import org.kie.efesto.common.api.identifiers.LocalUri;
+import org.kie.efesto.common.api.identifiers.ModelLocalUriId;
+import org.kie.efesto.common.api.model.EfestoCompilationContext;
+import org.kie.efesto.common.api.model.GeneratedModelResource;
+import org.kie.efesto.common.api.model.GeneratedResources;
+import org.kie.efesto.common.core.storage.ContextStorage;
+import org.kie.efesto.compilationmanager.api.service.CompilationManager;
+import org.kie.efesto.compilationmanager.api.utils.SPIUtils;
+import org.kie.kogito.KogitoGAV;
+import org.kie.kogito.codegen.api.context.KogitoBuildContext;
+import org.kie.kogito.codegen.api.io.CollectedResource;
+import org.kie.kogito.codegen.core.DashboardGeneratedFileUtils;
+import 
org.kie.kogito.codegen.decision.events.DecisionCloudEventMetaFactoryGenerator;
+import org.kie.kogito.grafana.GrafanaConfigurationWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import static java.util.stream.Collectors.toList;
+import static 
org.kie.efesto.common.core.utils.JSONUtils.getGeneratedResourcesObject;
+import static 
org.kie.efesto.common.core.utils.JSONUtils.getGeneratedResourcesString;
+import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
+import static 
org.kie.kogito.codegen.decision.CodegenUtils.getDefinitionsFileFromModel;
+import static 
org.kie.kogito.codegen.decision.DecisionCodegen.STRONGLY_TYPED_CONFIGURATION_KEY;
+
+@SuppressWarnings({ "unchecked", "rawtypes" })
+public class DecisionCodegenUtils {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(DecisionCodegenUtils.class);
+    private static final GeneratedFileType INDEX_FILE = 
GeneratedFileType.of("IndexFile",
+            GeneratedFileType.Category.INTERNAL_RESOURCE);
+    private static final CompilationManager compilationManager =
+            SPIUtils.getCompilationManager(true).orElseThrow(() -> new 
RuntimeException("Compilation Manager not " +
+                    "available"));
+
+    private static final String operationalDashboardDmnTemplate = 
"/grafana-dashboard-template/operational-dashboard-template.json";
+    private static final String domainDashboardDmnTemplate = 
"/grafana-dashboard-template/blank-dashboard.json";
+
+    static Map.Entry<String, GeneratedResources> 
generateModelsFromResources(Collection<GeneratedFile> generatedFiles,
+            List<String> classesForManualReflection,
+            List<CollectedResource> cResources,
+            Set<DMNProfile> customDMNProfiles,
+            RuntimeTypeCheckOption runtimeTypeCheckOption,
+            DecisionCodegen generator) {
+        Map<Resource, CollectedResource> r2cr = 
cResources.stream().collect(Collectors.toMap(CollectedResource::resource, 
Function.identity()));
+        Map.Entry<String, GeneratedResources> generatedResourcesEntry = 
loadModelsAndValidate(generator.context(), r2cr, customDMNProfiles, 
runtimeTypeCheckOption);
+        List<DMNResource> resources = getDMNResources(generatedResourcesEntry, 
r2cr);
+        boolean stronglyTypedEnabled = Optional.ofNullable(generator.context())
+                .flatMap(c -> 
c.getApplicationProperty(STRONGLY_TYPED_CONFIGURATION_KEY))
+                .map(Boolean::parseBoolean)
+                .orElse(false);
+        DMNMarshaller marshaller = DMNMarshallerFactory.newDefaultMarshaller();
+        List<DMNModel> dmnModels = 
resources.stream().map(DMNResource::getDmnModel).toList();
+        for (DMNModel model : dmnModels) {
+            if (model.getName() == null || model.getName().isEmpty()) {
+                throw new RuntimeException("Model name should not be empty");
+            }
+            generateModel(generatedFiles, classesForManualReflection, model, 
generator, stronglyTypedEnabled, marshaller);
+        }
+        generateCloudEventsResources(generatedFiles, generator.context(), 
dmnModels);
+        generateAndStoreDecisionModelResourcesProvider(generatedFiles, 
resources, generator.context(), generator.applicationCanonicalName());
+        return generatedResourcesEntry;
+    }
+
+    static List<DMNResource> getDMNResources(Map.Entry<String, 
GeneratedResources> generatedResourcesEntry, Map<Resource, CollectedResource> 
r2cr) {
+        return generatedResourcesEntry.getValue().stream()
+                .filter(GeneratedModelResource.class::isInstance)
+                .map(GeneratedModelResource.class::cast)
+                .map(generatedModelResource -> 
getDMNResourceFromGeneratedModelResource(generatedModelResource, r2cr))
+                .toList();
+    }
+
+    static Map.Entry<String, GeneratedResources> 
loadModelsAndValidate(KogitoBuildContext context, Map<Resource, 
CollectedResource> r2cr,
+            Set<DMNProfile> customDMNProfiles,
+            RuntimeTypeCheckOption runtimeTypeCheckOption) {
+        DecisionValidation.dmnValidateResources(context, r2cr.keySet());
+        Set<Resource> dmnResources = r2cr.keySet();
+        ModelLocalUriId dmnModelLocalUriId = new 
ModelLocalUriId(LocalUri.Root.append("dmn").append("scesim"));
+        DMNResourceSetResource toProcessDmn = new 
DMNResourceSetResource(dmnResources, dmnModelLocalUriId);
+        EfestoCompilationContext dmnCompilationContext = 
DmnCompilationContext.buildWithParentClassLoader(context.getClassLoader(), 
customDMNProfiles, runtimeTypeCheckOption);
+        compilationManager.processResource(dmnCompilationContext, 
toProcessDmn);
+        Map<String, GeneratedResources> generatedResourcesMap = 
dmnCompilationContext.getGeneratedResourcesMap();
+        Map.Entry<String, GeneratedResources> toReturn = 
generatedResourcesMap.entrySet().stream().filter(entry -> 
entry.getKey().equals("dmn")).findFirst().orElseThrow(() -> new 
RuntimeException());
+        
toReturn.getValue().stream().filter(GeneratedModelResource.class::isInstance)
+                .map(GeneratedModelResource.class::cast)
+                .forEach(generatedResource -> {
+                    GeneratedResources generatedResources = 
(GeneratedResources) 
dmnCompilationContext.getGeneratedResourcesMap().get("dmn");
+                    if (generatedResources == null) {
+                        
ContextStorage.putEfestoCompilationContext(generatedResource.getModelLocalUriId(),
 dmnCompilationContext);
+                    } else {
+                        Optional<GeneratedModelResource> first = 
generatedResources.stream()
+                                
.filter(GeneratedModelResource.class::isInstance)
+                                .map(GeneratedModelResource.class::cast)
+                                .filter(storedGeneratedResources -> 
storedGeneratedResources.getModelLocalUriId().equals(generatedResource.getModelLocalUriId()))
+                                .findFirst();
+                        // let's avoid overwrite an already compiled resources
+                        if (first.isEmpty() || first.get().getCompiledModel() 
== null) {
+                            
ContextStorage.putEfestoCompilationContext(generatedResource.getModelLocalUriId(),
 dmnCompilationContext);
+                        }
+                    }
+                });
+        return generatedResourcesMap.entrySet().stream().filter(entry -> 
entry.getKey().equals("dmn")).findFirst().orElseThrow(() -> new 
RuntimeException());
+    }
+
+    static DMNResource 
getDMNResourceFromGeneratedModelResource(GeneratedModelResource 
generatedModelResource, Map<Resource, CollectedResource> r2cr) {
+        DMNModel dmnModel = 
getDMNModelFromGeneratedModelResource(generatedModelResource);
+        CollectedResource collectedResource = r2cr.get(dmnModel.getResource());
+        return new DMNResource(dmnModel, collectedResource);
+    }
+
+    static DMNModel 
getDMNModelFromGeneratedModelResource(GeneratedModelResource 
generatedModelResource) {
+        DMNModel toReturn = (DMNModel) 
generatedModelResource.getCompiledModel();
+        if (toReturn == null) {
+            EfestoCompilationContext dmnCompilationContext = 
ContextStorage.getEfestoCompilationContext(generatedModelResource.getModelLocalUriId());
+            GeneratedResources generatedResources = (GeneratedResources) 
dmnCompilationContext.getGeneratedResourcesMap().get("dmn");
+            Optional<GeneratedModelResource> first = 
generatedResources.stream()
+                    .filter(GeneratedModelResource.class::isInstance)
+                    .map(GeneratedModelResource.class::cast)
+                    .filter(storedGeneratedResources -> 
storedGeneratedResources.getModelLocalUriId().equals(generatedModelResource.getModelLocalUriId()))
+                    .findFirst();
+            if (first.isPresent()) {
+                toReturn = (DMNModel) first.get().getCompiledModel();
+            }
+        }
+        return toReturn;
+    }
+
+    static void generateModel(Collection<GeneratedFile> files,
+            List<String> classesForManualReflection,
+            DMNModel dmnModel, DecisionCodegen generator,
+            boolean stronglyTypedEnabled,
+            DMNMarshaller marshaller) {
+        if (stronglyTypedEnabled) {
+            generateStronglyTypedInput(files, classesForManualReflection, 
dmnModel, generator.isMPAnnotationsPresent(), 
generator.isIOSwaggerOASv3AnnotationsPresent());
+        }
+        generateModelRESTFiles(files, dmnModel, generator, 
stronglyTypedEnabled);
+        generateDecisionsFiles(files, dmnModel, marshaller);
+    }
+
+    static void generateModelRESTFiles(Collection<GeneratedFile> 
generatedFiles, DMNModel dmnModel, DecisionCodegen generator, boolean 
stronglyTypedEnabled) {
+        KogitoBuildContext context = generator.context();
+        if (context.hasRESTForGenerator(generator)) {
+            generateModelRESTFiles(generatedFiles, dmnModel,
+                    context,
+                    generator.applicationCanonicalName(),
+                    stronglyTypedEnabled,
+                    generator.isMPAnnotationsPresent(),
+                    generator.isIOSwaggerOASv3AnnotationsPresent());
+        }
+    }
+
+    static void generateModelRESTFiles(Collection<GeneratedFile> 
generatedFiles,
+            DMNModel dmnModel,
+            KogitoBuildContext context,
+            String appCanonicalName,
+            boolean stronglyTypedEnabled,
+            boolean isMPAnnotationsPresent,
+            boolean isIOSwaggerOASv3AnnotationsPresent) {
+        DMNOASResult oasResult = 
DMNOASGeneratorFactory.generator(Collections.singleton(dmnModel)).build();
+        DecisionRestResourceGenerator resourceGenerator = new 
DecisionRestResourceGenerator(context, dmnModel, appCanonicalName)
+                .withStronglyTyped(stronglyTypedEnabled)
+                .withOASResult(oasResult, isMPAnnotationsPresent, 
isIOSwaggerOASv3AnnotationsPresent);
+        storeFile(generatedFiles, REST_TYPE, 
resourceGenerator.generatedFilePath(), resourceGenerator.generate());
+        if (context.getAddonsConfig().usePrometheusMonitoring()) {
+            generateAndStoreGrafanaDashboards(context, generatedFiles, 
resourceGenerator);
+        }
+        try {
+            String jsonContent = new 
ObjectMapper().writeValueAsString(oasResult.getJsonSchemaNode());
+            final String DMN_DEFINITIONS_JSON = 
getDefinitionsFileFromModel(dmnModel);
+            storeFile(generatedFiles, GeneratedFileType.STATIC_HTTP_RESOURCE, 
DMN_DEFINITIONS_JSON, jsonContent);
+        } catch (Exception e) {
+            LOGGER.warn("Failed to write OAS schema");
+        }
+    }
+
+    static void generateDecisionsFiles(Collection<GeneratedFile> 
generatedFiles, DMNModel model, DMNMarshaller marshaller) {
+        Definitions definitions = model.getDefinitions();
+        for (DRGElement drg : definitions.getDrgElement()) {
+            if (drg instanceof Decision decision) {
+                decision.setExpression(null);
+            } else if (drg instanceof BusinessKnowledgeModel bkm) {
+                bkm.setEncapsulatedLogic(null);
+            }
+        }
+        String relativePath = 
CodegenStringUtil.escapeIdentifier(model.getNamespace()).replace(".", "/") + 
"/" + CodegenStringUtil.escapeIdentifier(model.getName()) + ".dmn_nologic";
+        storeFile(generatedFiles, GeneratedFileType.INTERNAL_RESOURCE, 
relativePath, marshaller.marshal(definitions));
+    }
+
+    static void generateCloudEventsResources(Collection<GeneratedFile> 
generatedFiles, KogitoBuildContext context, List<DMNModel> dmnModels) {
+        if (context.getAddonsConfig().useCloudEvents()) {
+            final DecisionCloudEventMetaFactoryGenerator 
ceMetaFactoryGenerator = new DecisionCloudEventMetaFactoryGenerator(context, 
dmnModels);
+            storeFile(generatedFiles, REST_TYPE, 
ceMetaFactoryGenerator.generatedFilePath(), ceMetaFactoryGenerator.generate());
+        }
+    }
+
+    static void generateStronglyTypedInput(Collection<GeneratedFile> 
generatedFiles,
+            List<String> classesForManualReflection,
+            DMNModel model,
+            boolean useMPAnnotations,
+            boolean useIOSwaggerOASv3Annotations) {
+        try {
+            DMNTypeSafePackageName.Factory factory = m -> new 
DMNTypeSafePackageName("", m.getNamespace(), "");
+            DMNAllTypesIndex index = new DMNAllTypesIndex(factory, model);
+
+            DMNTypeSafeTypeGenerator generator = new 
DMNTypeSafeTypeGenerator(model, index, factory).withJacksonAnnotation();
+            if (useMPAnnotations) {
+                LOGGER.debug("useMPAnnotations");
+                generator.withMPAnnotation();
+            } else {
+                LOGGER.debug("NO useMPAnnotations");
+            }
+            if (useIOSwaggerOASv3Annotations) {
+                LOGGER.debug("useIOSwaggerOASv3Annotations");
+                generator.withIOSwaggerOASv3();
+            } else {
+                LOGGER.debug("NO useIOSwaggerOASv3Annotations");
+            }
+            Map<String, String> allTypesSourceCode = generator
+                    .processTypes()
+                    .generateSourceCodeOfAllTypes();
+
+            for (Map.Entry<String, String> kv : allTypesSourceCode.entrySet()) 
{
+                String fqcn = kv.getKey();
+                String sourceCode = kv.getValue();
+                storeFile(generatedFiles, GeneratedFileType.SOURCE, 
fqcn.replace(".", "/") + ".java", sourceCode);
+                classesForManualReflection.add(fqcn);
+            }
+            LOGGER.debug("classesForManualReflection: {}", 
classesForManualReflection);
+        } catch (Exception e) {
+            LOGGER.error("Unable to generate Strongly Typed Input for: {} {}", 
model.getNamespace(), model.getName());
+            throw e;
+        }
+    }
+
+    static void generateAndStoreGrafanaDashboards(KogitoBuildContext context,
+            Collection<GeneratedFile> generatedFiles,
+            DecisionRestResourceGenerator resourceGenerator) {
+        Definitions definitions = 
resourceGenerator.getDmnModel().getDefinitions();
+        List<Decision> decisions = 
definitions.getDrgElement().stream().filter(x -> x.getParentDRDElement() 
instanceof Decision).map(x -> (Decision) x).collect(toList());
+        Optional<String> operationalDashboard = 
GrafanaConfigurationWriter.generateOperationalDashboard(
+                operationalDashboardDmnTemplate,
+                resourceGenerator.getNameURL(),
+                context.getPropertiesMap(),
+                resourceGenerator.getNameURL(),
+                context.getGAV().orElse(KogitoGAV.EMPTY_GAV),
+                context.getAddonsConfig().useTracing());
+        String dashboardName = 
GrafanaConfigurationWriter.buildDashboardName(context.getGAV(), 
resourceGenerator.getNameURL());
+        operationalDashboard.ifPresent(dashboard -> 
generatedFiles.addAll(DashboardGeneratedFileUtils.operational(dashboard, 
dashboardName + ".json")));
+        Optional<String> domainDashboard = 
GrafanaConfigurationWriter.generateDomainSpecificDMNDashboard(
+                domainDashboardDmnTemplate,
+                resourceGenerator.getNameURL(),
+                context.getPropertiesMap(),
+                resourceGenerator.getNameURL(),
+                context.getGAV().orElse(KogitoGAV.EMPTY_GAV),
+                decisions,
+                context.getAddonsConfig().useTracing());
+        domainDashboard.ifPresent(dashboard -> 
generatedFiles.addAll(DashboardGeneratedFileUtils.domain(dashboard, 
dashboardName + ".json")));
+    }
+
+    static void 
generateAndStoreDecisionModelResourcesProvider(Collection<GeneratedFile> 
generatedFiles, List<DMNResource> resources, KogitoBuildContext context, String 
applicationCanonicalName) {
+        final DecisionModelResourcesProviderGenerator generator = new 
DecisionModelResourcesProviderGenerator(context,
+                applicationCanonicalName,
+                resources);
+        storeFile(generatedFiles, GeneratedFileType.SOURCE, 
generator.generatedFilePath(), generator.generate());
+    }
+
+    private static void storeFile(Collection<GeneratedFile> generatedFiles, 
GeneratedFileType type, String path, String source) {
+        generatedFiles.add(new GeneratedFile(type, path, source));
+    }
+
+    static void generateModelFromGeneratedResources(Collection<GeneratedFile> 
files, Map.Entry<String, GeneratedResources> generatedResourcesEntry) {
+        String indexFileName = String.format("%s.%s%s", "IndexFile", 
generatedResourcesEntry.getKey(), "_json");
+        addUpdateGeneratedFile(files, indexFileName, 
generatedResourcesEntry.getValue());
+    }
+
+    static void addUpdateGeneratedFile(Collection<GeneratedFile> files, String 
indexFileName,
+            GeneratedResources newGeneratedResources) {
+        try {
+            Optional<GeneratedFile> existing = 
files.stream().filter(generatedFile -> generatedFile.type().equals(INDEX_FILE) 
&& generatedFile.relativePath().equals(indexFileName))
+                    .findFirst();
+            String content;
+            if (existing.isPresent()) {
+                GeneratedFile generatedFile = existing.get();
+                content = getUpdatedGeneratedResourcesContent(generatedFile, 
newGeneratedResources);
+                files.remove(generatedFile);
+            } else {
+                content = getGeneratedResourcesString(newGeneratedResources);
+            }
+            files.add(new GeneratedFile(INDEX_FILE, indexFileName, content));
+        } catch (JsonProcessingException e) {
+            throw new IllegalStateException("Failed to serialize " + 
newGeneratedResources, e);
+        }
+    }
+
+    static String getUpdatedGeneratedResourcesContent(GeneratedFile 
generatedFile,
+            GeneratedResources newGeneratedResources) throws 
JsonProcessingException {
+        String oldContent = new String(generatedFile.contents());
+        GeneratedResources oldGeneratedResources = 
getGeneratedResourcesObject(oldContent);
+        oldGeneratedResources.addAll(newGeneratedResources);
+        return getGeneratedResourcesString(oldGeneratedResources);
+    }
+
+}
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCloudEventMetaFactoryGeneratorTest.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCloudEventMetaFactoryGeneratorTest.java
index d6b60d255f..71c69ebe44 100644
--- 
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCloudEventMetaFactoryGeneratorTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionCloudEventMetaFactoryGeneratorTest.java
@@ -36,8 +36,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 class DecisionCloudEventMetaFactoryGeneratorTest {
 
     private static final String MODEL_PATH = 
"src/test/resources/decision/models/vacationDays";
-    private static final int EXPECTED_FILES_WITH_CLOUDEVENTS = 5;
-    private static final int EXPECTED_FILES_WITHOUT_CLOUDEVENTS = 4;
+    private static final int EXPECTED_FILES_WITH_CLOUDEVENTS = 6; // Now it 
includes IndexFile.dmn_json
+    private static final int EXPECTED_FILES_WITHOUT_CLOUDEVENTS = 5; // Now it 
includes IndexFile.dmn_json
     private static final String EXPECTED_FILE_PATH = 
"org/kie/kogito/app/DecisionCloudEventMetaFactory.java";
 
     @Test
diff --git 
a/quarkus/extensions/kogito-quarkus-extension/kogito-quarkus-integration-test-maven-devmode/src/test/java/io/quarkus/it/kogito/devmode/DevMojoIT.java
 
b/quarkus/extensions/kogito-quarkus-extension/kogito-quarkus-integration-test-maven-devmode/src/test/java/io/quarkus/it/kogito/devmode/DevMojoIT.java
index 578cac7926..1505b79459 100644
--- 
a/quarkus/extensions/kogito-quarkus-extension/kogito-quarkus-integration-test-maven-devmode/src/test/java/io/quarkus/it/kogito/devmode/DevMojoIT.java
+++ 
b/quarkus/extensions/kogito-quarkus-extension/kogito-quarkus-integration-test-maven-devmode/src/test/java/io/quarkus/it/kogito/devmode/DevMojoIT.java
@@ -34,6 +34,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.maven.shared.invoker.MavenInvocationException;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -223,6 +224,7 @@ public class DevMojoIT extends RunAndCheckMojoTestBase {
         return additionalArguments;
     }
 
+    @Disabled() // See 
https://github.com/apache/incubator-kie-issues/issues/1960
     @Test
     public void testBPMN2HotReload() throws Exception {
         testDir = initProject("projects/classic-inst", 
"projects/project-instrumentation-reload-bpmn");
@@ -298,6 +300,7 @@ public class DevMojoIT extends RunAndCheckMojoTestBase {
         LOGGER.info("[testBPMN2HotReload] done.");
     }
 
+    @Disabled() // See 
https://github.com/apache/incubator-kie-issues/issues/1960
     @Test
     public void testDMNHotReload() throws Exception {
         testDir = initProject("projects/classic-inst", 
"projects/project-instrumentation-reload-dmn");
@@ -369,6 +372,7 @@ public class DevMojoIT extends RunAndCheckMojoTestBase {
         LOGGER.info("[testDMNHotReload] done.");
     }
 
+    @Disabled() // See 
https://github.com/apache/incubator-kie-issues/issues/1960
     @Test
     public void testDRLHotReload() throws Exception {
         testDir = initProject("projects/classic-inst", 
"projects/project-instrumentation-reload-drl");
@@ -440,6 +444,7 @@ public class DevMojoIT extends RunAndCheckMojoTestBase {
         LOGGER.info("done.");
     }
 
+    @Disabled() // See 
https://github.com/apache/incubator-kie-issues/issues/1960
     @Test
     public void testStaticResource() throws MavenInvocationException {
         testDir = initProject("projects/simple-dmn", 
"projects/simple-dmn-static-resource");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to