Change schema for GET XML example 51/106651/5
authorŠimon Ukuš <simon.ukus@pantheon.tech>
Wed, 21 Jun 2023 10:17:03 +0000 (12:17 +0200)
committerIvan Hrasko <ivan.hrasko@pantheon.tech>
Tue, 27 Jun 2023 12:50:33 +0000 (12:50 +0000)
The XML example for GET request in OpenApi UI was different
to the one being actually returned. This patch changes the schema
used for that example, making it consistent with what is actually
returned in the response.

We still keep support for OAversion.V2_0, for which the change was
not applied. That is because this version does not support different
schemas for different MIME types

JIRA: NETCONF-1059
Change-Id: Ie2d128b6de43d705c93d509c287cabcbc719e591
Signed-off-by: Šimon Ukuš <simon.ukus@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
(cherry picked from commit af6b9fe02a26fdd789470f0e8ab4c9062202c3a9)

restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/model/builder/OperationBuilder.java

index 18f6cb3e99edcd0e71e2e711d0ff7a999226f61c..987a97eb888adaada12ff920192dd91aa67e0119 100644 (file)
@@ -500,8 +500,10 @@ public abstract class BaseYangSwaggerGenerator {
 
         final String nodeName = node.getQName().getLocalName();
 
-        final String defName = parentName + "_" + nodeName + TOP + discriminator;
-        final ObjectNode get = buildGet(node, moduleName, deviceName, pathParams, defName, isConfig, oaversion);
+        final String defName = parentName + "_" + nodeName + discriminator;
+        final String defNameTop = parentName + "_" + nodeName + TOP + discriminator;
+        final ObjectNode get = buildGet(node, moduleName, deviceName, pathParams, defName, defNameTop,
+            isConfig, oaversion);
         operations.put("get", get);
 
 
index 1031b62c23943bdabe1984c3978063682a657f67..6725fdbccd78dbae4a7b239535f9463730b9ea0e 100644 (file)
@@ -105,7 +105,8 @@ public final class OperationBuilder {
 
     public static ObjectNode buildGet(final DataSchemaNode node, final String moduleName,
                                       final Optional<String> deviceName, final ArrayNode pathParams,
-                                      final String defName, final boolean isConfig, final OAversion oaversion) {
+                                      final String defName, final String defNameTop, final boolean isConfig,
+                                      final OAversion oaversion) {
         final ObjectNode value = JsonNodeFactory.instance.objectNode();
         value.put(DESCRIPTION_KEY, node.getDescription().orElse(""));
         value.put(SUMMARY_KEY, buildSummaryValue(HttpMethod.GET, moduleName, deviceName,
@@ -119,9 +120,11 @@ public final class OperationBuilder {
 
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();
         final ObjectNode schema = JsonNodeFactory.instance.objectNode();
-        schema.put(REF_KEY, getAppropriateModelPrefix(oaversion) + defName);
+        final ObjectNode xmlSchema = JsonNodeFactory.instance.objectNode();
+        schema.put(REF_KEY, getAppropriateModelPrefix(oaversion) + defNameTop);
+        xmlSchema.put(REF_KEY, getAppropriateModelPrefix(oaversion) + defName);
         responses.set(String.valueOf(Response.Status.OK.getStatusCode()),
-                buildResponse(Response.Status.OK.getReasonPhrase(), Optional.of(schema), oaversion));
+            buildResponse(Response.Status.OK.getReasonPhrase(), schema, xmlSchema, oaversion));
 
         value.set(RESPONSES_KEY, responses);
         return value;
@@ -297,6 +300,28 @@ public final class OperationBuilder {
         return mimeTypeValue;
     }
 
+    public static ObjectNode buildResponse(final String description, final ObjectNode schema,
+            final ObjectNode xmlSchema, final OAversion oaversion) {
+        final ObjectNode response = JsonNodeFactory.instance.objectNode();
+
+        if (oaversion.equals(OAversion.V3_0)) {
+            final ObjectNode content = JsonNodeFactory.instance.objectNode();
+            final ObjectNode body = JsonNodeFactory.instance.objectNode();
+            final ObjectNode xmlBody = JsonNodeFactory.instance.objectNode();
+
+            body.set(SCHEMA_KEY, schema);
+            xmlBody.set(SCHEMA_KEY, xmlSchema);
+            content.set(MediaType.APPLICATION_JSON, body);
+            content.set(MediaType.APPLICATION_XML, xmlBody);
+
+            response.set(CONTENT_KEY, content);
+        } else {
+            response.set(SCHEMA_KEY, schema);
+        }
+        response.put(DESCRIPTION_KEY, description);
+        return response;
+    }
+
     public static ObjectNode buildResponse(final String description, final Optional<ObjectNode> schema,
                                            final OAversion oaversion) {
         final ObjectNode response = JsonNodeFactory.instance.objectNode();