Account for reported UNMODIFIED nodes
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / md / sal / binding / impl / LazyDataObjectModification.java
index c3aff15e7a600f4fe83743e1ee77688273dc46db..1a21b98d0475a557854a7c6618ac716a1957a521 100644 (file)
@@ -7,7 +7,9 @@
  */
 package org.opendaylight.controller.md.sal.binding.impl;
 
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+import static org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType.UNMODIFIED;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -54,14 +56,14 @@ final class LazyDataObjectModification<T extends DataObject> implements DataObje
     private volatile ModificationType modificationType;
 
     private LazyDataObjectModification(final BindingCodecTreeNode<T> codec, final DataTreeCandidateNode domData) {
-        this.codec = Preconditions.checkNotNull(codec);
-        this.domData = Preconditions.checkNotNull(domData);
+        this.codec = requireNonNull(codec);
+        this.domData = requireNonNull(domData);
         this.identifier = codec.deserializePathArgument(domData.getIdentifier());
     }
 
     static <T extends DataObject> LazyDataObjectModification<T> create(final BindingCodecTreeNode<T> codec,
             final DataTreeCandidateNode domData) {
-        return new LazyDataObjectModification<>(codec,domData);
+        return new LazyDataObjectModification<>(codec, domData);
     }
 
     private static Collection<LazyDataObjectModification<? extends DataObject>> from(
@@ -74,22 +76,24 @@ final class LazyDataObjectModification<T extends DataObject> implements DataObje
     private static void populateList(final List<LazyDataObjectModification<? extends DataObject>> result,
             final BindingCodecTreeNode<?> parentCodec, final Collection<DataTreeCandidateNode> domChildNodes) {
         for (final DataTreeCandidateNode domChildNode : domChildNodes) {
-            final BindingStructuralType type = BindingStructuralType.from(domChildNode);
-            if (type != BindingStructuralType.NOT_ADDRESSABLE) {
-                /*
-                 *  Even if type is UNKNOWN, from perspective of BindingStructuralType
-                 *  we try to load codec for it. We will use that type to further specify
-                 *  debug log.
-                 */
-                try {
-                    final BindingCodecTreeNode<?> childCodec =
-                            parentCodec.yangPathArgumentChild(domChildNode.getIdentifier());
-                    populateList(result,type, childCodec, domChildNode);
-                } catch (final IllegalArgumentException e) {
-                    if (type == BindingStructuralType.UNKNOWN) {
-                        LOG.debug("Unable to deserialize unknown DOM node {}",domChildNode,e);
-                    } else {
-                        LOG.debug("Binding representation for DOM node {} was not found",domChildNode,e);
+            if (domChildNode.getModificationType() != UNMODIFIED) {
+                final BindingStructuralType type = BindingStructuralType.from(domChildNode);
+                if (type != BindingStructuralType.NOT_ADDRESSABLE) {
+                    /*
+                     *  Even if type is UNKNOWN, from perspective of BindingStructuralType
+                     *  we try to load codec for it. We will use that type to further specify
+                     *  debug log.
+                     */
+                    try {
+                        final BindingCodecTreeNode<?> childCodec =
+                                parentCodec.yangPathArgumentChild(domChildNode.getIdentifier());
+                        populateList(result, type, childCodec, domChildNode);
+                    } catch (final IllegalArgumentException e) {
+                        if (type == BindingStructuralType.UNKNOWN) {
+                            LOG.debug("Unable to deserialize unknown DOM node {}", domChildNode, e);
+                        } else {
+                            LOG.debug("Binding representation for DOM node {} was not found", domChildNode, e);
+                        }
                     }
                 }
             }
@@ -119,7 +123,9 @@ final class LazyDataObjectModification<T extends DataObject> implements DataObje
     private static void populateListWithSingleCodec(final List<LazyDataObjectModification<? extends DataObject>> result,
             final BindingCodecTreeNode<?> codec, final Collection<DataTreeCandidateNode> childNodes) {
         for (final DataTreeCandidateNode child : childNodes) {
-            result.add(create(codec, child));
+            if (child.getModificationType() != UNMODIFIED) {
+                result.add(create(codec, child));
+            }
         }
     }
 
@@ -234,10 +240,7 @@ final class LazyDataObjectModification<T extends DataObject> implements DataObje
         while (toEnter.hasNext() && current != null) {
             current = current.getModifiedChild(toEnter.next());
         }
-        if (current != null) {
-            return create(childCodec, current);
-        }
-        return null;
+        return current != null && current.getModificationType() != UNMODIFIED ? create(childCodec, current) : null;
     }
 
     @Override