property = processLeafListNode(leafList, stack, definitions, definitionNames, oaversion);
} else if (node instanceof ChoiceSchemaNode choice) {
- for (final CaseSchemaNode variant : choice.getCases()) {
- stack.enterSchemaTree(variant.getQName());
- for (final DataSchemaNode childNode : variant.getChildNodes()) {
+ if (!choice.getCases().isEmpty()) {
+ CaseSchemaNode caseSchemaNode = choice.getDefaultCase()
+ .orElse(choice.getCases().stream()
+ .findFirst().get());
+ stack.enterSchemaTree(caseSchemaNode.getQName());
+ for (final DataSchemaNode childNode : caseSchemaNode.getChildNodes()) {
processChildNode(childNode, parentName, definitions, definitionNames, isConfig, stack,
properties, oaversion);
}
private static final String REVISION_DATE = "2009-11-20";
private static final String NAME_2 = "toaster";
private static final String REVISION_DATE_2 = "2009-11-20";
-
+ private static final String CHOICE_TEST_MODULE = "choice-test";
+ private static final String PROPERTIES = "properties";
private final ApiDocGeneratorRFC8040 generator = new ApiDocGeneratorRFC8040(SCHEMA_SERVICE);
/**
assertTrue(properties.has("toasterDoneness"));
assertTrue(properties.has("toasterToastType"));
}
+
+ @Test
+ public void testChoice() {
+ final var module = CONTEXT.findModule(CHOICE_TEST_MODULE).orElseThrow();
+ final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
+ ApiDocServiceImpl.OAversion.V2_0);
+ assertNotNull(doc);
+
+ final var definitions = doc.getDefinitions();
+ JsonNode firstContainer = definitions.get("choice-test_first-container");
+ assertEquals("default-value",
+ firstContainer.get(PROPERTIES).get("leaf-default").get("default").asText());
+ assertFalse(firstContainer.get(PROPERTIES).has("leaf-non-default"));
+
+ JsonNode secondContainer = definitions.get("choice-test_second-container");
+ assertTrue(secondContainer.get(PROPERTIES).has("leaf-first-case"));
+ assertFalse(secondContainer.get(PROPERTIES).has("leaf-second-case"));
+ }
}
--- /dev/null
+module choice-test {
+ namespace "urn:opendaylight:choice-test";
+ prefix "cht";
+
+ container first-container {
+ choice default-choice {
+ default second-case;
+ case first-case {
+ leaf leaf-non-default {
+ type string;
+ }
+ }
+ case second-case {
+ leaf leaf-default {
+ type string;
+ default "default-value";
+ }
+ }
+ }
+ }
+
+ container second-container {
+ choice first-choice {
+ case first-case {
+ leaf leaf-first-case {
+ type string;
+ }
+ }
+ case second-case {
+ leaf leaf-second-case {
+ type string;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file