NETVIRT-1630 migrate to md-sal APIs
[netvirt.git] / elanmanager / impl / src / main / java / org / opendaylight / netvirt / elan / l2gw / ha / commands / MergeCommand.java
index ddc2bfcad035d5ef1528bbf83722eeccd6bbc221..c56d22e5782fbb969f707cab969a12cbc3855e5b 100644 (file)
@@ -7,20 +7,21 @@
  */
 package org.opendaylight.netvirt.elan.l2gw.ha.commands;
 
-import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.OPERATIONAL;
+import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL;
 import static org.opendaylight.netvirt.elan.l2gw.ha.HwvtepHAUtil.isEmptyList;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.netvirt.elan.l2gw.ha.HwvtepHAUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.locator.set.attributes.LocatorSet;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
@@ -56,7 +57,7 @@ public abstract class MergeCommand<T extends DataObject, Y extends Builder, Z ex
         return transform(nodePath, updatedSrc);
     }
 
-    @Nonnull
+    @NonNull
     public List<T> diffByKey(List<T> updated, final List<T> original) {
         if (updated == null) {
             return new ArrayList<>();
@@ -129,18 +130,32 @@ public abstract class MergeCommand<T extends DataObject, Y extends Builder, Z ex
     }
 
     public List<T> transform(InstanceIdentifier<Node> nodePath, List<T> list) {
-        return list.stream().map(t -> transform(nodePath, t)).collect(Collectors.toList());
+        if (list != null) {
+            return list.stream().map(t -> transform(nodePath, t)).collect(Collectors.toList());
+        }
+        return new ArrayList<>();
     }
 
     public abstract T transform(InstanceIdentifier<Node> nodePath, T objT);
 
+    List<T> getDataSafe(Z existingData) {
+        if (existingData == null) {
+            return Collections.EMPTY_LIST;
+        }
+        List<T> result = getData(existingData);
+        if (result == null) {
+            return Collections.EMPTY_LIST;
+        }
+        return result;
+    }
+
     @Override
     public void mergeOperationalData(Y dst,
                                      Z existingData,
                                      Z src,
                                      InstanceIdentifier<Node> nodePath) {
-        List<T> origDstData = getData(existingData);
-        List<T> srcData = getData(src);
+        List<T> origDstData = getDataSafe(existingData);
+        List<T> srcData = getDataSafe(src);
         List<T> data = transformOpData(origDstData, srcData, nodePath);
         setData(dst, data);
         if (!isEmptyList(data)) {
@@ -149,10 +164,11 @@ public abstract class MergeCommand<T extends DataObject, Y extends Builder, Z ex
         }
     }
 
+    @Override
     public void mergeConfigData(Y dst,
                                 Z src,
                                 InstanceIdentifier<Node> nodePath) {
-        List<T> data        = getData(src);
+        List<T> data        = getDataSafe(src);
         List<T> transformed = transformConfigData(data, nodePath);
         setData(dst, transformed);
         if (!isEmptyList(data)) {