*/
package org.opendaylight.restconf.common.context;
-import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
public class InstanceIdentifierContext<T extends SchemaNode> {
private final YangInstanceIdentifier instanceIdentifier;
- private final @Nullable SchemaNodeIdentifier schemaNodeIdentifier;
private final T schemaNode;
private final DOMMountPoint mountPoint;
private final EffectiveModelContext schemaContext;
- public InstanceIdentifierContext(final YangInstanceIdentifier instanceIdentifier,
- final T schemaNode, final DOMMountPoint mountPoint,
- final EffectiveModelContext context) {
- this(instanceIdentifier, null, schemaNode, mountPoint, context);
- }
-
- public InstanceIdentifierContext(final YangInstanceIdentifier instanceIdentifier,
- final SchemaNodeIdentifier schemaNodeIdentifier,
- final T schemaNode, final DOMMountPoint mountPoint,
- final EffectiveModelContext context) {
+ public InstanceIdentifierContext(final YangInstanceIdentifier instanceIdentifier, final T schemaNode,
+ final DOMMountPoint mountPoint, final EffectiveModelContext context) {
this.instanceIdentifier = instanceIdentifier;
- this.schemaNodeIdentifier = schemaNodeIdentifier;
this.schemaNode = schemaNode;
this.mountPoint = mountPoint;
this.schemaContext = context;
return instanceIdentifier;
}
- public SchemaNodeIdentifier getSchemaNodeIdentifier() {
- return schemaNodeIdentifier;
- }
-
public T getSchemaNode() {
return schemaNode;
}
import java.lang.reflect.Type;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
+import java.util.List;
import java.util.Map.Entry;
+import java.util.stream.Collectors;
import javanet.staxutils.IndentingXMLStreamWriter;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import org.opendaylight.netconf.util.NetconfUtil;
import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, path, depth);
writeElements(xmlWriter, nnWriter, (ContainerNode) data);
} else {
- final SchemaPath path;
- if (pathContext.getSchemaNodeIdentifier() == null) {
- path = SchemaPath.ROOT;
- } else {
- path = SchemaPath.of(pathContext.getSchemaNodeIdentifier()).getParent();
- }
+ final List<QName> qNames = pathContext.getInstanceIdentifier().getPathArguments().stream()
+ .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
+ .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier))
+ .map(PathArgument::getNodeType)
+ .collect(Collectors.toList());
+ final SchemaPath path = SchemaPath.of(Absolute.of(qNames)).getParent();
nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, path, depth);
if (data instanceof MapEntryNode) {
// Restconf allows returning one list item. We need to wrap it
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
checkPreconditions();
if (restconfInstance == null) {
- return new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), null, globalSchema, null,
+ return new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), globalSchema, null,
globalSchema);
}
}
final InstanceIdentifierContext<?> iiWithSchemaNode =
- collectPathArguments(builder, pathArgs, new ArrayList<>(), latestModule.iterator().next(), null,
- toMountPointIdentifier);
+ collectPathArguments(builder, pathArgs, latestModule.iterator().next(), null, toMountPointIdentifier);
if (iiWithSchemaNode == null) {
throw new RestconfDocumentedException("URI has bad format", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
return object == null ? "" : URLEncoder.encode(codec.serialize(object).toString(), StandardCharsets.UTF_8);
}
- private SchemaNodeIdentifier schemaNodeIdentifierFromPath(final List<QName> qnames) {
- return qnames.isEmpty() ? null : Absolute.of(qnames);
- }
-
@SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE", justification = "Unrecognised NullableDecl")
private InstanceIdentifierContext<?> collectPathArguments(final InstanceIdentifierBuilder builder,
- final List<String> strings, final List<QName> qnames, final DataNodeContainer parentNode,
- final DOMMountPoint mountPoint, final boolean returnJustMountPoint) {
+ final List<String> strings, final DataNodeContainer parentNode, final DOMMountPoint mountPoint,
+ final boolean returnJustMountPoint) {
requireNonNull(strings);
if (parentNode == null) {
final EffectiveModelContext modelContext = mountPoint != null ? getModelContext(mountPoint) : globalSchema;
if (strings.isEmpty()) {
- return createContext(builder.build(), schemaNodeIdentifierFromPath(qnames), (DataSchemaNode) parentNode,
- mountPoint, modelContext);
+ return createContext(builder.build(), (DataSchemaNode) parentNode, mountPoint, modelContext);
}
final String head = strings.iterator().next();
if (head.isEmpty()) {
final List<String> remaining = strings.subList(1, strings.size());
- return collectPathArguments(builder, remaining, qnames, parentNode, mountPoint, returnJustMountPoint);
+ return collectPathArguments(builder, remaining, parentNode, mountPoint, returnJustMountPoint);
}
final String nodeName = toNodeName(head);
}
if (returnJustMountPoint || strings.size() == 1) {
- return new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), null,
- mountPointSchema, mount,
+ return new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), mountPointSchema, mount,
mountPointSchema);
}
}
final List<String> subList = strings.subList(1, strings.size());
- return collectPathArguments(YangInstanceIdentifier.builder(), subList, new ArrayList<>(), it.next(),
- mount, returnJustMountPoint);
+ return collectPathArguments(YangInstanceIdentifier.builder(), subList, it.next(), mount,
+ returnJustMountPoint);
}
Module module = null;
rpc = getRpcDefinition(module, rpcName);
}
if (rpc != null) {
- return new InstanceIdentifierContext<>(builder.build(), null, rpc, mountPoint, modelContext);
+ return new InstanceIdentifierContext<>(builder.build(), rpc, mountPoint, modelContext);
}
}
builder.node(targetNode.getQName());
}
- qnames.add(targetNode.getQName());
-
if (targetNode instanceof DataNodeContainer) {
final List<String> remaining = strings.subList(consumed, strings.size());
- return collectPathArguments(builder, remaining, qnames, (DataNodeContainer) targetNode, mountPoint,
+ return collectPathArguments(builder, remaining, (DataNodeContainer) targetNode, mountPoint,
returnJustMountPoint);
}
- return createContext(builder.build(), Absolute.of(qnames), targetNode, mountPoint, modelContext);
+ return createContext(builder.build(), targetNode, mountPoint, modelContext);
}
private static InstanceIdentifierContext<?> createContext(final YangInstanceIdentifier instance,
- final SchemaNodeIdentifier schemaNodeIdentifier, final DataSchemaNode dataSchemaNode,
- final DOMMountPoint mountPoint, final EffectiveModelContext schemaContext) {
+ final DataSchemaNode dataSchemaNode, final DOMMountPoint mountPoint,
+ final EffectiveModelContext schemaContext) {
final YangInstanceIdentifier instanceIdentifier = new DataNormalizer(schemaContext).toNormalized(instance);
- return new InstanceIdentifierContext<>(instanceIdentifier, schemaNodeIdentifier, dataSchemaNode, mountPoint,
- schemaContext);
+ return new InstanceIdentifierContext<>(instanceIdentifier, dataSchemaNode, mountPoint, schemaContext);
}
public static DataSchemaNode findInstanceDataChildByNameAndNamespace(final DataNodeContainer container,
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
.appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
.appendOffset("+HH:MM", "Z").toFormatter();
- private static final @NonNull QName RESTCONF = QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf");
-
private static final YangInstanceIdentifier MODULES = YangInstanceIdentifier.builder()
- .node(RESTCONF)
- .node(RESTCONF)
+ .node(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
+ .node(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
.node(MODULES_CONTAINER_QNAME)
.build();
private static final YangInstanceIdentifier MODULE = YangInstanceIdentifier.builder()
- .node(RESTCONF)
- .node(RESTCONF)
+ .node(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
+ .node(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
.node(MODULES_CONTAINER_QNAME)
.node(MODULE_LIST_QNAME)
.build();
private static final YangInstanceIdentifier STREAMS = YangInstanceIdentifier.builder()
- .node(RESTCONF)
- .node(RESTCONF)
+ .node(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
+ .node(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
.node(STREAMS_CONTAINER_QNAME)
.build();
- private static final SchemaNodeIdentifier MODULES_SCHEMA_IDENTIFIER =
- Absolute.of(RESTCONF, RESTCONF, MODULES_CONTAINER_QNAME);
- private static final SchemaNodeIdentifier MODULE_SCHEMA_IDENTIFIER =
- Absolute.of(RESTCONF, RESTCONF, MODULES_CONTAINER_QNAME, MODULE_LIST_QNAME);
- private static final SchemaNodeIdentifier STREAMS_SCHEMA_IDENTIFIER =
- Absolute.of(RESTCONF, RESTCONF, STREAMS_CONTAINER_QNAME);
-
private final BrokerFacade broker;
private final ControllerContext controllerContext;
SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) modulesSchemaNode);
moduleContainerBuilder.withChild(allModuleMap);
- return new NormalizedNodeContext(new InstanceIdentifierContext<>(MODULES, MODULES_SCHEMA_IDENTIFIER,
- modulesSchemaNode, null, schemaContext), moduleContainerBuilder.build(),
- QueryParametersParser.parseWriterParameters(uriInfo));
+ return new NormalizedNodeContext(new InstanceIdentifierContext<>(MODULES, modulesSchemaNode, null,
+ schemaContext), moduleContainerBuilder.build(), QueryParametersParser.parseWriterParameters(uriInfo));
}
/**
moduleContainerBuilder.withChild(mountPointModulesMap);
return new NormalizedNodeContext(
- new InstanceIdentifierContext<>(MODULES, MODULES_SCHEMA_IDENTIFIER, modulesSchemaNode, mountPoint,
+ new InstanceIdentifierContext<>(MODULES, modulesSchemaNode, mountPoint,
controllerContext.getGlobalSchema()),
moduleContainerBuilder.build(), QueryParametersParser.parseWriterParameters(uriInfo));
}
checkState(moduleSchemaNode instanceof ListSchemaNode);
return new NormalizedNodeContext(
- new InstanceIdentifierContext<>(MODULE, MODULE_SCHEMA_IDENTIFIER, moduleSchemaNode, mountPoint,
- schemaContext), moduleMap,
+ new InstanceIdentifierContext<>(MODULE, moduleSchemaNode, mountPoint, schemaContext), moduleMap,
QueryParametersParser.parseWriterParameters(uriInfo));
}
streamsContainerBuilder.withChild(listStreamsBuilder.build());
return new NormalizedNodeContext(
- new InstanceIdentifierContext<>(STREAMS, STREAMS_SCHEMA_IDENTIFIER, streamsContainerSchemaNode,
- null, schemaContext),
+ new InstanceIdentifierContext<>(STREAMS, streamsContainerSchemaNode, null, schemaContext),
streamsContainerBuilder.build(), QueryParametersParser.parseWriterParameters(uriInfo));
}