After rewrite we lost reference to parent node in some of actions
paths. This patch repairs it.
JIRA: NETCONF-938
Change-Id: I90d048a3157e0cf07b52621eee351ee6119790af
Signed-off-by: lubos-cicut <lubos.cicut@pantheon.tech>
final var localName = moduleName + ":" + nodeLocalName;
final var path = urlPrefix + "/" + processPath(node, pathParams, localName);
processChildNode(node, pathParams, moduleName, result, path, nodeLocalName, isConfig, schemaContext,
final var localName = moduleName + ":" + nodeLocalName;
final var path = urlPrefix + "/" + processPath(node, pathParams, localName);
processChildNode(node, pathParams, moduleName, result, path, nodeLocalName, isConfig, schemaContext,
+ deviceName, basePath, node);
private static void processChildNode(final DataSchemaNode node, final List<ParameterEntity> pathParams,
final String moduleName, final Deque<PathEntity> result, final String path, final String refPath,
final boolean isConfig, final EffectiveModelContext schemaContext, final String deviceName,
private static void processChildNode(final DataSchemaNode node, final List<ParameterEntity> pathParams,
final String moduleName, final Deque<PathEntity> result, final String path, final String refPath,
final boolean isConfig, final EffectiveModelContext schemaContext, final String deviceName,
- final String basePath) {
+ final String basePath, final SchemaNode parentNode) {
final var resourcePath = basePath + DATA + path;
final var fullName = resolveFullNameFromNode(node.getQName(), schemaContext);
final var firstChild = getListOrContainerChildNode((DataNodeContainer) node);
final var resourcePath = basePath + DATA + path;
final var fullName = resolveFullNameFromNode(node.getQName(), schemaContext);
final var firstChild = getListOrContainerChildNode((DataNodeContainer) node);
node.getQName(), schemaContext);
final var childPath = basePath + OPERATIONS + resourceActionPath;
result.add(processRootAndActionPathEntity(actionDef, childPath, actionParams, moduleName,
node.getQName(), schemaContext);
final var childPath = basePath + OPERATIONS + resourceActionPath;
result.add(processRootAndActionPathEntity(actionDef, childPath, actionParams, moduleName,
+ refPath, deviceName, parentNode));
});
}
for (final var childNode : childNodes) {
});
}
for (final var childNode : childNodes) {
final var resourceDataPath = path + "/" + processPath(childNode, childParams, localName);
final var newConfig = isConfig && childNode.isConfiguration();
processChildNode(childNode, childParams, moduleName, result, resourceDataPath, newRefPath, newConfig,
final var resourceDataPath = path + "/" + processPath(childNode, childParams, localName);
final var newConfig = isConfig && childNode.isConfiguration();
processChildNode(childNode, childParams, moduleName, result, resourceDataPath, newRefPath, newConfig,
- schemaContext, deviceName, basePath);
+ schemaContext, deviceName, basePath, node);
private static PathEntity processRootAndActionPathEntity(final SchemaNode node, final String resourcePath,
final List<ParameterEntity> pathParams, final String moduleName, final String refPath,
private static PathEntity processRootAndActionPathEntity(final SchemaNode node, final String resourcePath,
final List<ParameterEntity> pathParams, final String moduleName, final String refPath,
- final String deviceName) {
+ final String deviceName, final SchemaNode parentNode) {
return new PathEntity(resourcePath,
return new PathEntity(resourcePath,
- new PostEntity(node, deviceName, moduleName, pathParams, refPath, null),
+ new PostEntity(node, deviceName, moduleName, pathParams, refPath, parentNode),
null, null, null, null);
}
null, null, null, null);
}
import javax.ws.rs.core.MediaType;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import javax.ws.rs.core.MediaType;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
if (parentNode instanceof Module) {
return SUMMARY_TEMPLATE.formatted(HttpMethod.POST, deviceName(), moduleName(), moduleName());
}
if (parentNode instanceof Module) {
return SUMMARY_TEMPLATE.formatted(HttpMethod.POST, deviceName(), moduleName(), moduleName());
}
- if (parentNode != null) {
+ if (parentNode != null && !(schema() instanceof OperationDefinition)) {
return SUMMARY_TEMPLATE.formatted(HttpMethod.POST, deviceName(), moduleName(),
((DataSchemaNode) parentNode).getQName().getLocalName());
}
return SUMMARY_TEMPLATE.formatted(HttpMethod.POST, deviceName(), moduleName(),
((DataSchemaNode) parentNode).getQName().getLocalName());
}
final var operationName = rpc.getQName().getLocalName();
if (!output.getChildNodes().isEmpty()) {
// TODO: add proper discriminator from DefinitionNames when schemas re-implementation is done
final var operationName = rpc.getQName().getLocalName();
if (!output.getChildNodes().isEmpty()) {
// TODO: add proper discriminator from DefinitionNames when schemas re-implementation is done
- final var ref = COMPONENTS_PREFIX + moduleName() + "_" + operationName + "_output";
+ final var ref = processOperationsRef(rpc, operationName, "_output");
generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode()));
generator.writeStringField(DESCRIPTION, String.format("RPC %s success", operationName));
generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode()));
generator.writeStringField(DESCRIPTION, String.format("RPC %s success", operationName));
generator.writeObjectFieldStart(CONTENT);
if (!input.getChildNodes().isEmpty()) {
// TODO: add proper discriminator from DefinitionNames when schemas re-implementation is done
generator.writeObjectFieldStart(CONTENT);
if (!input.getChildNodes().isEmpty()) {
// TODO: add proper discriminator from DefinitionNames when schemas re-implementation is done
- final var ref = COMPONENTS_PREFIX + moduleName() + "_" + operationName + INPUT_SUFFIX;
+ final var ref = processOperationsRef(rpc, operationName, INPUT_SUFFIX);
generator.writeObjectFieldStart(MediaType.APPLICATION_JSON);
generator.writeObjectFieldStart(SCHEMA);
generator.writeObjectFieldStart("properties");
generator.writeObjectFieldStart(MediaType.APPLICATION_JSON);
generator.writeObjectFieldStart(SCHEMA);
generator.writeObjectFieldStart("properties");
@Override
@Nullable String description() {
@Override
@Nullable String description() {
- if (parentNode != null) {
+ if (parentNode != null && !(schema() instanceof OperationDefinition)) {
return parentNode.getDescription().orElse("");
} else {
return super.description();
}
}
return parentNode.getDescription().orElse("");
} else {
return super.description();
}
}
+
+ private String processOperationsRef(final OperationDefinition def, final String operationName, final String suf) {
+ final var ref = COMPONENTS_PREFIX + moduleName() + "_" + operationName + suf;
+ if (def instanceof ActionDefinition && parentNode != null) {
+ final var parentName = ((DataSchemaNode) parentNode).getQName().getLocalName();
+ if (!operationName.contains(parentName)) {
+ return COMPONENTS_PREFIX + moduleName() + "_" + parentName + "_" + operationName + suf;
+ }
+ }
+ return ref;
+ }