final Collection<? extends DataSchemaNode> dataSchemaNodes = module.getChildNodes();
LOG.debug("child nodes size [{}]", dataSchemaNodes.size());
for (final DataSchemaNode node : dataSchemaNodes) {
- if (node.isConfiguration() && (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode)) {
- LOG.debug("Is Configuration node [{}]", node.getQName().getLocalName());
+ if (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode) {
+ final boolean isConfig = node.isConfiguration();
+ LOG.debug("Is Configuration node [{}] [{}]", isConfig, node.getQName().getLocalName());
final String localName = moduleName + ":" + node.getQName().getLocalName();
final String resourcePath = getResourcePath("data", context);
* whose config statement is true in module, make sure that
* only one root post link is added for this module.
*/
- if (isForSingleModule && !hasAddRootPostLink) {
+ if (isConfig && isForSingleModule && !hasAddRootPostLink) {
LOG.debug("Has added root post link for module {}", moduleName);
addRootPostLink(module, deviceName, pathParams, resourcePath, paths);
hasAddRootPostLink = true;
}
final String resourcePathPart = createPath(node, pathParams, localName);
- addPaths(node, deviceName, moduleName, paths, pathParams, schemaContext,
+ addPaths(node, deviceName, moduleName, paths, pathParams, isConfig, schemaContext,
moduleName, definitionNames, resourcePathPart, context);
}
}
private void addPaths(final DataSchemaNode node, final String deviceName, final String moduleName,
final Map<String, Path> paths, final List<Parameter> parentPathParams,
- final EffectiveModelContext schemaContext, final String parentName, final DefinitionNames definitionNames,
- final String resourcePathPart, final String context) {
+ final boolean isConfig, final EffectiveModelContext schemaContext, final String parentName,
+ final DefinitionNames definitionNames, final String resourcePathPart, final String context) {
final String dataPath = getResourcePath("data", context) + "/" + resourcePathPart;
LOG.debug("Adding path: [{}]", dataPath);
final List<Parameter> pathParams = new ArrayList<>(parentPathParams);
if (node instanceof ListSchemaNode || node instanceof ContainerSchemaNode) {
childSchemaNodes = ((DataNodeContainer) node).getChildNodes();
}
- paths.put(dataPath, operations(node, moduleName, deviceName, pathParams, parentName, definitionNames));
+ paths.put(dataPath, operations(node, moduleName, deviceName, pathParams, isConfig, parentName,
+ definitionNames));
if (node instanceof ActionNodeContainer actionContainer) {
actionContainer.getActions().forEach(actionDef -> {
}
for (final DataSchemaNode childNode : childSchemaNodes) {
- if (childNode.isConfiguration() && (childNode instanceof ListSchemaNode
- || childNode instanceof ContainerSchemaNode)) {
+ if (childNode instanceof ListSchemaNode || childNode instanceof ContainerSchemaNode) {
final String newParent = parentName + "_" + node.getQName().getLocalName();
final String localName = resolvePathArgumentsName(childNode.getQName(), node.getQName(), schemaContext);
final String newPathPart = resourcePathPart + "/" + createPath(childNode, pathParams, localName);
- addPaths(childNode, deviceName, moduleName, paths, pathParams, schemaContext,
+ final boolean newIsConfig = isConfig && childNode.isConfiguration();
+ addPaths(childNode, deviceName, moduleName, paths, pathParams, newIsConfig, schemaContext,
newParent, definitionNames, newPathPart, context);
pathParams.clear();
pathParams.addAll(parentPathParams);
}
private static Path operations(final DataSchemaNode node, final String moduleName,
- final String deviceName, final List<Parameter> pathParams, final String parentName,
+ final String deviceName, final List<Parameter> pathParams, final boolean isConfig, final String parentName,
final DefinitionNames definitionNames) {
final Path.Builder operationsBuilder = new Path.Builder();
final String defName = parentName + "_" + nodeName + discriminator;
final String defNameTop = parentName + "_" + nodeName + TOP + discriminator;
- final Operation get = buildGet(node, moduleName, deviceName, pathParams, defName, defNameTop);
+ final Operation get = buildGet(node, moduleName, deviceName, pathParams, defName, defNameTop, isConfig);
operationsBuilder.get(get);
- final Operation put = buildPut(parentName, nodeName, discriminator, moduleName, deviceName,
- node.getDescription().orElse(""), pathParams);
- operationsBuilder.put(put);
+ if (isConfig) {
+ final Operation put = buildPut(parentName, nodeName, discriminator, moduleName, deviceName,
+ node.getDescription().orElse(""), pathParams);
+ operationsBuilder.put(put);
- final Operation patch = buildPatch(parentName, nodeName, moduleName, deviceName,
- node.getDescription().orElse(""), pathParams);
- operationsBuilder.patch(patch);
+ final Operation patch = buildPatch(parentName, nodeName, moduleName, deviceName,
+ node.getDescription().orElse(""), pathParams);
+ operationsBuilder.patch(patch);
- final Operation delete = buildDelete(node, moduleName, deviceName, pathParams);
- operationsBuilder.delete(delete);
-
- final Operation post = buildPost(parentName, nodeName, discriminator, moduleName, deviceName,
- node.getDescription().orElse(""), pathParams);
- operationsBuilder.post(post);
+ final Operation delete = buildDelete(node, moduleName, deviceName, pathParams);
+ operationsBuilder.delete(delete);
+ final Operation post = buildPost(parentName, nodeName, discriminator, moduleName, deviceName,
+ node.getDescription().orElse(""), pathParams);
+ operationsBuilder.post(post);
+ }
return operationsBuilder.build();
}
public static Operation buildGet(final DataSchemaNode node, final String moduleName,
final @NonNull String deviceName, final List<Parameter> pathParams, final String defName,
- final String defNameTop) {
+ final String defNameTop, final boolean isConfig) {
final String description = node.getDescription().orElse("");
final String summary = SUMMARY_TEMPLATE.formatted(HttpMethod.GET, deviceName, moduleName,
node.getQName().getLocalName());
final List<String> tags = List.of(deviceName + " " + moduleName);
final List<Parameter> parameters = new ArrayList<>(pathParams);
- parameters.add(buildQueryParameters());
+ parameters.add(buildQueryParameters(isConfig));
final ObjectNode responses = JsonNodeFactory.instance.objectNode();
final ObjectNode schema = JsonNodeFactory.instance.objectNode();
final ObjectNode xmlSchema = JsonNodeFactory.instance.objectNode();
- schema.put(REF_KEY, COMPONENTS_PREFIX + defNameTop);
- xmlSchema.put(REF_KEY, COMPONENTS_PREFIX + defName);
-
+ if (node.isConfiguration()) {
+ schema.put(REF_KEY, COMPONENTS_PREFIX + defNameTop);
+ xmlSchema.put(REF_KEY, COMPONENTS_PREFIX + defName);
+ }
responses.set(String.valueOf(Response.Status.OK.getStatusCode()),
buildResponse(Response.Status.OK.getReasonPhrase(), schema, xmlSchema));
.build();
}
- private static Parameter buildQueryParameters() {
+ private static Parameter buildQueryParameters(final boolean isConfig) {
final ArrayNode cases = JsonNodeFactory.instance.arrayNode()
.add("config")
.add("nonconfig")
return new Parameter.Builder()
.in("query")
.name("content")
+ .required(!isConfig)
.schema(new Schema.Builder().type("string").schemaEnum(cases).build())
.build();
}
public static ObjectNode buildResponse(final String description, final ObjectNode schema,
final ObjectNode xmlSchema) {
final ObjectNode response = JsonNodeFactory.instance.objectNode();
+ if (!schema.isEmpty()) {
+ final ObjectNode content = JsonNodeFactory.instance.objectNode();
+ final ObjectNode body = JsonNodeFactory.instance.objectNode();
+ final ObjectNode xmlBody = JsonNodeFactory.instance.objectNode();
- final ObjectNode content = JsonNodeFactory.instance.objectNode();
- final ObjectNode body = JsonNodeFactory.instance.objectNode();
- final ObjectNode xmlBody = JsonNodeFactory.instance.objectNode();
-
- body.set(SCHEMA_KEY, schema);
- xmlBody.set(SCHEMA_KEY, xmlSchema);
- content.set(MediaType.APPLICATION_JSON, body);
- content.set(MediaType.APPLICATION_XML, xmlBody);
+ body.set(SCHEMA_KEY, schema);
+ xmlBody.set(SCHEMA_KEY, xmlSchema);
+ content.set(MediaType.APPLICATION_JSON, body);
+ content.set(MediaType.APPLICATION_XML, xmlBody);
- response.set(CONTENT_KEY, content);
+ response.set(CONTENT_KEY, content);
+ }
response.put(DESCRIPTION_KEY, description);
return response;