Add CommonDataObjectCodecTreeNode.stream{Augmentation,DataObject}
[mdsal.git] / binding / mdsal-binding-dom-codec-api / src / main / java / org / opendaylight / mdsal / binding / dom / codec / api / CommonDataObjectCodecTreeNode.java
index 997f9eb1483bb2f22e45dca8a14fc2af072c4e48..a0ffa04fa9379b4ba90edc0f210759e555d47f3c 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.annotations.Beta;
 import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Empty;
@@ -22,7 +23,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
  *
  * @param <T> DataObject type
  */
-@Beta
 public interface CommonDataObjectCodecTreeNode<T extends DataObject>
         extends BindingDataObjectCodecTreeParent<Empty>, BindingObjectCodecTreeNode<T> {
     /**
@@ -49,6 +49,32 @@ public interface CommonDataObjectCodecTreeNode<T extends DataObject>
      */
     <E extends DataObject> @Nullable CommonDataObjectCodecTreeNode<E> streamChild(@NonNull Class<E> childClass);
 
+    default <A extends Augmentation<?>> @Nullable BindingAugmentationCodecTreeNode<A> streamAugmentation(
+            final @NonNull Class<A> childClass) {
+        final var result = streamChild(childClass);
+        if (result instanceof BindingAugmentationCodecTreeNode) {
+            return (BindingAugmentationCodecTreeNode<A>) result;
+        } else if (result == null) {
+            return null;
+        } else {
+            throw new IllegalArgumentException(
+                "Child " + childClass.getName() + " results in non-Augmentation " + result);
+        }
+    }
+
+    default <E extends DataObject> @Nullable BindingDataObjectCodecTreeNode<E> streamDataObject(
+            final @NonNull Class<E> childClass) {
+        final var result = streamChild(childClass);
+        if (result instanceof BindingDataObjectCodecTreeNode) {
+            return (BindingDataObjectCodecTreeNode<E>) result;
+        } else if (result == null) {
+            return null;
+        } else {
+            throw new IllegalArgumentException(
+                "Child " + childClass.getName() + " results in non-DataObject " + result);
+        }
+    }
+
     /**
      * Returns nested node context using supplied YANG Instance Identifier.
      *