Fix unit tests and bugs of EncodableDiscreteResources
Change-Id: Iea3b39dbdcfabaf23fa7e7ef6cb8a98bfe432081
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
index a3cc840..7ec9de0 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
@@ -66,6 +66,17 @@
return new EncodableDiscreteResources(parent, values);
}
+ private static DiscreteResources of(DiscreteResource parent, Map<Class<?>, EncodedDiscreteResources> map) {
+ if (isEmpty(map)) {
+ return DiscreteResources.empty();
+ }
+ return new EncodableDiscreteResources(parent, map);
+ }
+
+ private static boolean isEmpty(Map<Class<?>, EncodedDiscreteResources> map) {
+ return map.values().stream().allMatch(EncodedDiscreteResources::isEmpty);
+ }
+
EncodableDiscreteResources(DiscreteResource parent, Map<Class<?>, EncodedDiscreteResources> map) {
this.parent = parent;
this.map = map;
@@ -73,6 +84,9 @@
@Override
public Optional<DiscreteResource> lookup(DiscreteResourceId id) {
+ if (!id.parent().filter(parent.id()::equals).isPresent()) {
+ return Optional.empty();
+ }
DiscreteResource resource = Resources.discrete(id).resource();
Class<?> cls = getClass(resource);
return Optional.ofNullable(map.get(cls))
@@ -92,7 +106,7 @@
Map.Entry::getValue,
EncodedDiscreteResources::difference,
LinkedHashMap::new));
- return new EncodableDiscreteResources(parent, newMap);
+ return of(parent, newMap);
} else if (other instanceof EmptyDiscreteResources) {
return this;
}
@@ -102,8 +116,7 @@
@Override
public boolean isEmpty() {
- return map.values().stream()
- .allMatch(x -> x.isEmpty());
+ return isEmpty(map);
}
@Override
@@ -125,7 +138,7 @@
EncodedDiscreteResources::add,
LinkedHashMap::new
));
- return new EncodableDiscreteResources(parent, newMap);
+ return of(parent, newMap);
} else if (other instanceof EmptyDiscreteResources) {
return this;
}