2 * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.restconf.openapi.impl;
10 import java.util.HashMap;
11 import java.util.HashSet;
12 import java.util.List;
14 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
16 public class DefinitionNames {
18 private final HashMap<SchemaNode, String> discriminators;
19 private final Set<String> names;
21 public DefinitionNames() {
22 names = new HashSet<>();
23 discriminators = new HashMap<>();
26 private int pickDiscriminator(final List<String> clearNames, final int discriminator) {
27 for (final String clearName : clearNames) {
28 final String newName = clearName + discriminator;
29 if (names.contains(newName)) {
30 return pickDiscriminator(clearNames, discriminator + 1);
36 String pickDiscriminator(final SchemaNode node, final List<String> clearNames) {
37 String discriminator = "";
38 for (final String clearName: clearNames) {
39 if (names.contains(clearName)) {
40 discriminator = String.valueOf(pickDiscriminator(clearNames, 1));
43 discriminators.put(node, discriminator);
44 for (final String clearName : clearNames) {
45 names.add(clearName + discriminator);
50 void addUnlinkedName(final String name) {
51 if (!names.contains(name)) {
54 throw new IllegalArgumentException(String.format("Definition name:%s already in use", name));
58 boolean isListedNode(final SchemaNode node) {
59 return discriminators.containsKey(node);
62 public String getDiscriminator(final SchemaNode node) {
63 return discriminators.get(node);