From: Robert Varga Date: Wed, 30 Sep 2020 12:24:13 +0000 (+0200) Subject: Improve BindingRuntimeContext.getAugmentationDefinition() X-Git-Tag: v7.0.0~36 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=b74c242b4eec43f2ec14a7f22019ca73f0077969;p=mdsal.git Improve BindingRuntimeContext.getAugmentationDefinition() All callers are already guarding the call site with a check, hence we can also require them to perform an explicit reinterpret. This pushes safety checks to compile-time. Also remove duplicate javadocs, so that we have one text defining semantics. Change-Id: I3ce23440c725441e663331e94a931ad09d71634a Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java index f9868d28be..6d66ce8888 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/FutureSchema.java @@ -138,7 +138,7 @@ abstract class FutureSchema implements AutoCloseable { public boolean test(final BindingRuntimeContext context) { return bindingClasses.stream().allMatch(clz -> { if (Augmentation.class.isAssignableFrom(clz)) { - return context.getAugmentationDefinition(clz) != null; + return context.getAugmentationDefinition(clz.asSubclass(Augmentation.class)) != null; } return context.getSchemaDefinition(clz) != null; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java index e8bca5d0d1..338b8046bd 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java @@ -203,7 +203,7 @@ abstract class DataContainerCodecContextReturned schema is schema definition from which augmentation class was generated. - * This schema is isolated from other augmentations. This means it contains - * augmentation definition as was present in original YANG module. - * - *

Children of returned schema does not contain any additional augmentations, - * which may be present in runtime for them, thus returned schema is unsuitable - * for use for validation of data. - * - *

For retrieving {@link AugmentationSchemaNode}, which will contains - * full model for child nodes, you should use method - * {@link #getResolvedAugmentationSchema(DataNodeContainer, Class)} - * which will return augmentation schema derived from supplied augmentation target - * schema. - * - * @param augClass Augmentation class - * @return Schema of augmentation or null if augmentaiton is not known in this context - * @throws IllegalArgumentException If supplied class is not an augmentation - */ @Override - public final @Nullable AugmentationSchemaNode getAugmentationDefinition(final Class augClass) { - checkArgument(Augmentation.class.isAssignableFrom(augClass), - "Class %s does not represent augmentation", augClass); + public final > AugmentationSchemaNode getAugmentationDefinition(final Class augClass) { return getTypes().findAugmentation(DefaultType.of(augClass)).orElse(null); } - /** - * Returns defining {@link DataSchemaNode} for supplied class. - * - *

Returned schema is schema definition from which class was generated. - * This schema may be isolated from augmentations, if supplied class - * represent node, which was child of grouping or augmentation. - * - *

For getting augmentation schema from augmentation class use - * {@link #getAugmentationDefinition(Class)} instead. - * - * @param cls Class which represents list, container, choice or case. - * @return Schema node, from which class was generated. - */ @Override public final DataSchemaNode getSchemaDefinition(final Class cls) { checkArgument(!Augmentation.class.isAssignableFrom(cls), "Supplied class must not be an augmentation (%s is)", @@ -178,15 +140,6 @@ public abstract class AbstractBindingRuntimeContext implements BindingRuntimeCon return new SimpleEntry<>(identifier, proxy); } - /** - * Returns resolved case schema for supplied class. - * - * @param schema Resolved parent choice schema - * @param childClass Class representing case. - * @return Optionally a resolved case schema,.empty if the choice is not legal in - * the given context. - * @throws IllegalArgumentException If supplied class does not represent case. - */ @Override public final Optional getCaseSchemaDefinition(final ChoiceSchemaNode schema, final Class childClass) { @@ -202,17 +155,6 @@ public abstract class AbstractBindingRuntimeContext implements BindingRuntimeCon return findInstantiatedCase(schema, (CaseSchemaNode) origSchema); } - /** - * Returns schema ({@link DataSchemaNode}, {@link AugmentationSchemaNode} or {@link TypeDefinition}) - * from which supplied class was generated. Returned schema may be augmented with - * additional information, which was not available at compile type - * (e.g. third party augmentations). - * - * @param type Binding Class for which schema should be retrieved. - * @return Instance of generated type (definition of Java API), along with - * {@link DataSchemaNode}, {@link AugmentationSchemaNode} or {@link TypeDefinition} - * which was used to generate supplied class. - */ @Override public final Entry getTypeWithSchema(final Class type) { return getTypeWithSchema(getTypes(), DefaultType.of(type)); diff --git a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java index 99b98d1c33..a525528e9b 100644 --- a/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java +++ b/binding/mdsal-binding-runtime-api/src/main/java/org/opendaylight/mdsal/binding/runtime/api/BindingRuntimeContext.java @@ -72,10 +72,9 @@ public interface BindingRuntimeContext extends EffectiveModelContextProvider, Im * schema. * * @param augClass Augmentation class - * @return Schema of augmentation or null if augmentaiton is not known in this context - * @throws IllegalArgumentException If supplied class is not an augmentation + * @return Schema of augmentation or null if augmentation is not known in this context */ - @Nullable AugmentationSchemaNode getAugmentationDefinition(Class augClass); + > @Nullable AugmentationSchemaNode getAugmentationDefinition(Class augClass); /** * Returns defining {@link DataSchemaNode} for supplied class. diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java index a48d44f0ca..464746eb9c 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ForwardingBindingRuntimeContext.java @@ -43,7 +43,7 @@ public abstract class ForwardingBindingRuntimeContext extends ForwardingObject i } @Override - public AugmentationSchemaNode getAugmentationDefinition(final Class augClass) { + public > AugmentationSchemaNode getAugmentationDefinition(final Class augClass) { return delegate().getAugmentationDefinition(augClass); }