import com.google.common.annotations.Beta;
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;
}
}
+ /**
+ * Look up the codec for specified augmentation path.
+ *
+ * @param <A> DataObject type
+ * @param path Binding path
+ * @return A {@link BindingAugmentationCodecTreeNode}
+ * @throws NullPointerException if {@code path} is {@code null}
+ * @throws IllegalArgumentException if the codec cannot be resolved
+ */
+ <A extends Augmentation<?>> @NonNull BindingAugmentationCodecTreeNode<A> getAugmentationCodec(
+ InstanceIdentifier<A> path);
+
+ /**
+ * Look up the codec for specified ordinary DataObject path.
+ *
+ * @param <T> DataObject type
+ * @param path Binding path
+ * @return A {@link BindingDataObjectCodecTreeNode}
+ * @throws NullPointerException if {@code path} is {@code null}
+ * @throws IllegalArgumentException if the codec cannot be resolved or refers to an Augmentation
+ */
+ <T extends DataObject> @NonNull BindingDataObjectCodecTreeNode<T> getDataObjectCodec(InstanceIdentifier<T> path);
+
/**
* Look up the codec for specified path, constructing the {@link YangInstanceIdentifier} corresponding to it.
*
import java.time.Instant;
import java.util.Map.Entry;
import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingAugmentationCodecTreeNode;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingIdentityCodec;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingInstanceIdentifierCodec;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingLazyContainerNode;
import org.opendaylight.mdsal.binding.dom.codec.api.CommonDataObjectCodecTreeNode;
import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
import org.opendaylight.yangtools.yang.binding.Action;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
import org.opendaylight.yangtools.yang.binding.BaseNotification;
import org.opendaylight.yangtools.yang.binding.DataContainer;
import org.opendaylight.yangtools.yang.binding.DataObject;
return delegate().getSubtreeCodecWithPath(path);
}
+ @Override
+ public <A extends Augmentation<?>> BindingAugmentationCodecTreeNode<A> getAugmentationCodec(
+ final InstanceIdentifier<A> path) {
+ return delegate().getAugmentationCodec(path);
+ }
+
+ @Override
+ public <T extends DataObject> BindingDataObjectCodecTreeNode<T> getDataObjectCodec(
+ final InstanceIdentifier<T> path) {
+ return delegate().getDataObjectCodec(path);
+ }
+
@Override
public <T extends DataObject> CommonDataObjectCodecTreeNode<T> getSubtreeCodec(final InstanceIdentifier<T> path) {
return delegate().getSubtreeCodec(path);
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;
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) {
import java.util.List;
import org.junit.Test;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.yang.gen.v1.urn.test.opendaylight.bug._5524.module1.rev160101.grouping.module1.ListModule11Builder;
import org.opendaylight.yang.gen.v1.urn.test.opendaylight.bug._5524.module1.rev160101.grouping.module1.list.module1._1.ListModule12Builder;
import org.opendaylight.yang.gen.v1.urn.test.opendaylight.bug._5524.module1.rev160101.grouping.module1.list.module1._1.list.module1._2.ContainerModule1Builder;
import org.opendaylight.yang.gen.v1.urn.test.opendaylight.bug._5524.module4.rev160101.module4.main.ContainerModule4Builder;
import org.opendaylight.yang.gen.v1.urn.test.opendaylight.bug._5524.module4.rev160101.module4.main.container.module._4.ManualContainerModule11Builder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
public class Bug5524augmentUses extends AbstractBindingCodecTest {
@Test
.build())
.build();
- final var subtreeCodec = (BindingDataObjectCodecTreeNode<Module4Main>) codecContext.getSubtreeCodec(
- InstanceIdentifier.create(Module4Main.class));
- final NormalizedNode serialized = subtreeCodec.serialize(module4Main);
- final NormalizedNode manualSerialized = subtreeCodec.serialize(manualModule4Main);
- final NormalizedNode containerManualSerialized = subtreeCodec.serialize(contManualModule4Main);
+ final var subtreeCodec = codecContext.getDataObjectCodec(InstanceIdentifier.create(Module4Main.class));
+ final var serialized = subtreeCodec.serialize(module4Main);
+ final var manualSerialized = subtreeCodec.serialize(manualModule4Main);
+ final var containerManualSerialized = subtreeCodec.serialize(contManualModule4Main);
assertNotNull(serialized);
assertNotNull(manualSerialized);
assertNotNull(containerManualSerialized);
import java.util.Collections;
import org.junit.Test;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101.BooleanContainer;
import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101.BooleanContainerBuilder;
import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101._boolean.container.BooleanListBuilder;
import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101._boolean.container.BooleanListIntKey;
import org.opendaylight.yang.gen.v1.urn.yang.foo.rev160101._boolean.container.BooleanListKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
public class Bug5845booleanKeyTest extends AbstractBindingCodecTest {
@Test
.build()))
.build();
- final var subtreeCodec = (BindingDataObjectCodecTreeNode<BooleanContainer>) codecContext.getSubtreeCodec(
- InstanceIdentifier.create(BooleanContainer.class));
- final NormalizedNode serializedInt = subtreeCodec.serialize(booleanContainerInt);
+ final var subtreeCodec = codecContext.getDataObjectCodec(InstanceIdentifier.create(BooleanContainer.class));
+ final var serializedInt = subtreeCodec.serialize(booleanContainerInt);
assertNotNull(serializedInt);
- final NormalizedNode serialized = subtreeCodec.serialize(booleanContainer);
+ final var serialized = subtreeCodec.serialize(booleanContainer);
assertNotNull(serialized);
}
}
@Before
public void before() {
super.before();
- topNode = (BindingDataObjectCodecTreeNode<Top>) codecContext.getSubtreeCodec(TOP_PATH);
- contNode = (BindingDataObjectCodecTreeNode<Cont>) codecContext.getSubtreeCodec(CONT_PATH);
+ topNode = codecContext.getDataObjectCodec(TOP_PATH);
+ contNode = codecContext.getDataObjectCodec(CONT_PATH);
}
private static Map<TopLevelListKey, TopLevelList> createList(final int num) {
*/
package org.opendaylight.mdsal.yanglib.rfc8525;
-import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.VisibleForTesting;
LegacyContentBuilder(final YangLibraryContentBuilderImpl delegate, final BindingCodecTree codecTree) {
this.delegate = requireNonNull(delegate);
- legacyCodec = (BindingDataObjectCodecTreeNode<ModulesState>)
- verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class)));
+ legacyCodec = codecTree.getDataObjectCodec(InstanceIdentifier.create(ModulesState.class));
}
@Override
package org.opendaylight.mdsal.yanglib.rfc8525;
import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.base.Verify.verifyNotNull;
import java.util.HashMap;
import java.util.Map;
YangLibraryContentBuilderImpl(final BindingCodecTree codecTree) {
this.codecTree = Objects.requireNonNull(codecTree);
- codec = (BindingDataObjectCodecTreeNode<YangLibrary>)
- verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class)));
+ codec = codecTree.getDataObjectCodec(InstanceIdentifier.create(YangLibrary.class));
}
@Override
*/
package org.opendaylight.mdsal.yanglib.rfc8525;
-import static com.google.common.base.Verify.verifyNotNull;
-
import com.google.common.annotations.Beta;
import javax.inject.Inject;
import javax.inject.Singleton;
generator.generateTypeMapping(context), snapshot));
identityCodec = codecTree.getIdentityCodec();
- codec = (BindingDataObjectCodecTreeNode<YangLibrary>)
- verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class)));
- legacyCodec = (BindingDataObjectCodecTreeNode<ModulesState>)
- verifyNotNull(codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class)));
+ codec = codecTree.getDataObjectCodec(InstanceIdentifier.create(YangLibrary.class));
+ legacyCodec = codecTree.getDataObjectCodec(InstanceIdentifier.create(ModulesState.class));
}
@Override
import java.util.Optional;
import java.util.Set;
import org.junit.Test;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.ModulesState;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.RevisionIdentifier;
public class LegacyYangLibraryFormatTest extends AbstractYangLibraryTest {
@Test
public void testLegacyFormat() {
- final var legacyCodec = (BindingDataObjectCodecTreeNode<ModulesState>)
- codecTree.getSubtreeCodec(InstanceIdentifier.create(ModulesState.class));
+ final var legacyCodec = codecTree.getDataObjectCodec(InstanceIdentifier.create(ModulesState.class));
final Optional<ContainerNode> legacyContent = yangLib.newContentBuilder()
.defaultContext(runtimeContext.getEffectiveModelContext())
import java.util.Map;
import java.util.Set;
import org.junit.Test;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.RevisionIdentifier;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.YangLibrary;
public class YangLibrarySupportTest extends AbstractYangLibraryTest {
@Test
public void testFormatSchema() {
- final var codec = (BindingDataObjectCodecTreeNode<YangLibrary>)
- codecTree.getSubtreeCodec(InstanceIdentifier.create(YangLibrary.class));
+ final var codec = codecTree.getDataObjectCodec(InstanceIdentifier.create(YangLibrary.class));
final ContainerNode nonLegacyContent = yangLib.newContentBuilder()
.defaultContext(runtimeContext.getEffectiveModelContext()).formatYangLibraryContent();