ONOS-3829 Fixed bug with inconsistent parent's behaviours when merging drivers
Change-Id: If7b1924b034b0d8ce806410bb9efa4f5258c14f6
diff --git a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
index 781faf9..5472663 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
@@ -20,6 +20,7 @@
import com.google.common.collect.Maps;
import org.slf4j.Logger;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -110,8 +111,20 @@
// Merge the properties.
ImmutableMap.Builder<String, String> properties = ImmutableMap.builder();
properties.putAll(this.properties).putAll(other.properties());
+ List<Driver> completeParents = new ArrayList<>();
- return new DefaultDriver(name, other.parents(),
+ if (parents != null) {
+ parents.forEach(parent -> other.parents().forEach(otherParent -> {
+ if (otherParent.name().equals(parent.name())) {
+ completeParents.add(parent.merge(otherParent));
+ } else if (!completeParents.contains(otherParent)) {
+ completeParents.add(otherParent);
+ } else if (!completeParents.contains(parent)) {
+ completeParents.add(parent);
+ }
+ }));
+ }
+ return new DefaultDriver(name, completeParents.size() > 0 ? completeParents : other.parents(),
manufacturer, hwVersion, swVersion,
ImmutableMap.copyOf(behaviours), properties.build());
}