Teach yang-data-codec-binfmt about SchemaNodeIdentifiers
[yangtools.git] / yang / yang-data-codec-binfmt / src / main / java / org / opendaylight / yangtools / yang / data / codec / binfmt / AbstractNormalizedNodeDataOutput.java
index e2b02d3a2ba8c30c65008a44a9a7a977e252c3ef..62adaf21a5cb99afbd7c5c746c3605b7404873d6 100755 (executable)
@@ -22,6 +22,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
 /**
  * Abstract base class for implementing {@link NormalizedNodeDataOutput} contract. This class uses
@@ -165,11 +167,18 @@ abstract class AbstractNormalizedNodeDataOutput implements NormalizedNodeDataOut
 
     @Override
     public final void writeSchemaPath(final SchemaPath path) throws IOException {
-        ensureHeaderWritten();
+        writeSchemaNodeIdentifier(path.isAbsolute(), path.getPathFromRoot());
+    }
+
+    @Override
+    public final void writeSchemaNodeIdentifier(final SchemaNodeIdentifier path) throws IOException {
+        writeSchemaNodeIdentifier(path instanceof Absolute, path.getNodeIdentifiers());
+    }
 
-        output.writeBoolean(path.isAbsolute());
+    private void writeSchemaNodeIdentifier(final boolean absolute, final Iterable<QName> qnames) throws IOException {
+        ensureHeaderWritten();
 
-        final Iterable<QName> qnames = path.getPathFromRoot();
+        output.writeBoolean(absolute);
         output.writeInt(Iterables.size(qnames));
         for (QName qname : qnames) {
             writeQNameInternal(qname);