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 f04c2a3ff2 [incubator-kie-kogito-runtimes#2608] Generating one 
definitions json for each DMN model (#3424)
f04c2a3ff2 is described below

commit f04c2a3ff293658041827b49c3e4799cf59b978e
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Fri Mar 8 08:57:29 2024 +0100

    [incubator-kie-kogito-runtimes#2608] Generating one definitions json for 
each DMN model (#3424)
    
    * [incubator-kie-kogito-runtimes#2608] Generating one definitions json for 
each DMN model
    
    * [incubator-kie-kogito-runtimes#2608] Fix as per PR comment. Add tests.
    
    * [incubator-kie-kogito-runtimes#2608] Fix tests.
    
    * [incubator-kie-kogito-runtimes#2608] Fix tests.
    
    * [incubator-kie-kogito-runtimes#2608] Fix formatting.
    
    ---------
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 .../kie/kogito/codegen/decision/CodegenUtils.java  |  43 ++++
 .../kogito/codegen/decision/DecisionCodegen.java   |  28 +--
 .../decision/DecisionRestResourceGenerator.java    |   3 +-
 .../kogito/codegen/decision/CodegenUtilsTest.java  |  93 ++++++++
 .../Traffic Violation.dmn                          | 241 +++++++++++++++++++++
 .../java/org/kie/kogito/quarkus/dmn/DMNIT.java     |   7 +-
 .../io/quarkus/it/kogito/devmode/DevMojoIT.java    |   2 +-
 .../kie/kogito/integrationtests/quarkus/OASIT.java |  24 +-
 .../java/org/kie/kogito/quarkus/EndpointsIT.java   |   2 +-
 .../java/org/kie/kogito/quarkus/EndpointsIT.java   |   2 +-
 .../integrationtests/springboot/OASTest.java       |  21 +-
 11 files changed, 436 insertions(+), 30 deletions(-)

diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/CodegenUtils.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/CodegenUtils.java
new file mode 100644
index 0000000000..52c03e7c31
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/CodegenUtils.java
@@ -0,0 +1,43 @@
+/*
+ * 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 org.kie.dmn.api.core.DMNModel;
+
+public class CodegenUtils {
+
+    private CodegenUtils() {
+    }
+
+    public static String getDefinitionsFileFromModel(DMNModel dmnModel) {
+        String modelName = geNameForDefinitionsFile(dmnModel);
+        return modelName.replace(" ", "_").replace(".dmn", ".json");
+    }
+
+    static String geNameForDefinitionsFile(DMNModel dmnModel) {
+        if (dmnModel.getResource() != null && 
dmnModel.getResource().getSourcePath() != null) {
+            String resourcePath = 
dmnModel.getResource().getSourcePath().replace('\\', '/');
+            return resourcePath.contains("/") ? 
resourcePath.substring(resourcePath.lastIndexOf('/') + 1) : resourcePath;
+        } else {
+            return dmnModel.getName() + ".dmn";
+        }
+
+    }
+
+}
\ No newline at end of file
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 08a6b97da7..b0944b5409 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
@@ -22,7 +22,6 @@ import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -66,6 +65,7 @@ import org.slf4j.LoggerFactory;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import static java.util.stream.Collectors.toList;
+import static 
org.kie.kogito.codegen.decision.CodegenUtils.getDefinitionsFileFromModel;
 
 public class DecisionCodegen extends AbstractGenerator {
 
@@ -134,22 +134,11 @@ public class DecisionCodegen extends AbstractGenerator {
         List<DecisionRestResourceGenerator> rgs = new ArrayList<>(); // REST 
resources
         List<DMNModel> models = 
resources.stream().map(DMNResource::getDmnModel).collect(Collectors.toList());
 
-        DMNOASResult oasResult = null;
-        try {
-            Comparator<DMNModel> nsNameComparator = 
Comparator.comparing(DMNModel::getNamespace).thenComparing(DMNModel::getName);
-            List<DMNModel> orderedModels = new ArrayList<>(models);
-            Collections.sort(orderedModels, nsNameComparator);
-            oasResult = 
DMNOASGeneratorFactory.generator(orderedModels).build();
-            String jsonContent = new 
ObjectMapper().writeValueAsString(oasResult.getJsonSchemaNode());
-            storeFile(GeneratedFileType.STATIC_HTTP_RESOURCE, 
"dmnDefinitions.json", jsonContent);
-        } catch (Exception e) {
-            LOGGER.error("Error while trying to generate OpenAPI specification 
for the DMN models", e);
-        }
-
         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))
@@ -198,6 +187,19 @@ public class DecisionCodegen extends AbstractGenerator {
         }
     }
 
+    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(),
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java
index 89ddb88e6f..93cbb98d32 100644
--- 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionRestResourceGenerator.java
@@ -62,6 +62,7 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType;
 
 import static com.github.javaparser.StaticJavaParser.parseStatement;
 import static java.util.function.Predicate.not;
+import static 
org.kie.kogito.codegen.decision.CodegenUtils.getDefinitionsFileFromModel;
 
 public class DecisionRestResourceGenerator {
 
@@ -203,7 +204,7 @@ public class DecisionRestResourceGenerator {
             inputRef = 
withOASResult.getNamingPolicy().getRef(identifyInputSet);
             outputRef = 
withOASResult.getNamingPolicy().getRef(identifyOutputSet);
         }
-        final String DMN_DEFINITIONS_JSON = "/dmnDefinitions.json";
+        final String DMN_DEFINITIONS_JSON = "/" + 
getDefinitionsFileFromModel(dmnModel);
         // MP / Quarkus
         final String Q_CTX_PATH = 
context.getApplicationProperty("quarkus.http.root-path").filter(not("/"::equals)).orElse("");
         processAnnForRef(dmnMethod,
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/CodegenUtilsTest.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/CodegenUtilsTest.java
new file mode 100644
index 0000000000..9accd55530
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/CodegenUtilsTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+
+import org.drools.io.FileSystemResource;
+import org.drools.util.FileUtils;
+import org.junit.jupiter.api.Test;
+import org.kie.api.io.Resource;
+import org.kie.dmn.api.core.DMNModel;
+import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.core.internal.utils.DMNRuntimeBuilder;
+import org.kie.kogito.dmn.DMNKogito;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class CodegenUtilsTest {
+
+    @Test
+    void getDefinitionsFileFromModelWithSpace() {
+        File dmnFile = FileUtils.getFile("Traffic Violation.dmn");
+        assertNotNull(dmnFile);
+        assertTrue(dmnFile.exists());
+        Resource dmnResource = new FileSystemResource(dmnFile, 
StandardCharsets.UTF_8.name());
+
+        DMNRuntime dmnRuntime = DMNRuntimeBuilder.fromDefaults()
+                
.setRootClassLoader(Thread.currentThread().getContextClassLoader())
+                .buildConfiguration()
+                .fromResources(Collections.singleton(dmnResource))
+                .getOrElseThrow(e -> new RuntimeException("Error compiling DMN 
model(s)", e));
+        assertThat(dmnRuntime.getModels()).hasSize(1);
+        final DMNModel dmnModel = 
dmnRuntime.getModel("https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF";,
 "Traffic Violation Model Name");
+        assertNotNull(dmnModel);
+        String expected = "Traffic_Violation.json";
+        assertEquals(expected, 
CodegenUtils.getDefinitionsFileFromModel(dmnModel));
+    }
+
+    @Test
+    void geNameForDefinitionsFileWithSourcePath() {
+        File dmnFile = FileUtils.getFile("Traffic Violation.dmn");
+        assertNotNull(dmnFile);
+        assertTrue(dmnFile.exists());
+        Resource dmnResource = new FileSystemResource(dmnFile, 
StandardCharsets.UTF_8.name());
+        DMNRuntime dmnRuntime = DMNRuntimeBuilder.fromDefaults()
+                
.setRootClassLoader(Thread.currentThread().getContextClassLoader())
+                .buildConfiguration()
+                .fromResources(Collections.singleton(dmnResource))
+                .getOrElseThrow(e -> new RuntimeException("Error compiling DMN 
model(s)", e));
+        assertThat(dmnRuntime.getModels()).hasSize(1);
+        final DMNModel dmnModel = 
dmnRuntime.getModel("https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF";,
 "Traffic Violation Model Name");
+        assertNotNull(dmnModel);
+        String expected = "Traffic Violation.dmn";
+        assertEquals(expected, 
CodegenUtils.geNameForDefinitionsFile(dmnModel));
+    }
+
+    @Test
+    void geNameForDefinitionsFileWithoutSourcePath() throws 
FileNotFoundException {
+        File dmnFile = FileUtils.getFile("Traffic Violation.dmn");
+        assertNotNull(dmnFile);
+        assertTrue(dmnFile.exists());
+        DMNRuntime dmnRuntime = DMNKogito.createGenericDMNRuntime(new 
FileReader(dmnFile));
+        assertNotNull(dmnRuntime);
+        assertThat(dmnRuntime.getModels()).hasSize(1);
+        final DMNModel dmnModel = 
dmnRuntime.getModel("https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF";,
 "Traffic Violation Model Name");
+        assertNotNull(dmnModel);
+        String expected = "Traffic Violation Model Name.dmn";
+        assertEquals(expected, 
CodegenUtils.geNameForDefinitionsFile(dmnModel));
+    }
+}
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/resources/decision-model-space-name/Traffic
 Violation.dmn 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/resources/decision-model-space-name/Traffic
 Violation.dmn
new file mode 100644
index 0000000000..7665bc2c90
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/resources/decision-model-space-name/Traffic
 Violation.dmn        
@@ -0,0 +1,241 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/";
+                 
xmlns="https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF";
+                 xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/";
+                 xmlns:kie="http://www.drools.org/kie/dmn/1.2";
+                 xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/";
+                 xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/";
+                 xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/";
+                 id="_1C792953-80DB-4B32-99EB-25FBE32BAF9E"
+                 name="Traffic Violation Model Name"
+                 
expressionLanguage="http://www.omg.org/spec/DMN/20180521/FEEL/";
+                 typeLanguage="http://www.omg.org/spec/DMN/20180521/FEEL/";
+                 
namespace="https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF";>
+  <dmn:extensionElements/>
+  <dmn:itemDefinition id="_63824D3F-9173-446D-A940-6A7F0FA056BB" 
name="tDriver" isCollection="false">
+    <dmn:itemComponent id="_9DAB5DAA-3B44-4F6D-87F2-95125FB2FEE4" name="Name" 
isCollection="false">
+      <dmn:typeRef>string</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_856BA8FA-EF7B-4DF9-A1EE-E28263CE9955" name="Age" 
isCollection="false">
+      <dmn:typeRef>number</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_FDC2CE03-D465-47C2-A311-98944E8CC23F" name="State" 
isCollection="false">
+      <dmn:typeRef>string</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_D6FD34C4-00DC-4C79-B1BF-BBCF6FC9B6D7" name="City" 
isCollection="false">
+      <dmn:typeRef>string</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_7110FE7E-1A38-4C39-B0EB-AEEF06BA37F4" 
name="Points" isCollection="false">
+      <dmn:typeRef>number</dmn:typeRef>
+    </dmn:itemComponent>
+  </dmn:itemDefinition>
+  <dmn:itemDefinition id="_40731093-0642-4588-9183-1660FC55053B" 
name="tViolation" isCollection="false">
+    <dmn:itemComponent id="_39E88D9F-AE53-47AD-B3DE-8AB38D4F50B3" name="Code" 
isCollection="false">
+      <dmn:typeRef>string</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_1648EA0A-2463-4B54-A12A-D743A3E3EE7B" name="Date" 
isCollection="false">
+      <dmn:typeRef>date</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_9F129EAA-4E71-4D99-B6D0-84EEC3AC43CC" name="Type" 
isCollection="false">
+      <dmn:typeRef>string</dmn:typeRef>
+      <dmn:allowedValues kie:constraintType="enumeration" 
id="_626A8F9C-9DD1-44E0-9568-0F6F8F8BA228">
+        <dmn:text>"speed", "parking", "driving under the influence"</dmn:text>
+      </dmn:allowedValues>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_DDD10D6E-BD38-4C79-9E2F-8155E3A4B438" name="Speed 
Limit" isCollection="false">
+      <dmn:typeRef>number</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_229F80E4-2892-494C-B70D-683ABF2345F6" name="Actual 
Speed" isCollection="false">
+      <dmn:typeRef>number</dmn:typeRef>
+    </dmn:itemComponent>
+  </dmn:itemDefinition>
+  <dmn:itemDefinition id="_2D4F30EE-21A6-4A78-A524-A5C238D433AE" name="tFine" 
isCollection="false">
+    <dmn:itemComponent id="_B9F70BC7-1995-4F51-B949-1AB65538B405" 
name="Amount" isCollection="false">
+      <dmn:typeRef>number</dmn:typeRef>
+    </dmn:itemComponent>
+    <dmn:itemComponent id="_F49085D6-8F08-4463-9A1A-EF6B57635DBD" 
name="Points" isCollection="false">
+      <dmn:typeRef>number</dmn:typeRef>
+    </dmn:itemComponent>
+  </dmn:itemDefinition>
+  <dmn:inputData id="_1929CBD5-40E0-442D-B909-49CEDE0101DC" name="Violation">
+    <dmn:variable id="_C16CF9B1-5FAB-48A0-95E0-5FCD661E0406" name="Violation" 
typeRef="tViolation"/>
+  </dmn:inputData>
+  <dmn:decision id="_4055D956-1C47-479C-B3F4-BAEB61F1C929" name="Fine">
+    <dmn:variable id="_8C1EAC83-F251-4D94-8A9E-B03ACF6849CD" name="Fine" 
typeRef="tFine"/>
+    <dmn:informationRequirement id="_800A3BBB-90A3-4D9D-BA5E-A311DED0134F">
+      <dmn:requiredInput href="#_1929CBD5-40E0-442D-B909-49CEDE0101DC"/>
+    </dmn:informationRequirement>
+    <dmn:decisionTable id="_C8F7F579-E06C-4A2F-8485-65FAFAC3FE6A" 
hitPolicy="UNIQUE" preferredOrientation="Rule-as-Row">
+      <dmn:input id="_B53A6F0D-F72C-41EF-96B3-F31269AC0FED">
+        <dmn:inputExpression id="_974C8D01-728F-4CE5-8C69-BE884125B859" 
typeRef="string">
+          <dmn:text>Violation.Type</dmn:text>
+        </dmn:inputExpression>
+      </dmn:input>
+      <dmn:input id="_D5319F80-1C59-4736-AF2D-D29DE6B7E76D">
+        <dmn:inputExpression id="_3FEB4DE3-90C6-438E-99BF-9BB1BF5B078A" 
typeRef="number">
+          <dmn:text>Violation.Actual Speed - Violation.Speed Limit</dmn:text>
+        </dmn:inputExpression>
+      </dmn:input>
+      <dmn:output id="_9012031F-9C01-44E5-8CD2-E6704D594504" name="Amount" 
typeRef="number"/>
+      <dmn:output id="_7CAC8240-E1A5-4FEB-A0D4-B8613F0DE54B" name="Points" 
typeRef="number"/>
+      <dmn:rule id="_424A80AE-916F-4451-9B6B-71557F7EC65A">
+        <dmn:inputEntry id="_EDA4F336-AA28-4F5F-ADFC-401E6DCC8D35">
+          <dmn:text>"speed"</dmn:text>
+        </dmn:inputEntry>
+        <dmn:inputEntry id="_246AAB08-A945-4599-9220-7C24B6716FDD">
+          <dmn:text>[10..30)</dmn:text>
+        </dmn:inputEntry>
+        <dmn:outputEntry id="_E49345EE-51D3-47C7-B658-3607E723FF37">
+          <dmn:text>500</dmn:text>
+        </dmn:outputEntry>
+        <dmn:outputEntry id="_1D56F3CB-6BAE-4415-940F-00F37121813D">
+          <dmn:text>3</dmn:text>
+        </dmn:outputEntry>
+      </dmn:rule>
+      <dmn:rule id="_B1ECE6A9-6B82-4A85-A7CA-5F96CDB0DCB6">
+        <dmn:inputEntry id="_2390F686-65CF-40FF-BF9A-72DFBAEBACAC">
+          <dmn:text>"speed"</dmn:text>
+        </dmn:inputEntry>
+        <dmn:inputEntry id="_8CEBE4D5-DBEF-46EF-BD95-7B96148B6D8A">
+          <dmn:text>&gt;= 30</dmn:text>
+        </dmn:inputEntry>
+        <dmn:outputEntry id="_5FCC56B7-6BAA-4B09-AC61-7EB9D4CD58C3">
+          <dmn:text>1000</dmn:text>
+        </dmn:outputEntry>
+        <dmn:outputEntry id="_79FF8FDD-3299-4DFD-AA14-D2022504BDAD">
+          <dmn:text>7</dmn:text>
+        </dmn:outputEntry>
+      </dmn:rule>
+      <dmn:rule id="_8FC7068C-A3FD-44D9-AC2B-69C160A12E5D">
+        <dmn:inputEntry id="_02EEE8A9-1AD7-4708-8EC8-9B4177B05167">
+          <dmn:text>"parking"</dmn:text>
+        </dmn:inputEntry>
+        <dmn:inputEntry id="_A5141FF4-8D63-49DB-8979-3B64A3BD9A82">
+          <dmn:text>-</dmn:text>
+        </dmn:inputEntry>
+        <dmn:outputEntry id="_EFDA632D-113D-46C9-94B8-78E9F9770CA4">
+          <dmn:text>100</dmn:text>
+        </dmn:outputEntry>
+        <dmn:outputEntry id="_05F86973-52CE-4C9D-B785-47B6340D10FD">
+          <dmn:text>1</dmn:text>
+        </dmn:outputEntry>
+      </dmn:rule>
+      <dmn:rule id="_A742DF2B-DC91-4166-9773-6EF86A45A625">
+        <dmn:inputEntry id="_F5B5AE87-D9E6-4142-B01D-D79D4BA49EEE">
+          <dmn:text>"driving under the influence"</dmn:text>
+        </dmn:inputEntry>
+        <dmn:inputEntry id="_BD2A43F5-46D8-436A-B8A1-D98747C836B1">
+          <dmn:text>-</dmn:text>
+        </dmn:inputEntry>
+        <dmn:outputEntry id="_ECAF3378-46B6-4F40-B95A-E90DB700BF7D">
+          <dmn:text>1000</dmn:text>
+        </dmn:outputEntry>
+        <dmn:outputEntry id="_F0016A9C-D1D0-472A-9FB3-ABE77AD15F7D">
+          <dmn:text>5</dmn:text>
+        </dmn:outputEntry>
+      </dmn:rule>
+    </dmn:decisionTable>
+  </dmn:decision>
+  <dmn:inputData id="_1F9350D7-146D-46F1-85D8-15B5B68AF22A" name="Driver">
+    <dmn:variable id="_A80F16DF-0DB4-43A2-B041-32900B1A3F3D" name="Driver" 
typeRef="tDriver"/>
+  </dmn:inputData>
+  <dmn:decision id="_8A408366-D8E9-4626-ABF3-5F69AA01F880" name="Should the 
driver be suspended?">
+    <dmn:question>Should the driver be suspended due to points on his 
license?</dmn:question>
+    <dmn:allowedAnswers>"Yes", "No"</dmn:allowedAnswers>
+    <dmn:variable id="_40387B66-5D00-48C8-BB90-E83EE3332C72" name="Should the 
driver be suspended?" typeRef="string"/>
+    <dmn:informationRequirement id="_982211B1-5246-49CD-BE85-3211F71253CF">
+      <dmn:requiredInput href="#_1F9350D7-146D-46F1-85D8-15B5B68AF22A"/>
+    </dmn:informationRequirement>
+    <dmn:informationRequirement id="_AEC4AA5F-50C3-4FED-A0C2-261F90290731">
+      <dmn:requiredDecision href="#_4055D956-1C47-479C-B3F4-BAEB61F1C929"/>
+    </dmn:informationRequirement>
+    <dmn:context id="_F39732F1-0AA7-468F-86C4-DCC07E6F81CF">
+      <dmn:contextEntry>
+        <dmn:variable id="_09385E8D-68E0-4DFD-AAD8-141C15C96B71" name="Total 
Points" typeRef="number"/>
+        <dmn:literalExpression id="_F1BEBF16-033F-4A25-9523-CAC23ACC5DFC">
+          <dmn:text>Driver.Points + Fine.Points</dmn:text>
+        </dmn:literalExpression>
+      </dmn:contextEntry>
+      <dmn:contextEntry>
+        <dmn:literalExpression id="_1929D813-B1C9-43C5-9497-CE5D8B2B040C">
+          <dmn:text>if Total Points >= 20 then "Yes" else "No"</dmn:text>
+        </dmn:literalExpression>
+      </dmn:contextEntry>
+    </dmn:context>
+  </dmn:decision>
+  <dmndi:DMNDI>
+    <dmndi:DMNDiagram>
+      <di:extension>
+        <kie:ComponentsWidthsExtension>
+          <kie:ComponentWidths 
dmnElementRef="_C8F7F579-E06C-4A2F-8485-65FAFAC3FE6A">
+            <kie:width>50.0</kie:width>
+            <kie:width>254.0</kie:width>
+            <kie:width>329.0</kie:width>
+            <kie:width>119.0</kie:width>
+            <kie:width>100.0</kie:width>
+            <kie:width>186.0</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_F39732F1-0AA7-468F-86C4-DCC07E6F81CF">
+            <kie:width>50.0</kie:width>
+            <kie:width>100.0</kie:width>
+            <kie:width>398.0</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_F1BEBF16-033F-4A25-9523-CAC23ACC5DFC">
+            <kie:width>398.0</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_1929D813-B1C9-43C5-9497-CE5D8B2B040C">
+            <kie:width>398.0</kie:width>
+          </kie:ComponentWidths>
+        </kie:ComponentsWidthsExtension>
+      </di:extension>
+      <dmndi:DMNShape id="dmnshape-_1929CBD5-40E0-442D-B909-49CEDE0101DC" 
dmnElementRef="_1929CBD5-40E0-442D-B909-49CEDE0101DC" isCollapsed="false">
+        <dmndi:DMNStyle>
+          <dmndi:FillColor red="255" green="255" blue="255"/>
+          <dmndi:StrokeColor red="0" green="0" blue="0"/>
+          <dmndi:FontColor red="0" green="0" blue="0"/>
+        </dmndi:DMNStyle>
+        <dc:Bounds x="708" y="350" width="100" height="50"/>
+        <dmndi:DMNLabel/>
+      </dmndi:DMNShape>
+      <dmndi:DMNShape id="dmnshape-_4055D956-1C47-479C-B3F4-BAEB61F1C929" 
dmnElementRef="_4055D956-1C47-479C-B3F4-BAEB61F1C929" isCollapsed="false">
+        <dmndi:DMNStyle>
+          <dmndi:FillColor red="255" green="255" blue="255"/>
+          <dmndi:StrokeColor red="0" green="0" blue="0"/>
+          <dmndi:FontColor red="0" green="0" blue="0"/>
+        </dmndi:DMNStyle>
+        <dc:Bounds x="709" y="210" width="100" height="50"/>
+        <dmndi:DMNLabel/>
+      </dmndi:DMNShape>
+      <dmndi:DMNShape id="dmnshape-_1F9350D7-146D-46F1-85D8-15B5B68AF22A" 
dmnElementRef="_1F9350D7-146D-46F1-85D8-15B5B68AF22A" isCollapsed="false">
+        <dmndi:DMNStyle>
+          <dmndi:FillColor red="255" green="255" blue="255"/>
+          <dmndi:StrokeColor red="0" green="0" blue="0"/>
+          <dmndi:FontColor red="0" green="0" blue="0"/>
+        </dmndi:DMNStyle>
+        <dc:Bounds x="369" y="344" width="100" height="50"/>
+        <dmndi:DMNLabel/>
+      </dmndi:DMNShape>
+      <dmndi:DMNShape id="dmnshape-_8A408366-D8E9-4626-ABF3-5F69AA01F880" 
dmnElementRef="_8A408366-D8E9-4626-ABF3-5F69AA01F880" isCollapsed="false">
+        <dmndi:DMNStyle>
+          <dmndi:FillColor red="255" green="255" blue="255"/>
+          <dmndi:StrokeColor red="0" green="0" blue="0"/>
+          <dmndi:FontColor red="0" green="0" blue="0"/>
+        </dmndi:DMNStyle>
+        <dc:Bounds x="534" y="83" width="133" height="63"/>
+        <dmndi:DMNLabel/>
+      </dmndi:DMNShape>
+      <dmndi:DMNEdge id="dmnedge-_800A3BBB-90A3-4D9D-BA5E-A311DED0134F" 
dmnElementRef="_800A3BBB-90A3-4D9D-BA5E-A311DED0134F">
+        <di:waypoint x="758" y="375"/>
+        <di:waypoint x="759" y="235"/>
+      </dmndi:DMNEdge>
+      <dmndi:DMNEdge id="dmnedge-_982211B1-5246-49CD-BE85-3211F71253CF" 
dmnElementRef="_982211B1-5246-49CD-BE85-3211F71253CF">
+        <di:waypoint x="419" y="369"/>
+        <di:waypoint x="600.5" y="114.5"/>
+      </dmndi:DMNEdge>
+      <dmndi:DMNEdge id="dmnedge-_AEC4AA5F-50C3-4FED-A0C2-261F90290731" 
dmnElementRef="_AEC4AA5F-50C3-4FED-A0C2-261F90290731">
+        <di:waypoint x="759" y="235"/>
+        <di:waypoint x="600.5" y="114.5"/>
+      </dmndi:DMNEdge>
+    </dmndi:DMNDiagram>
+  </dmndi:DMNDI>
+</dmn:definitions>
\ No newline at end of file
diff --git 
a/quarkus/extensions/kogito-quarkus-decisions-extension/kogito-quarkus-decisions-integration-test/src/test/java/org/kie/kogito/quarkus/dmn/DMNIT.java
 
b/quarkus/extensions/kogito-quarkus-decisions-extension/kogito-quarkus-decisions-integration-test/src/test/java/org/kie/kogito/quarkus/dmn/DMNIT.java
index 8afe0a2f32..a931ee0397 100644
--- 
a/quarkus/extensions/kogito-quarkus-decisions-extension/kogito-quarkus-decisions-integration-test/src/test/java/org/kie/kogito/quarkus/dmn/DMNIT.java
+++ 
b/quarkus/extensions/kogito-quarkus-decisions-extension/kogito-quarkus-decisions-integration-test/src/test/java/org/kie/kogito/quarkus/dmn/DMNIT.java
@@ -38,7 +38,12 @@ public class DMNIT {
     @Test
     public void testOASdmnDefinitions() {
         RestAssured.given()
-                .get("/dmnDefinitions.json")
+                .get("/OneOfEachType.json")
+                .then()
+                .statusCode(200)
+                .body("definitions", aMapWithSize(greaterThan(0)));
+        RestAssured.given()
+                .get("/a.json")
                 .then()
                 .statusCode(200)
                 .body("definitions", aMapWithSize(greaterThan(0)));
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 b206fab7b2..c8edef6f27 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
@@ -448,7 +448,7 @@ public class DevMojoIT extends RunAndCheckMojoTestBase {
 
         // static resource
         given().baseUri("http://localhost:"; + httpPort)
-                .get("/dmnDefinitions.json")
+                .get("/hello.json")
                 .then()
                 .statusCode(200)
                 .body("definitions", aMapWithSize(greaterThan(0)));
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-decisions/src/test/java/org/kie/kogito/integrationtests/quarkus/OASIT.java
 
b/quarkus/integration-tests/integration-tests-quarkus-decisions/src/test/java/org/kie/kogito/integrationtests/quarkus/OASIT.java
index 578c38aafe..9ffd072596 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-decisions/src/test/java/org/kie/kogito/integrationtests/quarkus/OASIT.java
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-decisions/src/test/java/org/kie/kogito/integrationtests/quarkus/OASIT.java
@@ -20,8 +20,6 @@ package org.kie.kogito.integrationtests.quarkus;
 
 import java.net.URL;
 
-import org.junit.jupiter.api.Test;
-
 import io.quarkus.test.common.http.TestHTTPResource;
 import io.quarkus.test.junit.QuarkusIntegrationTest;
 import io.restassured.RestAssured;
@@ -30,6 +28,9 @@ import io.swagger.v3.oas.models.PathItem;
 import io.swagger.v3.parser.OpenAPIV3Parser;
 import io.swagger.v3.parser.core.models.ParseOptions;
 import io.swagger.v3.parser.core.models.SwaggerParseResult;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.aMapWithSize;
@@ -77,14 +78,23 @@ class OASIT {
         OpenAPI openAPI = result.getOpenAPI();
         PathItem p1 = openAPI.getPaths().get("/" + DMN_MODEL_NAME);
         assertThat(p1).isNotNull();
-        
assertThat(p1.getPost().getRequestBody().getContent().get("application/json").getSchema().get$ref()).startsWith("/dmnDefinitions.json#");
-        
assertThat(p1.getPost().getResponses().getDefault().getContent().get("application/json").getSchema().get$ref()).startsWith("/dmnDefinitions.json#");
+        
assertThat(p1.getPost().getRequestBody().getContent().get("application/json").getSchema().get$ref()).startsWith("/basicAdd.json#");
+        
assertThat(p1.getPost().getResponses().getDefault().getContent().get("application/json").getSchema().get$ref()).startsWith("/basicAdd.json#");
     }
 
-    @Test
-    public void testOASdmnDefinitions() {
+    @ParameterizedTest
+    @ValueSource(strings = { "basicAdd",
+            "DScoercion",
+            "ElementAtIndex",
+            "FaceMask",
+            "Hospitals",
+            "HospitalStatus",
+            "java_function_context",
+            "OneOfEachType",
+            "StatusService" })
+    public void testOASdmnDefinitions(String name) {
         RestAssured.given()
-                .get("/dmnDefinitions.json")
+                .get("/" + name + ".json")
                 .then()
                 .statusCode(200)
                 .body("definitions", aMapWithSize(greaterThan(0)));
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-resteasy-classic/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
 
b/quarkus/integration-tests/integration-tests-quarkus-resteasy-classic/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
index d064772adf..97b0691952 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-resteasy-classic/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-resteasy-classic/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
@@ -70,7 +70,7 @@ public class EndpointsIT {
         given()
                 .contentType(ContentType.JSON)
                 .when()
-                .get("/dmnDefinitions.json")
+                .get("/a.json")
                 .then()
                 .statusCode(200)
                 .body("definitions.tAddress.type", is("object"));
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-resteasy-reactive/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
 
b/quarkus/integration-tests/integration-tests-quarkus-resteasy-reactive/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
index d064772adf..97b0691952 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-resteasy-reactive/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-resteasy-reactive/src/test/java/org/kie/kogito/quarkus/EndpointsIT.java
@@ -70,7 +70,7 @@ public class EndpointsIT {
         given()
                 .contentType(ContentType.JSON)
                 .when()
-                .get("/dmnDefinitions.json")
+                .get("/a.json")
                 .then()
                 .statusCode(200)
                 .body("definitions.tAddress.type", is("object"));
diff --git 
a/springboot/integration-tests/src/it/integration-tests-springboot-decisions-it/src/test/java/org/kie/kogito/integrationtests/springboot/OASTest.java
 
b/springboot/integration-tests/src/it/integration-tests-springboot-decisions-it/src/test/java/org/kie/kogito/integrationtests/springboot/OASTest.java
index f748db2ad3..6b1227ba18 100644
--- 
a/springboot/integration-tests/src/it/integration-tests-springboot-decisions-it/src/test/java/org/kie/kogito/integrationtests/springboot/OASTest.java
+++ 
b/springboot/integration-tests/src/it/integration-tests-springboot-decisions-it/src/test/java/org/kie/kogito/integrationtests/springboot/OASTest.java
@@ -28,6 +28,8 @@ import io.swagger.v3.parser.core.models.ParseOptions;
 import io.swagger.v3.parser.core.models.SwaggerParseResult;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -78,14 +80,23 @@ class OASTest extends BaseRestTest {
         OpenAPI openAPI = result.getOpenAPI();
         PathItem p1 = openAPI.getPaths().get("/" + DMN_MODEL_NAME);
         assertThat(p1).isNotNull();
-        
assertThat(p1.getPost().getRequestBody().getContent().get("application/json").getSchema().get$ref()).startsWith("/dmnDefinitions.json#");
-        
assertThat(p1.getPost().getResponses().getDefault().getContent().get("application/json").getSchema().get$ref()).startsWith("/dmnDefinitions.json#");
+        
assertThat(p1.getPost().getRequestBody().getContent().get("application/json").getSchema().get$ref()).startsWith("/basicAdd.json#");
+        
assertThat(p1.getPost().getResponses().getDefault().getContent().get("application/json").getSchema().get$ref()).startsWith("/basicAdd.json#");
     }
 
-    @Test
-    public void testOASdmnDefinitions() {
+    @ParameterizedTest
+    @ValueSource(strings = {"basicAdd",
+            "DScoercion",
+            "ElementAtIndex",
+            "FaceMask",
+            "Hospitals",
+            "HospitalStatus",
+            "java_function_context",
+            "OneOfEachType",
+            "StatusService"})
+    public void testOASdmnDefinitions(String name) {
         RestAssured.given()
-                .get("/dmnDefinitions.json")
+                .get("/" + name + ".json")
                 .then()
                 .statusCode(200)
                 .body("definitions", aMapWithSize(greaterThan(0)));


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


Reply via email to