Improve BindingCodecTree interface
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / BindingCodecContext.java
index b8949e4dc85a0008307a472c0487b07e4291fa8c..9842c0f0dde47c106fe2939cb7e6f9e0cff797ac 100644 (file)
@@ -58,6 +58,7 @@ import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.util.ClassLoaderUtils;
 import org.opendaylight.yangtools.yang.binding.Action;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.BaseIdentity;
 import org.opendaylight.yangtools.yang.binding.BaseNotification;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
@@ -208,7 +209,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
             final InstanceIdentifier<?> path, final NormalizedNodeStreamWriter domWriter) {
         final var yangArgs = new ArrayList<YangInstanceIdentifier.PathArgument>();
         final var codecContext = getCodecContextNode(path, yangArgs);
-        return Map.entry(YangInstanceIdentifier.create(yangArgs),
+        return Map.entry(YangInstanceIdentifier.of(yangArgs),
             new BindingToNormalizedStreamWriter(codecContext, domWriter));
     }
 
@@ -508,6 +509,28 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
         return root.streamChild(childClass);
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    public <A extends Augmentation<?>> BindingAugmentationCodecTreeNode<A> getAugmentationCodec(
+            final InstanceIdentifier<A> path) {
+        final var codecContext = getCodecContextNode(path, null);
+        if (codecContext instanceof BindingAugmentationCodecTreeNode) {
+            return (BindingAugmentationCodecTreeNode<A>) codecContext;
+        }
+        throw new IllegalArgumentException(path + " does not refer to an Augmentation");
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public <T extends DataObject> BindingDataObjectCodecTreeNode<T> getDataObjectCodec(
+            final InstanceIdentifier<T> path) {
+        final var codecContext = getCodecContextNode(path, null);
+        if (codecContext instanceof BindingDataObjectCodecTreeNode) {
+            return (BindingDataObjectCodecTreeNode<T>) codecContext;
+        }
+        throw new IllegalArgumentException(path + " does not refer to a plain DataObject");
+    }
+
     @Override
     @SuppressWarnings("unchecked")
     public <T extends DataObject> CodecWithPath<T> getSubtreeCodecWithPath(final InstanceIdentifier<T> path) {
@@ -516,7 +539,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
 
         // TODO Do we need defensive check here?
         return new CodecWithPath<>((CommonDataObjectCodecTreeNode<T>) codecContext,
-            YangInstanceIdentifier.create(yangArgs));
+            YangInstanceIdentifier.of(yangArgs));
     }
 
     @Override
@@ -551,7 +574,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
         // We create Binding Stream Writer which translates from Binding to Normalized Nodes
         final var yangArgs = new ArrayList<YangInstanceIdentifier.PathArgument>();
         final var codecContext = getCodecContextNode(path, yangArgs);
-        final var yangPath = YangInstanceIdentifier.create(yangArgs);
+        final var yangPath = YangInstanceIdentifier.of(yangArgs);
 
         // We create DOM stream writer which produces normalized nodes
         final var result = new NormalizationResultHolder();