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

tiagobento 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 de30dba21c [incubator-kie-issues#2060] Implemented DummyProcess to use 
as placeholder when the application does not contain any bpmn but 
kie-addons-quarkus-source-files (#4017)
de30dba21c is described below

commit de30dba21c84e80a2458e108d33a5a28c0a75ca8
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Tue Aug 12 18:43:58 2025 +0200

    [incubator-kie-issues#2060] Implemented DummyProcess to use as placeholder 
when the application does not contain any bpmn but 
kie-addons-quarkus-source-files (#4017)
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 .../kie/kogito/codegen/process/DummyProcess.java   | 111 +++++++++++++++++++++
 .../kie/kogito/codegen/process/ProcessCodegen.java |  41 ++++++--
 .../util/SourceFilesProviderProducerUtil.java      |   3 +-
 3 files changed, 144 insertions(+), 11 deletions(-)

diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/DummyProcess.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/DummyProcess.java
new file mode 100644
index 0000000000..140dd6077a
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/DummyProcess.java
@@ -0,0 +1,111 @@
+/*
+ * 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.process;
+
+import java.util.List;
+import java.util.Map;
+
+import org.kie.api.definition.process.Node;
+import org.kie.api.definition.process.WorkflowElementIdentifier;
+import org.kie.api.io.Resource;
+import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcess;
+
+/**
+ * Class used as "placeholder" in case there are no processes in the 
application but
+ * kie-addons-quarkus-source-files is present.
+ * Temporary hack for incubator-kie-issues#2060
+ */
+public class DummyProcess implements KogitoWorkflowProcess {
+
+    @Override
+    public String getVisibility() {
+        return "";
+    }
+
+    @Override
+    public List<Node> getNodesRecursively() {
+        return List.of();
+    }
+
+    @Override
+    public Node[] getNodes() {
+        return new Node[0];
+    }
+
+    @Override
+    public Node getNode(WorkflowElementIdentifier workflowElementIdentifier) {
+        return null;
+    }
+
+    @Override
+    public Node getNodeByUniqueId(String s) {
+        return null;
+    }
+
+    @Override
+    public KnowledgeType getKnowledgeType() {
+        return null;
+    }
+
+    @Override
+    public String getNamespace() {
+        return "dummy-namespace";
+    }
+
+    @Override
+    public String getId() {
+        return "dummy-id";
+    }
+
+    @Override
+    public String getName() {
+        return "dummy-name";
+    }
+
+    @Override
+    public String getVersion() {
+        return "dummy-version";
+    }
+
+    @Override
+    public String getPackageName() {
+        return "dummy-package-name";
+    }
+
+    @Override
+    public String getType() {
+        return "dummy-type";
+    }
+
+    @Override
+    public Map<String, Object> getMetaData() {
+        return Map.of();
+    }
+
+    @Override
+    public Resource getResource() {
+        return null;
+    }
+
+    @Override
+    public void setResource(Resource resource) {
+
+    }
+}
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
index ee8b0c7509..fc33742b1e 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
@@ -119,7 +119,28 @@ public class ProcessCodegen extends AbstractGenerator {
         Map<String, byte[]> processSVGMap = new HashMap<>();
         Map<String, Throwable> processesErrors = new HashMap<>();
         boolean useSvgAddon = context.getAddonsConfig().useProcessSVG();
-        final List<GeneratedInfo<KogitoWorkflowProcess>> processes = 
resources.stream()
+        final List<GeneratedInfo<KogitoWorkflowProcess>> processes = 
getGeneratedInfoForProcesses(context, resources,
+                useSvgAddon,
+                processSVGMap,
+                processesErrors);
+        if (processes.isEmpty() && context.getAddonsConfig().useSourceFiles()) 
{ // Temporary hack for incubator-kie-issues#2060 */
+            processes.add(new GeneratedInfo<>(new DummyProcess()));
+        }
+        if (useSvgAddon) {
+            
context.addContextAttribute(ContextAttributesConstants.PROCESS_AUTO_SVG_MAPPING,
 processSVGMap);
+        }
+        context.addContextAttribute(IS_BUSINESS_CALENDAR_PRESENT, 
resources.stream().anyMatch(resource -> 
resource.resource().getSourcePath().endsWith(BUSINESS_CALENDAR_PATH)));
+
+        handleValidation(context, processesErrors);
+
+        return ofProcesses(context, processes);
+    }
+
+    private static List<GeneratedInfo<KogitoWorkflowProcess>> 
getGeneratedInfoForProcesses(KogitoBuildContext context, 
Collection<CollectedResource> resources,
+            boolean useSvgAddon,
+            Map<String, byte[]> processSVGMap,
+            Map<String, Throwable> processesErrors) {
+        return resources.stream()
                 .map(CollectedResource::resource)
                 .flatMap(resource -> {
                     try {
@@ -145,15 +166,6 @@ public class ProcessCodegen extends AbstractGenerator {
                 //Validate parsed processes
                 .map(processInfo -> validate(processInfo, processesErrors))
                 .collect(toList());
-
-        if (useSvgAddon) {
-            
context.addContextAttribute(ContextAttributesConstants.PROCESS_AUTO_SVG_MAPPING,
 processSVGMap);
-        }
-        context.addContextAttribute(IS_BUSINESS_CALENDAR_PRESENT, 
resources.stream().anyMatch(resource -> 
resource.resource().getSourcePath().endsWith(BUSINESS_CALENDAR_PATH)));
-
-        handleValidation(context, processesErrors);
-
-        return ofProcesses(context, processes);
     }
 
     private static GeneratedInfo<KogitoWorkflowProcess> 
addResource(GeneratedInfo<KogitoWorkflowProcess> info, Resource r) {
@@ -299,6 +311,9 @@ public class ProcessCodegen extends AbstractGenerator {
 
         // first we generate all the data classes from variable declarations
         for (WorkflowProcess workFlowProcess : processes.values()) {
+            if (workFlowProcess instanceof DummyProcess) {
+                continue; // Temporary hack for incubator-kie-issues#2060
+            }
             // transaction is disabled by default for SW types
             boolean defaultTransactionEnabled = 
!KogitoWorkflowProcess.SW_TYPE.equals(workFlowProcess.getType());
             if (isTransactionEnabled(this, context(), 
defaultTransactionEnabled)) {
@@ -319,6 +334,9 @@ public class ProcessCodegen extends AbstractGenerator {
         boolean isServerless = false;
         // then we generate work items task inputs and outputs if any
         for (WorkflowProcess workFlowProcess : processes.values()) {
+            if (workFlowProcess instanceof DummyProcess) {
+                continue; // Temporary hack for incubator-kie-issues#2060
+            }
             isServerless |= 
KogitoWorkflowProcess.SW_TYPE.equals(workFlowProcess.getType());
             if 
(KogitoWorkflowProcess.SW_TYPE.equals(workFlowProcess.getType())) {
                 continue;
@@ -334,6 +352,9 @@ public class ProcessCodegen extends AbstractGenerator {
 
         // collect all process descriptors (exec model)
         for (KogitoWorkflowProcess workFlowProcess : processes.values()) {
+            if (workFlowProcess instanceof DummyProcess) {
+                continue; // Temporary hack for incubator-kie-issues#2060
+            }
             ProcessExecutableModelGenerator execModelGen =
                     new ProcessExecutableModelGenerator(workFlowProcess, 
execModelGenerator);
             String packageName = workFlowProcess.getPackageName();
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/SourceFilesProviderProducerUtil.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/SourceFilesProviderProducerUtil.java
index 5da214b251..0368d40af9 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/SourceFilesProviderProducerUtil.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/util/SourceFilesProviderProducerUtil.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.kie.api.io.Resource;
 import org.kie.kogito.codegen.api.context.KogitoBuildContext;
+import org.kie.kogito.codegen.process.DummyProcess;
 import org.kie.kogito.codegen.process.ProcessCodegenException;
 import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcess;
 
@@ -61,7 +62,7 @@ public class SourceFilesProviderProducerUtil {
                 .findFirst()
                 .orElseThrow(() -> new 
ProcessCodegenException("SourceFileProviderProducerTemplate does not contain a 
class declaration"));
 
-        if (workflows.isEmpty()) {
+        if (workflows.isEmpty() || 
workflows.values().stream().allMatch(DummyProcess.class::isInstance)) { // 
Temporary hack for incubator-kie-issues#2060
             producerClass.remove(staticInitDeclaration);
         } else {
             registerWorkflows(staticInitDeclaration, workflows, context);


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

Reply via email to