From 53c7cdf938ab93827e53e1de3e8aebc03d500ded Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 13 Jan 2024 16:42:21 +0100 Subject: [PATCH] Report ExactDataObjectStep from DataObjectModification DataObjectModification relates to an exact DataObject, hence it should expose ExactDataObjecStep. While we are at it, we clean up some of the method naming and disconnect it from Identifiable. JIRA: MDSAL-815 Change-Id: Iaa2650ee27611bb0cfa2912d5069ad6e79f01bc0 Signed-off-by: Robert Varga --- .../binding/api/DataObjectModification.java | 94 ++++++++++++++++--- .../AbstractDataObjectModification.java | 31 +++--- .../adapter/LazyAugmentationModification.java | 7 +- .../adapter/LazyDataObjectModification.java | 3 +- 4 files changed, 99 insertions(+), 36 deletions(-) diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataObjectModification.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataObjectModification.java index 82c1859602..302958e785 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataObjectModification.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataObjectModification.java @@ -10,13 +10,12 @@ package org.opendaylight.mdsal.binding.api; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.ChildOf; import org.opendaylight.yangtools.yang.binding.ChoiceIn; import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.DataObjectStep; import org.opendaylight.yangtools.yang.binding.ExactDataObjectStep; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.Key; import org.opendaylight.yangtools.yang.binding.KeyAware; @@ -26,7 +25,7 @@ import org.opendaylight.yangtools.yang.binding.KeyAware; * * @param Type of modified object */ -public interface DataObjectModification extends Identifiable> { +public interface DataObjectModification { /** * Represents type of modification which has occurred. */ @@ -45,45 +44,112 @@ public interface DataObjectModification extends Identifiab DELETE } - @Override - DataObjectStep getIdentifier(); + @Deprecated(since = "13.0.0", forRemoval = true) + default @NonNull ExactDataObjectStep getIdentifier() { + return step(); + } + + /** + * Return the {@link InstanceIdentifier} step this modification corresponds to. + * + * @return the {@link InstanceIdentifier} step this modification corresponds to + */ + @NonNull ExactDataObjectStep step(); /** * Returns type of modified object. * * @return type of modified object. */ - @NonNull Class getDataType(); + default @NonNull Class dataType() { + return step().type(); + } + + /** + * Returns type of modified object. + * + * @return type of modified object. + * @deprecated Use {@link #dataType()} instead. + */ + @Deprecated(since = "13.0.0", forRemoval = true) + default @NonNull Class getDataType() { + return dataType(); + } + + /** + * Returns type of modification. + * + * @return type of performed modification. + */ + @NonNull ModificationType modificationType(); /** * Returns type of modification. * * @return type Type of performed modification. */ - @NonNull ModificationType getModificationType(); + @Deprecated(since = "13.0.0", forRemoval = true) + default @NonNull ModificationType getModificationType() { + return modificationType(); + } + + /** + * Returns before-state of top level container. Implementations are encouraged, but not required to provide this + * state. + * + * @return State of object before modification. Null if subtree was not present, or the implementation cannot + * provide the state. + */ + @Nullable T dataBefore(); /** - * Returns before-state of top level container. Implementations are encouraged, but not required - * to provide this state. + * Returns before-state of top level container. Implementations are encouraged, but not required to provide this + * state. * - * @return State of object before modification. Null if subtree was not present, or the - * implementation cannot provide the state. + * @return State of object before modification. Null if subtree was not present, or the implementation cannot + * provide the state. + * @deprecated Use {@link #dataBefore()} instead. */ - @Nullable T getDataBefore(); + @Deprecated(since = "13.0.0", forRemoval = true) + default @Nullable T getDataBefore() { + return dataBefore(); + } /** * Returns after-state of top level container. * * @return State of object after modification. Null if subtree is not present. */ - @Nullable T getDataAfter(); + @Nullable T dataAfter(); + + /** + * Returns after-state of top level container. + * + * @return State of object after modification. Null if subtree is not present. + * @deprecated Use {@link #dataAfter()} instead. + */ + @Deprecated(since = "13.0.0", forRemoval = true) + default @Nullable T getDataAfter() { + return dataAfter(); + } /** * Returns unmodifiable collection of modified direct children. * * @return unmodifiable collection of modified direct children. */ - @NonNull Collection> getModifiedChildren(); + @NonNull Collection> modifiedChildren(); + + /** + * Returns unmodifiable collection of modified direct children. + * + * @return unmodifiable collection of modified direct children. + * @deprecated Use {@link #modifiedChildren()} instead. + */ + @Deprecated(since = "13.0.0", forRemoval = true) + default @NonNull Collection> getModifiedChildren() { + return modifiedChildren(); + } /** * Returns child list item modification if {@code child} was modified by this modification. diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractDataObjectModification.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractDataObjectModification.java index 987639da7c..6fe65414f6 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractDataObjectModification.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractDataObjectModification.java @@ -36,7 +36,6 @@ import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.ChildOf; import org.opendaylight.yangtools.yang.binding.ChoiceIn; import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.DataObjectStep; import org.opendaylight.yangtools.yang.binding.ExactDataObjectStep; import org.opendaylight.yangtools.yang.binding.Key; import org.opendaylight.yangtools.yang.binding.KeyAware; @@ -86,7 +85,7 @@ abstract sealed class AbstractDataObjectModification identifier; + final @NonNull ExactDataObjectStep step; final @NonNull N codec; @SuppressWarnings("unused") @@ -102,9 +101,10 @@ abstract sealed class AbstractDataObjectModification step) { + AbstractDataObjectModification(final DataTreeCandidateNode domData, final N codec, + final ExactDataObjectStep step) { this.domData = requireNonNull(domData); - identifier = requireNonNull(step); + this.step = requireNonNull(step); this.codec = requireNonNull(codec); } @@ -120,17 +120,12 @@ abstract sealed class AbstractDataObjectModification getDataType() { - return codec.getBindingClass(); + public final ExactDataObjectStep step() { + return step; } @Override - public final DataObjectStep getIdentifier() { - return identifier; - } - - @Override - public final ModificationType getModificationType() { + public final ModificationType modificationType() { final var local = (ModificationType) MODIFICATION_TYPE.getAcquire(this); return local != null ? local : loadModificationType(); } @@ -151,7 +146,7 @@ abstract sealed class AbstractDataObjectModification> getModifiedChildren() { + public final ImmutableList> modifiedChildren() { final var local = (ImmutableList>) MODIFIED_CHILDREN.getAcquire(this); return local != null ? local : loadModifiedChilden(); } @@ -226,7 +221,7 @@ abstract sealed class AbstractDataObjectModification & DataObject, C extends ChildOf> List> getModifiedChildren(final Class caseType, final Class childType) { return streamModifiedChildren(childType) - .filter(child -> caseType.equals(child.identifier.caseType())) + .filter(child -> caseType.equals(child.step.caseType())) .collect(Collectors.toList()); } @@ -244,7 +239,7 @@ abstract sealed class AbstractDataObjectModification Stream> streamModifiedChildren( final Class childType) { return getModifiedChildren().stream() - .filter(child -> childType.isAssignableFrom(child.getDataType())) + .filter(child -> childType.isAssignableFrom(child.dataType())) .map(child -> (LazyDataObjectModification) child); } @@ -290,7 +285,7 @@ abstract sealed class AbstractDataObjectModification domChildNodes(); diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyAugmentationModification.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyAugmentationModification.java index 8a2594468d..a19c4e60bf 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyAugmentationModification.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyAugmentationModification.java @@ -17,6 +17,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.dom.codec.api.BindingAugmentationCodecTreeNode; import org.opendaylight.yangtools.yang.binding.Augmentation; +import org.opendaylight.yangtools.yang.binding.ExactDataObjectStep; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode; @@ -31,7 +32,7 @@ final class LazyAugmentationModification> private LazyAugmentationModification(final BindingAugmentationCodecTreeNode codec, final DataTreeCandidateNode parent, final ImmutableList domChildNodes) { - super(parent, codec, codec.deserializePathArgument(null)); + super(parent, codec, (ExactDataObjectStep) codec.deserializePathArgument(null)); this.domChildNodes = requireNonNull(domChildNodes); } @@ -66,8 +67,8 @@ final class LazyAugmentationModification> @Override org.opendaylight.yangtools.yang.data.tree.api.ModificationType domModificationType() { - final var before = getDataBefore(); - final var after = getDataAfter(); + final var before = dataBefore(); + final var after = dataAfter(); if (before == null) { return after == null ? org.opendaylight.yangtools.yang.data.tree.api.ModificationType.UNMODIFIED : org.opendaylight.yangtools.yang.data.tree.api.ModificationType.APPEARED; diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataObjectModification.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataObjectModification.java index d885f30c49..326f1665c7 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataObjectModification.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataObjectModification.java @@ -12,6 +12,7 @@ import java.util.Collection; import org.opendaylight.mdsal.binding.api.DataObjectModification; import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.ExactDataObjectStep; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode; @@ -28,7 +29,7 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode; final class LazyDataObjectModification extends AbstractDataObjectModification> { LazyDataObjectModification(final BindingDataObjectCodecTreeNode codec, final DataTreeCandidateNode domData) { - super(domData, codec, codec.deserializePathArgument(domData.name())); + super(domData, codec, (ExactDataObjectStep) codec.deserializePathArgument(domData.name())); } @Override -- 2.36.6