Refactor creating unique parameter name 21/106921/2
authorYaroslav Lastivka <yaroslav.lastivka@pantheon.tech>
Wed, 21 Jun 2023 12:37:15 +0000 (15:37 +0300)
committerIvan Hrasko <ivan.hrasko@pantheon.tech>
Fri, 14 Jul 2023 11:22:38 +0000 (11:22 +0000)
Create set containing already existing parameter names and use
simple while loop instead of nested for loops.

JIRA: NETCONF-1060
Change-Id: I34359182cfc1690947cf8ddd4ead297d4039e619
Signed-off-by: Yaroslav Lastivka <yaroslav.lastivka@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
(cherry picked from commit 1782f5af66c06f0df9a942bab22155a1b5835405)

restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/BaseYangOpenApiGenerator.java

index 16068315408c301d4a712d8de072b20f383f4dad..ca94e59484af51f6fc7a343fe65a476a18d3fd48 100644 (file)
@@ -18,7 +18,6 @@ import static org.opendaylight.restconf.openapi.model.builder.OperationBuilder.b
 import static org.opendaylight.restconf.openapi.model.builder.OperationBuilder.getTypeParentNode;
 import static org.opendaylight.restconf.openapi.util.RestDocgenUtil.resolvePathArgumentsName;
 
-import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -37,6 +36,8 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
 import javax.ws.rs.core.UriInfo;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
@@ -380,6 +381,9 @@ public abstract class BaseYangOpenApiGenerator {
     private String createPath(final DataSchemaNode schemaNode, final ArrayNode pathParams, final String localName) {
         final StringBuilder path = new StringBuilder();
         path.append(localName);
+        final Set<String> parameters = StreamSupport.stream(pathParams.spliterator(), false)
+            .map(p -> p.get("name").asText())
+            .collect(Collectors.toSet());
 
         if (schemaNode instanceof ListSchemaNode) {
             String prefix = "=";
@@ -387,17 +391,9 @@ public abstract class BaseYangOpenApiGenerator {
             for (final QName listKey : ((ListSchemaNode) schemaNode).getKeyDefinition()) {
                 final String keyName = listKey.getLocalName();
                 String paramName = keyName;
-                for (final JsonNode pathParam : pathParams) {
-                    if (paramName.equals(pathParam.get("name").asText())) {
-                        paramName = keyName + discriminator;
-                        discriminator++;
-                        for (final JsonNode pathParameter : pathParams) {
-                            if (paramName.equals(pathParameter.get("name").asText())) {
-                                paramName = keyName + discriminator;
-                                discriminator++;
-                            }
-                        }
-                    }
+                while (!parameters.add(paramName)) {
+                    paramName = keyName + discriminator;
+                    discriminator++;
                 }
 
                 final String pathParamIdentifier = prefix + "{" + paramName + "}";