From a1fadde966f79c21668a591ec19cf454a891dfa2 Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Wed, 23 Sep 2015 15:00:14 +0200 Subject: [PATCH] Added type-safe DataObjectModification#getModifiedChildren Change-Id: I0489a1dd41c825f74f9fc1f9c8af38ab8c5d8830 Signed-off-by: Tony Tkacik --- .../binding/api/DataObjectModification.java | 20 +++++++++++++++++-- .../adapter/LazyDataObjectModification.java | 15 ++++++++++++-- 2 files changed, 31 insertions(+), 4 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 f902bb3922..26e9f40c1c 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 @@ -21,11 +21,17 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; /** * Modified Data Object. * - * Represents modification of Data Object. + * Represents modification of Data Object + * . + * @param Type of modified object * */ public interface DataObjectModification extends org.opendaylight.yangtools.concepts.Identifiable { + /** + * Represents type of modification which has occured. + * + */ enum ModificationType { /** * @@ -69,7 +75,7 @@ public interface DataObjectModification extends org.openda * 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. */ @@ -89,6 +95,16 @@ public interface DataObjectModification extends org.openda */ @Nonnull Collection> getModifiedChildren(); + /** + * Returns child list item modification if {@code child} was modified by this modification. + * + * @param childType Type of list item - must be list item with key + * @return Modification of {@code child} if {@code child} was modified, null otherwise. + * @throws IllegalArgumentException If supplied {@code childType} class is not valid child according + * to generated model. + */ + > Collection> getModifiedChildren(@Nonnull Class childType); + /** * Returns container child 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/LazyDataObjectModification.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataObjectModification.java index e7046162c4..14b76522f6 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 @@ -7,14 +7,13 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; -import org.opendaylight.mdsal.binding.api.DataObjectModification; - import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; +import org.opendaylight.mdsal.binding.api.DataObjectModification; import org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTreeNode; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.ChildOf; @@ -162,6 +161,18 @@ final class LazyDataObjectModification implements DataObje return childNodesCache; } + @SuppressWarnings("unchecked") + @Override + public > Collection> getModifiedChildren(Class childType) { + List> children = new ArrayList<>(); + for (DataObjectModification potential : getModifiedChildren()) { + if (childType.isAssignableFrom(potential.getDataType())) { + children.add((DataObjectModification) potential); + } + } + return children; + } + @Override public DataObjectModification getModifiedChild(final PathArgument arg) { final List domArgumentList = new ArrayList<>(); -- 2.36.6