Revert "Revert "Do not emit empty lists to NormalizedNodes"" 02/86502/7
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 19 Dec 2019 12:40:10 +0000 (13:40 +0100)
committerRobert Varga <nite@hq.sk>
Sat, 28 Dec 2019 23:17:57 +0000 (23:17 +0000)
This reverts commit 73b85db4f60f2fb003af6cfdffaaef51b2ac2df2,
reinstating the changes done in cbe6a8cafaec862f2a918ecc9af99720090d3c8a
as part of MDSAL-456.

JIRA: MDSAL-450
Change-Id: Ib9ee71194ab06eb873b9257b4e7eed450162f816
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamer.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/AugmentationSubstitutionTest.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/NormalizedNodeSerializeDeserializeTest.java
binding/mdsal-binding-test-model/src/main/java/org/opendaylight/mdsal/binding/test/model/util/ListsBindingUtils.java

index ab8ef78532a18a633f27398ae589486ba3be6328..3b7c8798961152961322b148e6e78e4f31d6c8b5 100644 (file)
@@ -136,8 +136,9 @@ public abstract class DataObjectStreamer<T extends DataObject> implements DataOb
     protected static final <E extends DataObject> void streamList(final Class<E> childClass,
             final DataObjectStreamer<E> childStreamer, final DataObjectSerializerRegistry registry,
             final BindingStreamEventWriter writer, final List<? extends E> value) throws IOException {
-        if (value != null) {
-            writer.startUnkeyedList(childClass, value.size());
+        final int size = nullSize(value);
+        if (size != 0) {
+            writer.startUnkeyedList(childClass, size);
             commonStreamList(registry, writer, childStreamer, value);
         }
     }
@@ -145,8 +146,9 @@ public abstract class DataObjectStreamer<T extends DataObject> implements DataOb
     protected static final <E extends DataObject & Identifiable<?>> void streamMap(final Class<E> childClass,
             final DataObjectStreamer<E> childStreamer, final DataObjectSerializerRegistry registry,
             final BindingStreamEventWriter writer, final Map<?, ? extends E> value) throws IOException {
-        if (value != null) {
-            writer.startMapNode(childClass, value.size());
+        final int size = nullSize(value);
+        if (size != 0) {
+            writer.startMapNode(childClass, size);
             commonStreamList(registry, writer, childStreamer, value.values());
         }
     }
@@ -154,8 +156,9 @@ public abstract class DataObjectStreamer<T extends DataObject> implements DataOb
     protected static final <E extends DataObject & Identifiable<?>> void streamOrderedMap(final Class<E> childClass,
             final DataObjectStreamer<E> childStreamer, final DataObjectSerializerRegistry registry,
             final BindingStreamEventWriter writer, final List<? extends E> value) throws IOException {
-        if (value != null) {
-            writer.startOrderedMapNode(childClass, value.size());
+        final int size = nullSize(value);
+        if (size != 0) {
+            writer.startOrderedMapNode(childClass, size);
             commonStreamList(registry, writer, childStreamer, value);
         }
     }
@@ -204,4 +207,12 @@ public abstract class DataObjectStreamer<T extends DataObject> implements DataOb
     private static <T extends DataObject> boolean tryCache(final BindingStreamEventWriter writer, final T value) {
         return writer instanceof BindingSerializer ? ((BindingSerializer<?, T>) writer).serialize(value) == null : true;
     }
+
+    private static int nullSize(final List<?> list) {
+        return list == null ? 0 : list.size();
+    }
+
+    private static int nullSize(final Map<?, ?> map) {
+        return map == null ? 0 : map.size();
+    }
 }
index 333a2eed4799a578cc829a0873e057d5ac26d078..42e62e272b55be37927d22d5c054e7fd376df07a 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.mdsal.binding.dom.codec.test;
 
 import static org.junit.Assert.assertEquals;
 
-import java.util.Collections;
 import java.util.Optional;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.RpcComplexUsesAugment;
@@ -72,7 +71,6 @@ public class AugmentationSubstitutionTest extends AbstractBindingCodecTest {
     private static RpcComplexUsesAugment createComplexData() {
         return new RpcComplexUsesAugmentBuilder()
                 .setContainerWithUses(new ContainerWithUsesBuilder().setLeafFromGrouping("foo").build())
-                .setListViaUses(Collections.emptyMap())
                 .build();
     }
 }
index 81a54d15ce5443805c6d9af38c4aa22c1c703f40..d5e40eeeb27ce33884403d8545b8eb8ab2567601 100644 (file)
@@ -137,7 +137,7 @@ public class NormalizedNodeSerializeDeserializeTest extends AbstractBindingCodec
     private static ContainerNode getEmptyTop() {
         return ImmutableContainerNodeBuilder.create()
                     .withNodeIdentifier(new NodeIdentifier(TOP_QNAME))
-                    .withChild(mapNodeBuilder(TOP_LEVEL_LIST_QNAME).build()).build();
+                    .build();
     }
 
     private static final QName AGUMENT_STRING_Q = QName.create(TOP_QNAME, "augmented-string");
index 25796a586190a2bcfb7e9d29b35185cc572a2b7b..230b5b20c82cbad5aeb4a95f856e4c6d23383e99 100644 (file)
@@ -59,6 +59,10 @@ public final class ListsBindingUtils {
         return path(key).augmentation(augmentation);
     }
 
+    public static Top top() {
+        return new TopBuilder().build();
+    }
+
     public static Top top(final TopLevelList... listItems) {
         return new TopBuilder().setTopLevelList(Maps.uniqueIndex(Arrays.asList(listItems), TopLevelList::key)).build();
     }