Reconstruct inference stack during normalization
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / rests / services / impl / RestconfImpl.java
index d76a90a7d773c01ee206476c9964b255921fa427..915654dbaf6f39862b1a6ced050c1fd4319cf104 100644 (file)
@@ -11,23 +11,22 @@ import static java.util.Objects.requireNonNull;
 
 import javax.ws.rs.Path;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
-import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040.IetfYangLibrary;
-import org.opendaylight.restconf.nb.rfc8040.Rfc8040.RestconfModule;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
+import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfService;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.Restconf;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 
 @Path("/")
 public class RestconfImpl implements RestconfService {
+    private static final QName YANG_LIBRARY_VERSION = QName.create(Restconf.QNAME, "yang-library-version").intern();
+
     private final SchemaContextHandler schemaContextHandler;
 
     public RestconfImpl(final SchemaContextHandler schemaContextHandler) {
@@ -35,23 +34,23 @@ public class RestconfImpl implements RestconfService {
     }
 
     @Override
-    public NormalizedNodeContext getLibraryVersion() {
-        final EffectiveModelContext context = this.schemaContextHandler.get();
-        SchemaNode schemaNode = null;
-        for (final GroupingDefinition groupingDefinition : context
-                .findModule(RestconfModule.IETF_RESTCONF_QNAME.getModule()).get().getGroupings()) {
-            if (groupingDefinition.getQName().equals(RestconfModule.RESTCONF_GROUPING_QNAME)) {
-                schemaNode = ((ContainerSchemaNode) groupingDefinition
-                        .getDataChildByName(RestconfModule.RESTCONF_CONTAINER_QNAME))
-                                .getDataChildByName(RestconfModule.LIB_VER_LEAF_QNAME);
-            }
-        }
-        final YangInstanceIdentifier yangIId = YangInstanceIdentifier.of(
-                QName.create(RestconfModule.IETF_RESTCONF_QNAME, RestconfModule.LIB_VER_LEAF_SCHEMA_NODE));
-        final InstanceIdentifierContext<? extends SchemaNode> iid =
-                new InstanceIdentifierContext<>(yangIId, schemaNode, null, context);
-        final NormalizedNode<?, ?> data = Builders.leafBuilder((LeafSchemaNode) schemaNode)
-                .withValue(IetfYangLibrary.REVISION.toString()).build();
-        return new NormalizedNodeContext(iid, data);
+    public NormalizedNodePayload getLibraryVersion() {
+        final EffectiveModelContext context = schemaContextHandler.get();
+
+        // FIXME: why are we going through a grouping here?!
+        final GroupingDefinition grouping = context
+            .findModule(Restconf.QNAME.getModule())
+            .orElseThrow(() -> new IllegalStateException("Failed to find restcibf module"))
+            .getGroupings().stream()
+            .filter(grp -> Restconf.QNAME.equals(grp.getQName()))
+            .findFirst()
+            .orElseThrow(() -> new IllegalStateException("Failed to find restconf grouping"));
+
+        final LeafSchemaNode schemaNode =
+            (LeafSchemaNode) ((ContainerSchemaNode) grouping.getDataChildByName(Restconf.QNAME))
+            .getDataChildByName(YANG_LIBRARY_VERSION);
+
+        return NormalizedNodePayload.of(InstanceIdentifierContext.ofDataSchemaNode(context, schemaNode, null),
+            ImmutableNodes.leafNode(YANG_LIBRARY_VERSION, IetfYangLibrary.REVISION.toString()));
     }
 }