Expose EffectiveStatementInference from NormalizedAnyData
[yangtools.git] / yang / yang-data-codec-xml / src / main / java / org / opendaylight / yangtools / yang / data / codec / xml / StreamWriterFacade.java
index 28b18398b5bcce974aa4de642c64ad41c7f00c23..798057c359858f71fee28adf45909a8c5bbe1542 100644 (file)
@@ -7,10 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.data.codec.xml;
 
+import static com.google.common.base.Verify.verify;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.Strings;
 import java.io.IOException;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import javax.xml.XMLConstants;
@@ -22,7 +24,9 @@ import javax.xml.stream.XMLStreamWriter;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedAnydata;
-import org.opendaylight.yangtools.yang.data.util.SingleChildDataNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -283,9 +287,21 @@ final class StreamWriterFacade extends ValueWriter {
 
     void emitNormalizedAnydata(final NormalizedAnydata anydata) throws XMLStreamException {
         flushElement();
+
+        final EffectiveStatementInference inference = anydata.getInference();
+        final List<? extends EffectiveStatement<?, ?>> path = inference.statementPath();
+        final DataNodeContainer parent;
+        if (path.size() > 1) {
+            final EffectiveStatement<?, ?> stmt = path.get(path.size() - 2);
+            verify(stmt instanceof DataNodeContainer, "Unexpected statement %s", stmt);
+            parent = (DataNodeContainer) stmt;
+        } else {
+            parent = inference.getEffectiveModelContext();
+        }
+
         try {
-            anydata.writeTo(XMLStreamNormalizedNodeStreamWriter.create(writer, anydata.getEffectiveModelContext(),
-                new SingleChildDataNodeContainer(anydata.getContextNode())));
+            anydata.writeTo(XMLStreamNormalizedNodeStreamWriter.create(writer, inference.getEffectiveModelContext(),
+                parent));
         } catch (IOException e) {
             throw new XMLStreamException("Failed to emit anydata " + anydata, e);
         }