Special-case schema-mount nodes 58/83058/3
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 16 Jul 2019 09:56:50 +0000 (11:56 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 16 Jul 2019 10:52:08 +0000 (12:52 +0200)
We need to recognize yangmnt:schema-mounts before we start emitting
the mount point data, as it may be required for nested mountpoint
resolution.

JIRA: YANGTOOLS-1007
Change-Id: Iee2b3ab7ddc4f2ae2416d01a8554fc7ec11cc6ce
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/MountPointData.java

index 0b016cb23a6dfe570f4632fb5e0db35e26416a8a..a4ea945f6a422a7354d04a4c022c28155a638c26 100644 (file)
@@ -47,6 +47,7 @@ import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode;
 import org.opendaylight.yangtools.rfc8528.data.api.YangLibraryConstants;
 import org.opendaylight.yangtools.rfc8528.data.api.YangLibraryConstants.ContainerName;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchemaNode;
+import org.opendaylight.yangtools.rfc8528.model.api.SchemaMountConstants;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
@@ -524,6 +525,9 @@ public final class XmlParserStream implements Closeable, Flushable {
             }
 
             LOG.warn("Encountered unknown element {} from YANG Library namespace", localName);
+        } else if (SchemaMountConstants.RFC8528_MODULE.getNamespace().equals(namespace)) {
+            mount.setSchemaMounts(child);
+            return;
         }
 
         mount.addChild(child);
index 393da67922e52e7a5f77abb44d93a8be19210423..f60a23ba46cf403e7de2793ab86a3df1c3cf3900 100644 (file)
@@ -46,6 +46,8 @@ public final class MountPointData extends AbstractIdentifiable<MountPointIdentif
     private final Map<ContainerName, MountPointChild> yangLib = new EnumMap<>(ContainerName.class);
     private final List<MountPointChild> children = new ArrayList<>();
 
+    private MountPointChild schemaMounts;
+
     MountPointData(final QName label) {
         super(MountPointIdentifier.of(label));
     }
@@ -56,6 +58,12 @@ public final class MountPointData extends AbstractIdentifiable<MountPointIdentif
         addChild(data);
     }
 
+    public void setSchemaMounts(final @NonNull MountPointChild data) {
+        checkState(schemaMounts == null, "Attempted to reset schema-mounts from %s to %s", schemaMounts, data);
+        schemaMounts = requireNonNull(data);
+        addChild(data);
+    }
+
     public void addChild(final @NonNull MountPointChild data) {
         children.add(requireNonNull(data));
     }