Revert "Remove SchemaNode#getPath from NormalizedNodeJsonBodyWriter" 82/100182/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 09:18:33 +0000 (10:18 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Mar 2022 10:06:02 +0000 (11:06 +0100)
This reverts commit ea9227ab54fe59853e13e0e5833fe6c0795cb87e. The
assumptsions being made are just not correct.

Change-Id: Ie50e8054df0f3b52bc07047dfb565a05fe4a1a60
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/api/Draft02.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java

index f5eba017cc605cdb02894610fba9d0c5219b3ef5..d36cad9ab9aff471986010cd06297a5fb8315f08 100644 (file)
@@ -56,14 +56,6 @@ public class Draft02 {
         QName IETF_RESTCONF_QNAME = QName.create(Draft02.RestConfModule.NAMESPACE, Draft02.RestConfModule.REVISION,
                 Draft02.RestConfModule.NAME);
 
-        QName MODULES_CONTAINER_QNAME = QName.create(IETF_RESTCONF_QNAME, MODULES_CONTAINER_SCHEMA_NODE);
-
-        QName MODULE_LIST_QNAME = QName.create(IETF_RESTCONF_QNAME, MODULE_LIST_SCHEMA_NODE);
-
-        QName STREAMS_CONTAINER_QNAME = QName.create(IETF_RESTCONF_QNAME, STREAMS_CONTAINER_SCHEMA_NODE);
-
-        QName STREAM_LIST_QNAME = QName.create(IETF_RESTCONF_QNAME, STREAM_LIST_SCHEMA_NODE);
-
         QName ERRORS_CONTAINER_QNAME = QName.create(IETF_RESTCONF_QNAME, ERRORS_CONTAINER_SCHEMA_NODE);
 
         QName ERROR_LIST_QNAME = QName.create(IETF_RESTCONF_QNAME, ERROR_LIST_SCHEMA_NODE);
index 2db0b65df306936e11ee30a1254fb9ae7893be2f..f70768d11ddae798da93bde4e2489deb873e3c9c 100644 (file)
@@ -15,9 +15,7 @@ import java.lang.annotation.Annotation;
 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 javax.ws.rs.Produces;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MediaType;
@@ -31,10 +29,7 @@ import org.opendaylight.netconf.sal.rest.api.RestconfNormalizedNodeWriter;
 import org.opendaylight.netconf.sal.rest.api.RestconfService;
 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.common.XMLNamespace;
-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.DataContainerChild;
@@ -51,7 +46,6 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 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.Absolute;
 import org.xml.sax.SAXException;
 
 /**
@@ -112,20 +106,21 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter<Normalize
     private static void writeNormalizedNode(final JsonWriter jsonWriter,
             final InstanceIdentifierContext<SchemaNode> context, NormalizedNode data,
             final @Nullable Integer depth) throws IOException {
+        SchemaPath path = context.getSchemaNode().getPath();
         final RestconfNormalizedNodeWriter nnWriter;
-        if (context.getSchemaNode() instanceof SchemaContext) {
+        if (SchemaPath.ROOT.equals(path)) {
             /*
              *  Creates writer without initialNs and we write children of root data container
              *  which is not visible in restconf
              */
-            nnWriter = createNormalizedNodeWriter(context, SchemaPath.ROOT, jsonWriter, depth);
+            nnWriter = createNormalizedNodeWriter(context, path, jsonWriter, depth);
             if (data instanceof ContainerNode) {
-                writeChildren(nnWriter, (ContainerNode) data);
+                writeChildren(nnWriter,(ContainerNode) data);
             } else if (data instanceof DOMSourceAnyxmlNode) {
                 try {
                     writeChildren(nnWriter,
                             (ContainerNode) NetconfUtil.transformDOMSourceToNormalizedNode(
-                                    context.getSchemaContext(), ((DOMSourceAnyxmlNode) data).body()).getResult());
+                                    context.getSchemaContext(), ((DOMSourceAnyxmlNode)data).body()).getResult());
                 } catch (XMLStreamException | URISyntaxException | SAXException e) {
                     throw new IOException("Cannot write anyxml.", e);
                 }
@@ -135,25 +130,19 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter<Normalize
              *  RpcDefinition is not supported as initial codec in JSONStreamWriter,
              *  so we need to emit initial output declaratation..
              */
-            final RpcDefinition rpc = (RpcDefinition) context.getSchemaNode();
-            final SchemaPath path = SchemaPath.of(Absolute.of(rpc.getQName(), rpc.getOutput().getQName()));
+            path = ((RpcDefinition) context.getSchemaNode()).getOutput().getPath();
             nnWriter = createNormalizedNodeWriter(context, path, jsonWriter, depth);
             jsonWriter.name("output");
             jsonWriter.beginObject();
             writeChildren(nnWriter, (ContainerNode) data);
             jsonWriter.endObject();
         } else {
-            final List<QName> qnames = context.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();
+            path = path.getParent();
 
             if (data instanceof MapEntryNode) {
                 data = ImmutableNodes.mapNodeBuilder(data.getIdentifier().getNodeType())
-                        .withChild((MapEntryNode) data)
-                        .build();
+                    .withChild((MapEntryNode) data)
+                    .build();
             }
             nnWriter = createNormalizedNodeWriter(context, path, jsonWriter, depth);
             nnWriter.write(data);
index 1a7fd9fc5e91f33d0fef5a5a564dad736c015bc9..ceb19e5077ce1989d45ae786f986061352eb73d8 100644 (file)
@@ -11,9 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
-import static org.opendaylight.netconf.sal.rest.api.Draft02.RestConfModule.MODULES_CONTAINER_QNAME;
-import static org.opendaylight.netconf.sal.rest.api.Draft02.RestConfModule.MODULE_LIST_QNAME;
-import static org.opendaylight.netconf.sal.rest.api.Draft02.RestConfModule.STREAMS_CONTAINER_QNAME;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Predicates;
@@ -69,7 +66,7 @@ import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
-import org.opendaylight.netconf.sal.rest.api.Draft02.RestConfModule;
+import org.opendaylight.netconf.sal.rest.api.Draft02;
 import org.opendaylight.netconf.sal.rest.api.RestconfService;
 import org.opendaylight.netconf.sal.rest.impl.NormalizedNodeContext;
 import org.opendaylight.netconf.sal.streams.listeners.ListenerAdapter;
@@ -190,23 +187,6 @@ public final class RestconfImpl implements RestconfService {
             .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
             .appendOffset("+HH:MM", "Z").toFormatter();
 
-    private static final YangInstanceIdentifier MODULES = YangInstanceIdentifier.builder()
-            .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(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(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
-            .node(QName.create(RestConfModule.IETF_RESTCONF_QNAME, "restconf"))
-            .node(STREAMS_CONTAINER_QNAME)
-            .build();
-
     private final BrokerFacade broker;
 
     private final ControllerContext controllerContext;
@@ -236,15 +216,15 @@ public final class RestconfImpl implements RestconfService {
 
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode modulesSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(
-                restconfModule, RestConfModule.MODULES_CONTAINER_SCHEMA_NODE);
+                restconfModule, Draft02.RestConfModule.MODULES_CONTAINER_SCHEMA_NODE);
         checkState(modulesSchemaNode instanceof ContainerSchemaNode);
 
         final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> moduleContainerBuilder =
                 SchemaAwareBuilders.containerBuilder((ContainerSchemaNode) modulesSchemaNode);
         moduleContainerBuilder.withChild(allModuleMap);
 
-        return new NormalizedNodeContext(new InstanceIdentifierContext<>(MODULES, modulesSchemaNode, null,
-                schemaContext), moduleContainerBuilder.build(), QueryParametersParser.parseWriterParameters(uriInfo));
+        return new NormalizedNodeContext(new InstanceIdentifierContext<>(null, modulesSchemaNode, null, schemaContext),
+                moduleContainerBuilder.build(), QueryParametersParser.parseWriterParameters(uriInfo));
     }
 
     /**
@@ -267,7 +247,7 @@ public final class RestconfImpl implements RestconfService {
 
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode modulesSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(
-                restconfModule, RestConfModule.MODULES_CONTAINER_SCHEMA_NODE);
+                restconfModule, Draft02.RestConfModule.MODULES_CONTAINER_SCHEMA_NODE);
         checkState(modulesSchemaNode instanceof ContainerSchemaNode);
 
         final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> moduleContainerBuilder =
@@ -275,7 +255,7 @@ public final class RestconfImpl implements RestconfService {
         moduleContainerBuilder.withChild(mountPointModulesMap);
 
         return new NormalizedNodeContext(
-                new InstanceIdentifierContext<>(MODULES, modulesSchemaNode, mountPoint,
+                new InstanceIdentifierContext<>(null, modulesSchemaNode, mountPoint,
                         controllerContext.getGlobalSchema()),
                 moduleContainerBuilder.build(), QueryParametersParser.parseWriterParameters(uriInfo));
     }
@@ -310,11 +290,11 @@ public final class RestconfImpl implements RestconfService {
         final MapNode moduleMap = makeModuleMapNode(modules);
 
         final DataSchemaNode moduleSchemaNode = controllerContext
-                .getRestconfModuleRestConfSchemaNode(restconfModule, RestConfModule.MODULE_LIST_SCHEMA_NODE);
+                .getRestconfModuleRestConfSchemaNode(restconfModule, Draft02.RestConfModule.MODULE_LIST_SCHEMA_NODE);
         checkState(moduleSchemaNode instanceof ListSchemaNode);
 
         return new NormalizedNodeContext(
-                new InstanceIdentifierContext<>(MODULE, moduleSchemaNode, mountPoint, schemaContext), moduleMap,
+                new InstanceIdentifierContext<>(null, moduleSchemaNode, mountPoint, schemaContext), moduleMap,
                 QueryParametersParser.parseWriterParameters(uriInfo));
     }
 
@@ -325,7 +305,7 @@ public final class RestconfImpl implements RestconfService {
         final Set<String> availableStreams = Notificator.getStreamNames();
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode streamSchemaNode = controllerContext
-                .getRestconfModuleRestConfSchemaNode(restconfModule, RestConfModule.STREAM_LIST_SCHEMA_NODE);
+                .getRestconfModuleRestConfSchemaNode(restconfModule, Draft02.RestConfModule.STREAM_LIST_SCHEMA_NODE);
         checkState(streamSchemaNode instanceof ListSchemaNode);
 
         final CollectionNodeBuilder<MapEntryNode, SystemMapNode> listStreamsBuilder =
@@ -336,7 +316,7 @@ public final class RestconfImpl implements RestconfService {
         }
 
         final DataSchemaNode streamsContainerSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(
-                restconfModule, RestConfModule.STREAMS_CONTAINER_SCHEMA_NODE);
+                restconfModule, Draft02.RestConfModule.STREAMS_CONTAINER_SCHEMA_NODE);
         checkState(streamsContainerSchemaNode instanceof ContainerSchemaNode);
 
         final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> streamsContainerBuilder =
@@ -344,7 +324,7 @@ public final class RestconfImpl implements RestconfService {
         streamsContainerBuilder.withChild(listStreamsBuilder.build());
 
         return new NormalizedNodeContext(
-                new InstanceIdentifierContext<>(STREAMS, streamsContainerSchemaNode, null, schemaContext),
+                new InstanceIdentifierContext<>(null, streamsContainerSchemaNode, null, schemaContext),
                 streamsContainerBuilder.build(), QueryParametersParser.parseWriterParameters(uriInfo));
     }
 
@@ -1410,7 +1390,7 @@ public final class RestconfImpl implements RestconfService {
         requireNonNull(modules);
         final Module restconfModule = getRestconfModule();
         final DataSchemaNode moduleSchemaNode = controllerContext
-                .getRestconfModuleRestConfSchemaNode(restconfModule, RestConfModule.MODULE_LIST_SCHEMA_NODE);
+                .getRestconfModuleRestConfSchemaNode(restconfModule, Draft02.RestConfModule.MODULE_LIST_SCHEMA_NODE);
         checkState(moduleSchemaNode instanceof ListSchemaNode);
 
         final CollectionNodeBuilder<MapEntryNode, SystemMapNode> listModuleBuilder =