}
final var output = requireNonNull(entityStream);
- final var iidContext = context.getInstanceIdentifierContext();
- final var stack = iidContext.inference().toSchemaInferenceStack();
+ final var stack = context.inference().toSchemaInferenceStack();
// FIXME: this dispatch is here to handle codec transition to 'output', but that should be completely okay with
// the instantiation path we are using (based in Inference).
if (!stack.isEmpty()) {
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
/**
* A RFC8040 overlay from our marriage to NormalizedNodeContext. This represents a NormalizedNode along with further
* messy details needed to deal with the payload.
*/
public final class NormalizedNodePayload {
- private final InstanceIdentifierContext context;
private final @NonNull ImmutableMap<String, Object> headers;
private final @NonNull QueryParameters writerParameters;
+ private final @NonNull Inference inference;
private final NormalizedNode data;
- private NormalizedNodePayload(final InstanceIdentifierContext context, final NormalizedNode data,
+ private NormalizedNodePayload(final Inference inference, final NormalizedNode data,
final QueryParameters writerParameters, final ImmutableMap<String, Object> headers) {
- this.context = context;
+ this.inference = requireNonNull(inference);
this.data = data;
this.writerParameters = requireNonNull(writerParameters);
this.headers = requireNonNull(headers);
}
- public static @NonNull NormalizedNodePayload empty(final InstanceIdentifierContext path) {
- return new NormalizedNodePayload(requireNonNull(path), null, QueryParameters.empty(), ImmutableMap.of());
+ public static @NonNull NormalizedNodePayload empty(final Inference inference) {
+ return new NormalizedNodePayload(inference, null, QueryParameters.empty(), ImmutableMap.of());
}
- public static @NonNull NormalizedNodePayload of(final InstanceIdentifierContext path, final NormalizedNode data) {
- return new NormalizedNodePayload(requireNonNull(path), requireNonNull(data), QueryParameters.empty(),
- ImmutableMap.of());
+ public static @NonNull NormalizedNodePayload of(final Inference inference, final NormalizedNode data) {
+ return new NormalizedNodePayload(inference, requireNonNull(data), QueryParameters.empty(), ImmutableMap.of());
}
- public static @NonNull NormalizedNodePayload ofNullable(final InstanceIdentifierContext path,
- final NormalizedNode data) {
- return data == null ? empty(path) : of(path, data);
+ public static @NonNull NormalizedNodePayload ofNullable(final Inference inference, final NormalizedNode data) {
+ return data == null ? empty(inference) : of(inference, data);
}
- public static @NonNull NormalizedNodePayload ofLocation(final InstanceIdentifierContext path,
- final NodeIdentifier leafId, final URI location) {
- return new NormalizedNodePayload(requireNonNull(path), ImmutableNodes.leafNode(leafId, location.toString()),
+ // FIXME: can we get rid of this, please? Whoever is using this should be setting a Response instead
+ @Deprecated
+ public static @NonNull NormalizedNodePayload ofLocation(final Inference inference, final NodeIdentifier leafId,
+ final URI location) {
+ return new NormalizedNodePayload(inference, ImmutableNodes.leafNode(leafId, location.toString()),
QueryParameters.empty(), ImmutableMap.of("Location", location));
}
- public static Object ofReadData(final InstanceIdentifierContext path, final NormalizedNode data,
+ public static Object ofReadData(final Inference inference, final NormalizedNode data,
final QueryParameters parameters) {
- return new NormalizedNodePayload(requireNonNull(path), requireNonNull(data), parameters, ImmutableMap.of());
+ return new NormalizedNodePayload(inference, requireNonNull(data), parameters, ImmutableMap.of());
}
- public InstanceIdentifierContext getInstanceIdentifierContext() {
- return context;
+ public @NonNull Inference inference() {
+ return inference;
}
public @Nullable NormalizedNode getData() {
case ALL, CONFIG -> {
final QName type = node.name().getNodeType();
yield Response.status(Status.OK)
- .entity(NormalizedNodePayload.ofReadData(instanceIdentifier, node, queryParams))
+ .entity(NormalizedNodePayload.ofReadData(instanceIdentifier.inference(), node, queryParams))
.header("ETag", '"' + type.getModule().getRevision().map(Revision::toString).orElse(null) + "-"
+ type.getLocalName() + '"')
.header("Last-Modified", FORMATTER.format(LocalDateTime.now(Clock.systemUTC())))
.build();
}
case NONCONFIG -> Response.status(Status.OK)
- .entity(NormalizedNodePayload.ofReadData(instanceIdentifier, node, queryParams))
+ .entity(NormalizedNodePayload.ofReadData(instanceIdentifier.inference(), node, queryParams))
.build();
};
}
}
final var mountPoint = context.getMountPoint();
- final var schemaPath = context.inference().toSchemaInferenceStack().toSchemaNodeIdentifier();
+ final var inference = context.inference();
+ final var schemaPath = inference.toSchemaInferenceStack().toSchemaNodeIdentifier();
final var response = mountPoint != null ? invokeAction(input, schemaPath, yangIIdContext, mountPoint)
: invokeAction(input, schemaPath, yangIIdContext, actionService);
final var result = checkActionResponse(response);
if (resultData != null && resultData.isEmpty()) {
return Response.status(Status.NO_CONTENT).build();
}
- return Response.status(Status.OK).entity(NormalizedNodePayload.ofNullable(context, resultData)).build();
+ return Response.status(Status.OK).entity(NormalizedNodePayload.ofNullable(inference, resultData)).build();
}
/**
import javax.ws.rs.core.MediaType;
import org.opendaylight.restconf.nb.rfc8040.MediaTypes;
import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.Restconf;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.YangLibrary;
stack.enterDataTree(Restconf.QNAME);
stack.enterDataTree(YANG_LIBRARY_VERSION);
- return NormalizedNodePayload.of(InstanceIdentifierContext.ofStack(stack),
+ return NormalizedNodePayload.of(stack.toInference(),
ImmutableNodes.leafNode(YANG_LIBRARY_VERSION, YANG_LIBRARY_REVISION));
}
}
if (resultData == null || resultData.isEmpty()) {
ar.resume(new WebApplicationException(Status.NO_CONTENT));
} else {
- ar.resume(NormalizedNodePayload.of(context, resultData));
+ ar.resume(NormalizedNodePayload.of(context.inference(), resultData));
}
}
import org.opendaylight.restconf.nb.rfc8040.NotificationQueryParams;
import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
import org.opendaylight.restconf.nb.rfc8040.databind.jaxrs.QueryParams;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfStreamsSubscriptionService;
import org.opendaylight.restconf.nb.rfc8040.rests.utils.RestconfStreamsConstants;
import org.opendaylight.yang.gen.v1.subscribe.to.notification.rev161028.Notifi;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// prepare node with value of location
return NormalizedNodePayload.ofLocation(
- prepareIIDSubsStreamOutput(handlersHolder.getDatabindProvider().currentContext().modelContext()),
+ Inference.ofDataTreePath(handlersHolder.getDatabindProvider().currentContext().modelContext(),
+ Notifi.QNAME, LOCATION_QNAME),
LOCATION_NODEID, response);
}
- /**
- * Prepare InstanceIdentifierContext for Location leaf.
- *
- * @param schemaHandler Schema context handler.
- * @return InstanceIdentifier of Location leaf.
- */
- private static InstanceIdentifierContext prepareIIDSubsStreamOutput(final EffectiveModelContext modelContext) {
- return InstanceIdentifierContext.ofStack(
- SchemaInferenceStack.ofDataTreePath(modelContext, Notifi.QNAME, LOCATION_QNAME));
- }
-
/**
* Holder of all handlers for notifications.
*/
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
import org.opendaylight.restconf.nb.rfc8040.AbstractInstanceIdentifierTest;
-import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class XmlNormalizedNodeBodyWriterTest extends AbstractInstanceIdentifierTest {
public void testWriteEmptyRootContainer() throws IOException {
final EffectiveModelContext schemaContext = mock(EffectiveModelContext.class);
- final NormalizedNodePayload nodePayload = NormalizedNodePayload.of(
- InstanceIdentifierContext.ofLocalRoot(schemaContext),
+ final NormalizedNodePayload nodePayload = NormalizedNodePayload.of(Inference.ofDataTreePath(schemaContext),
Builders.containerBuilder().withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME)).build());
final ByteArrayOutputStream output = new ByteArrayOutputStream();
final XmlNormalizedNodeBodyWriter xmlWriter = new XmlNormalizedNodeBodyWriter();
xmlWriter.writeTo(nodePayload, null, null, null, MediaType.APPLICATION_XML_TYPE, null, output);
+ // FIXME: NETCONF-855: this is wrong, the namespace should be 'urn:ietf:params:xml:ns:yang:ietf-restconf'
assertEquals("<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"></data>",
output.toString(StandardCharsets.UTF_8));
}
@Test
public void testRootContainerWrite() throws IOException {
final NormalizedNodePayload nodePayload = NormalizedNodePayload.of(
- InstanceIdentifierContext.ofLocalRoot(IID_SCHEMA),
+ Inference.ofDataTreePath(IID_SCHEMA),
Builders.containerBuilder()
.withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME))
.withChild(Builders.containerBuilder()