Rework Anydata model
[yangtools.git] / yang / yang-data-api / src / main / java / org / opendaylight / yangtools / yang / data / api / schema / stream / NormalizedNodeWriter.java
index 5cc2386c97504f6a57b4fa6b9f7812a8b71c6b93..1647a7d616b4d66c288d41a1b5ee9c6f0c6e70e6 100644 (file)
@@ -20,10 +20,10 @@ import java.util.Optional;
 import java.util.Set;
 import javax.xml.stream.XMLStreamReader;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
+import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode;
 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -33,7 +33,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.OpaqueAnydataNode;
 import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode;
 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
@@ -53,11 +52,9 @@ public class NormalizedNodeWriter implements Closeable, Flushable {
     private static final Logger LOG = LoggerFactory.getLogger(NormalizedNodeWriter.class);
 
     private final @NonNull NormalizedNodeStreamWriter writer;
-    private final @Nullable OpaqueAnydataExtension opaqueAnydataExt;
 
     protected NormalizedNodeWriter(final NormalizedNodeStreamWriter writer) {
         this.writer = requireNonNull(writer);
-        opaqueAnydataExt = writer.getExtensions().getInstance(OpaqueAnydataExtension.class);
     }
 
     protected final NormalizedNodeStreamWriter getWriter() {
@@ -154,21 +151,24 @@ public class NormalizedNodeWriter implements Closeable, Flushable {
             writer.domSourceValue(anyXmlNode.getValue());
             writer.endNode();
             return true;
-        } else if (node instanceof OpaqueAnydataNode) {
-            return writeAnydata((OpaqueAnydataNode) node);
-        }
-        return false;
-    }
+        } else if (node instanceof AnydataNode) {
+            final AnydataExtension ext = writer.getExtensions().getInstance(AnydataExtension.class);
+            if (ext != null) {
+                final AnydataNode<?> anydata = (AnydataNode<?>) node;
+                final Class<?> model = anydata.getValueObjectModel();
+                if (ext.startAnydataNode(anydata.getIdentifier(), model)) {
+                    writer.scalarValue(anydata.getValue());
+                    writer.endNode();
+                    return true;
+                }
 
-    private boolean writeAnydata(final OpaqueAnydataNode node) throws IOException {
-        if (opaqueAnydataExt == null) {
-            LOG.debug("Writer {} cannot support anydata node {}", writer, node);
-            return false;
+                LOG.debug("Writer {} does not support anydata in form of {}", writer, model);
+            } else {
+                LOG.debug("Writer {} does not support anydata", writer);
+            }
         }
 
-        opaqueAnydataExt.streamOpaqueAnydataNode(node.getIdentifier(), node.getValue());
-        writer.endNode();
-        return true;
+        return false;
     }
 
     /**