final ObjectNode properties = JsonNodeFactory.instance.objectNode();
final ArrayNode required = JsonNodeFactory.instance.arrayNode();
for (final DataSchemaNode node : nodes) {
- stack.enterSchemaTree(node.getQName());
if (!isConfig || node.isConfiguration()) {
- /*
- Add module name prefix to property name, when needed, when ServiceNow can process colons,
- use RestDocGenUtil#resolveNodesName for creating property name
- */
- final String propertyName = node.getQName().getLocalName();
- final ObjectNode property;
- if (node instanceof LeafSchemaNode leaf) {
- processLeafNode(leaf, propertyName, properties, required, stack, definitions, definitionNames,
- oaversion);
- } else if (node instanceof AnyxmlSchemaNode anyxml) {
- processAnyXMLNode(anyxml, propertyName, properties, required);
- } else if (node instanceof AnydataSchemaNode anydata) {
- processAnydataNode(anydata, propertyName, properties, required);
- } else {
- if (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode) {
- property = processDataNodeContainer((DataNodeContainer) node, parentName, definitions,
- definitionNames, isConfig, stack, oaversion);
- if (!isConfig) {
- processActionNodeContainer(node, parentName, definitions, definitionNames, stack,
- oaversion);
- }
- } else if (node instanceof LeafListSchemaNode leafList) {
- property = processLeafListNode(leafList, stack, definitions, definitionNames, oaversion);
-
- } else if (node instanceof ChoiceSchemaNode choice) {
- for (final CaseSchemaNode variant : choice.getCases()) {
- stack.enterSchemaTree(variant.getQName());
- processChoiceNode(variant.getChildNodes(), parentName, definitions, definitionNames,
- isConfig, stack, properties, oaversion);
- stack.exit();
- }
- stack.exit();
- // FIXME dangerous statement here! Try to rework without continue.
- continue;
- } else {
- throw new IllegalArgumentException("Unknown DataSchemaNode type: " + node.getClass());
- }
- properties.set(propertyName, property);
- }
+ processChildNode(node, parentName, definitions, definitionNames, isConfig, stack, properties,
+ oaversion);
}
- stack.exit();
}
parentNode.set(PROPERTIES_KEY, properties);
setRequiredIfNotEmpty(parentNode, required);
return properties;
}
+ private void processChildNode(
+ final DataSchemaNode node, final String parentName, final ObjectNode definitions,
+ final DefinitionNames definitionNames, final boolean isConfig,
+ final SchemaInferenceStack stack, final ObjectNode properties, final OAversion oaversion)
+ throws IOException {
+
+ stack.enterSchemaTree(node.getQName());
+
+ /*
+ Add module name prefix to property name, when needed, when ServiceNow can process colons,
+ use RestDocGenUtil#resolveNodesName for creating property name
+ */
+ final String name = node.getQName().getLocalName();
+
+ if (node instanceof LeafSchemaNode leaf) {
+ processLeafNode(leaf, name, properties, JsonNodeFactory.instance.arrayNode(), stack, definitions,
+ definitionNames, oaversion);
+
+ } else if (node instanceof AnyxmlSchemaNode anyxml) {
+ processAnyXMLNode(anyxml, name, properties, JsonNodeFactory.instance.arrayNode());
+
+ } else if (node instanceof AnydataSchemaNode anydata) {
+ processAnydataNode(anydata, name, properties, JsonNodeFactory.instance.arrayNode());
+
+ } else {
+
+ final ObjectNode property;
+ if (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode) {
+ property = processDataNodeContainer((DataNodeContainer) node, parentName, definitions,
+ definitionNames, isConfig, stack, oaversion);
+ if (!isConfig) {
+ processActionNodeContainer(node, parentName, definitions, definitionNames, stack, oaversion);
+ }
+ } else if (node instanceof LeafListSchemaNode leafList) {
+ 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()) {
+ processChildNode(childNode, parentName, definitions, definitionNames, isConfig, stack,
+ properties, oaversion);
+ }
+ stack.exit();
+ }
+ property = null;
+
+ } else {
+ throw new IllegalArgumentException("Unknown DataSchemaNode type: " + node.getClass());
+ }
+ if (property != null) {
+ properties.set(name, property);
+ }
+ }
+
+ stack.exit();
+ }
+
private ObjectNode processLeafListNode(final LeafListSchemaNode listNode, final SchemaInferenceStack stack,
final ObjectNode definitions, final DefinitionNames definitionNames,
final OAversion oaversion) {
return props;
}
- private void processChoiceNode(
- final Iterable<? extends DataSchemaNode> nodes, final String parentName, final ObjectNode definitions,
- final DefinitionNames definitionNames, final boolean isConfig,
- final SchemaInferenceStack stack, final ObjectNode properties, final OAversion oaversion)
- throws IOException {
- for (final DataSchemaNode node : nodes) {
- stack.enterSchemaTree(node.getQName());
- /*
- Add module name prefix to property name, when needed, when ServiceNow can process colons,
- use RestDocGenUtil#resolveNodesName for creating property name
- */
- final String name = node.getQName().getLocalName();
- final ObjectNode property;
-
- /*
- Ignore mandatoriness(passing unreferenced arrayNode to process...Node), because choice produces multiple
- properties
- */
- if (node instanceof LeafSchemaNode leaf) {
- processLeafNode(leaf, name, properties, JsonNodeFactory.instance.arrayNode(), stack, definitions,
- definitionNames, oaversion);
- } else if (node instanceof AnyxmlSchemaNode anyxml) {
- processAnyXMLNode(anyxml, name, properties, JsonNodeFactory.instance.arrayNode());
- } else if (node instanceof AnydataSchemaNode anydata) {
- processAnydataNode(anydata, name, properties, JsonNodeFactory.instance.arrayNode());
- } else {
- if (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode) {
- property = processDataNodeContainer((DataNodeContainer) node, parentName, definitions,
- definitionNames, isConfig, stack, oaversion);
- if (!isConfig) {
- processActionNodeContainer(node, parentName, definitions, definitionNames, stack,
- oaversion);
- }
- } else if (node instanceof LeafListSchemaNode leafList) {
- property = processLeafListNode(leafList, stack, definitions, definitionNames, oaversion);
-
- } else if (node instanceof ChoiceSchemaNode choice) {
- for (final CaseSchemaNode variant : choice.getCases()) {
- processChoiceNode(variant.getChildNodes(), parentName, definitions, definitionNames, isConfig,
- stack, properties, oaversion);
- }
- continue;
- } else {
- throw new IllegalArgumentException("Unknown DataSchemaNode type: " + node.getClass());
- }
- properties.set(name, property);
- }
- stack.exit();
- }
- }
-
private static void processElementCount(final Optional<ElementCountConstraint> constraint, final ObjectNode props) {
if (constraint.isPresent()) {
final ElementCountConstraint constr = constraint.get();
private static boolean isHexadecimalOrOctal(final RangeRestrictedTypeDefinition<?, ?> typeDef) {
final Optional<?> optDefaultValue = typeDef.getDefaultValue();
if (optDefaultValue.isPresent()) {
- final String defaultValue = (String)optDefaultValue.get();
+ final String defaultValue = (String) optDefaultValue.get();
return defaultValue.startsWith("0") || defaultValue.startsWith("-0");
}
return false;