Remove SchemaNode#getPath usage from ListenerAdapter 24/99724/7
authorOleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Mon, 14 Feb 2022 12:51:52 +0000 (13:51 +0100)
committerTomas Cere <tomas.cere@pantheon.tech>
Thu, 3 Mar 2022 11:49:27 +0000 (11:49 +0000)
Removed deprecated SchemaNode#getPath from ListenerAdapter class
and replaced by new logic using SchemaInference.

JIRA: NETCONF-818
Change-Id: I6e4b87ab32382f2f1eb88c742652f636945dd9d0
Signed-off-by: OleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/streams/listeners/ListenerAdapter.java

index da973ccb916c84916aa1dfae2419c519f7f47458..2354502fb6d56c3256e67e9d6ae2634de42d7090 100644 (file)
@@ -27,15 +27,12 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
-import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -147,7 +144,6 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
      */
     private String prepareXml(final Collection<DataTreeCandidate> candidates) {
         final EffectiveModelContext schemaContext = controllerContext.getGlobalSchema();
-        final DataSchemaContextTree dataContextTree = DataSchemaContextTree.from(schemaContext);
         final Document doc = createDocument();
         final Element notificationElement = basePartDoc(doc);
 
@@ -155,7 +151,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
                 "urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", "data-changed-notification");
 
         addValuesToDataChangedNotificationEventElement(doc, dataChangedNotificationEventElement, candidates,
-            schemaContext, dataContextTree);
+            schemaContext);
         notificationElement.appendChild(dataChangedNotificationEventElement);
         return transformDoc(doc);
     }
@@ -173,7 +169,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
     private void addValuesToDataChangedNotificationEventElement(final Document doc,
             final Element dataChangedNotificationEventElement,
             final Collection<DataTreeCandidate> dataTreeCandidates,
-            final EffectiveModelContext schemaContext, final DataSchemaContextTree dataSchemaContextTree) {
+            final EffectiveModelContext schemaContext) {
 
         for (DataTreeCandidate dataTreeCandidate : dataTreeCandidates) {
             DataTreeCandidateNode candidateNode = dataTreeCandidate.getRootNode();
@@ -188,15 +184,14 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
                         dataChangedNotificationEventElement, dataTreeCandidate.getRootNode());
             } else {
                 addNodeToDataChangeNotificationEventElement(doc, dataChangedNotificationEventElement, candidateNode,
-                        yiid.getParent(), schemaContext, dataSchemaContextTree);
+                        yiid.getParent(), schemaContext);
             }
         }
     }
 
     private void addNodeToDataChangeNotificationEventElement(final Document doc,
             final Element dataChangedNotificationEventElement, final DataTreeCandidateNode candidateNode,
-            final YangInstanceIdentifier parentYiid, final EffectiveModelContext schemaContext,
-            final DataSchemaContextTree dataSchemaContextTree) {
+            final YangInstanceIdentifier parentYiid, final EffectiveModelContext schemaContext) {
 
         Optional<NormalizedNode> optionalNormalizedNode = Optional.empty();
         switch (candidateNode.getModificationType()) {
@@ -232,8 +227,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
                 case SUBTREE_MODIFIED:
                 case WRITE:
                     Operation op = candidateNode.getDataBefore().isPresent() ? Operation.UPDATED : Operation.CREATED;
-                    node = createCreatedChangedDataChangeEventElement(doc, yiid, normalizedNode, op,
-                            schemaContext, dataSchemaContextTree);
+                    node = createCreatedChangedDataChangeEventElement(doc, yiid, normalizedNode, op, schemaContext);
                     break;
                 case DELETE:
                 case DISAPPEARED:
@@ -250,7 +244,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
 
         for (DataTreeCandidateNode childNode : candidateNode.getChildNodes()) {
             addNodeToDataChangeNotificationEventElement(doc, dataChangedNotificationEventElement, childNode,
-                                                                        yiid, schemaContext, dataSchemaContextTree);
+                    yiid, schemaContext);
         }
     }
 
@@ -313,7 +307,7 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
 
     private Node createCreatedChangedDataChangeEventElement(final Document doc,
             final YangInstanceIdentifier eventPath, final NormalizedNode normalized, final Operation operation,
-            final EffectiveModelContext schemaContext, final DataSchemaContextTree dataSchemaContextTree) {
+            final EffectiveModelContext schemaContext) {
         final Element dataChangeEventElement = doc.createElement(DATA_CHANGE_EVENT);
         final Element pathElement = doc.createElement(PATH);
         addPathAsValueToElement(eventPath, pathElement);
@@ -324,14 +318,12 @@ public class ListenerAdapter extends AbstractCommonSubscriber implements Cluster
         dataChangeEventElement.appendChild(operationElement);
 
         try {
-            SchemaPath nodePath;
-            if (normalized instanceof MapEntryNode || normalized instanceof UnkeyedListEntryNode) {
-                nodePath = dataSchemaContextTree.findChild(eventPath).orElseThrow().getDataSchemaNode().getPath();
-            } else {
-                nodePath = dataSchemaContextTree.findChild(eventPath).orElseThrow().getDataSchemaNode().getPath()
-                    .getParent();
-            }
-            final DOMResult domResult = writeNormalizedNode(normalized, schemaContext, nodePath);
+            final var stack = SchemaInferenceStack.of(schemaContext);
+            eventPath.getParent().getPathArguments().stream()
+                    .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
+                    .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier))
+                    .forEach(p -> stack.enterSchemaTree(p.getNodeType()));
+            final DOMResult domResult = writeNormalizedNode(normalized, schemaContext, stack.toSchemaPath());
             final Node result = doc.importNode(domResult.getNode().getFirstChild(), true);
             final Element dataElement = doc.createElement("data");
             dataElement.appendChild(result);