Openapi: Missing schema for node processed by another parent 79/111679/3
authorlubos-cicut <lubos.cicut@pantheon.tech>
Mon, 13 May 2024 07:05:04 +0000 (09:05 +0200)
committerIvan Hrasko <ivan.hrasko@pantheon.tech>
Mon, 24 Jun 2024 14:37:30 +0000 (14:37 +0000)
If the same node was a child of more than one parent, only the first
one was processed.

This patch fixes this problem. Now when node is processed it will
check if his clear name is saved in set of names.

JIRA: NETCONF-1309
Change-Id: Ia8360b2e51084001cc2a7a4e4645b301801c3a4c
Signed-off-by: lubos-cicut <lubos.cicut@pantheon.tech>
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/DefinitionNames.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/SchemasStream.java
restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/PropertyEntity.java

index 4423becc63a64314d44a6e8995436b36b5e9fd82..3ac647ddb9a6c5f1202db35eb1c59f2e0e8facef 100644 (file)
@@ -54,8 +54,8 @@ public class DefinitionNames {
         }
     }
 
-    public boolean isListedNode(final SchemaNode node) {
-        return discriminators.containsKey(node);
+    public boolean isListedNode(final SchemaNode node, final String name) {
+        return discriminators.containsKey(node) && names.contains(name);
     }
 
     public String getDiscriminator(final SchemaNode node) {
index 2f88a3d545eec258bb4596c436d06d80e358ead2..a73aa731dc19f90396b326ee7775184b57281e99 100644 (file)
@@ -183,14 +183,12 @@ public final class SchemasStream extends InputStream {
             final SchemaInferenceStack stack, final DefinitionNames definitionNames,
             final ArrayDeque<SchemaEntity> result, final String parentName, final boolean isParentConfig) {
         if (node instanceof ContainerSchemaNode || node instanceof ListSchemaNode) {
-            if (definitionNames.isListedNode(node)) {
+            final var newTitle = title + "_" + node.getQName().getLocalName();
+            if (definitionNames.isListedNode(node, newTitle)) {
                 // This means schema for this node is already processed
                 return;
             }
-            final var newTitle = title + "_" + node.getQName().getLocalName();
-            final var parentNameConfigLocalName = parentName + "_" + node.getQName().getLocalName();
-            final var names = List.of(parentNameConfigLocalName);
-            final var discriminator = definitionNames.pickDiscriminator(node, names);
+            final var discriminator = definitionNames.pickDiscriminator(node, List.of(newTitle));
             final var child = new NodeSchemaEntity(node, newTitle, discriminator, OBJECT_TYPE, stack, parentName,
                 isParentConfig, definitionNames);
             final var isConfig = node.isConfiguration() && isParentConfig;
index efb619f2822c023bd6f5cadb49cac3001dc9065b..1e8b71895976e1f445c6be29b82399587c8a33b3 100644 (file)
@@ -182,10 +182,8 @@ public class PropertyEntity {
         final var nodeName = parentName + "_" + localName;
 
         final String discriminator;
-        if (!definitionNames.isListedNode(schemaNode)) {
-            final var parentNameConfigLocalName = parentName + "_" + localName;
-            final var names = List.of(parentNameConfigLocalName);
-            discriminator = definitionNames.pickDiscriminator(schemaNode, names);
+        if (!definitionNames.isListedNode(schemaNode, nodeName)) {
+            discriminator = definitionNames.pickDiscriminator(schemaNode, List.of(nodeName));
         } else {
             discriminator = definitionNames.getDiscriminator(schemaNode);
         }