Make serialized resources more compact to omit redundant parent resource ID

Change-Id: Icafe92f35bded405dd39e57ad8380bca82a6d720
(cherry picked from commit d68739b5839e1d2be907d3806e2c742df9da95fd)
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 a20ca52..7eaedc1 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
@@ -19,7 +19,6 @@
 import org.onosproject.net.resource.DiscreteResource;
 import org.onosproject.net.resource.DiscreteResourceCodec;
 import org.onosproject.net.resource.DiscreteResourceId;
-import org.onosproject.net.resource.DiscreteResourceSet;
 import org.onosproject.net.resource.Resources;
 
 import java.util.LinkedHashMap;
@@ -36,7 +35,7 @@
 final class EncodableDiscreteResources implements DiscreteResources {
     private static final Codecs CODECS = Codecs.getInstance();
     private final DiscreteResource parent;
-    private final Map<Class<?>, DiscreteResourceSet> values;
+    private final Map<Class<?>, EncodedDiscreteResources> values;
 
     private static Class<?> getClass(DiscreteResource resource) {
         return resource.valueAs(Object.class).map(Object::getClass).get();
@@ -55,16 +54,16 @@
         Map<Class<?>, Set<DiscreteResource>> grouped = resources.stream()
                 .collect(Collectors.groupingBy(x -> getClass(x), Collectors.toCollection(LinkedHashSet::new)));
 
-        Map<Class<?>, DiscreteResourceSet> values = new LinkedHashMap<>();
+        Map<Class<?>, EncodedDiscreteResources> values = new LinkedHashMap<>();
         for (Map.Entry<Class<?>, Set<DiscreteResource>> entry : grouped.entrySet()) {
             DiscreteResourceCodec<?> codec = CODECS.getCodec(entry.getKey());
-            values.put(entry.getKey(), DiscreteResourceSet.of(entry.getValue(), codec));
+            values.put(entry.getKey(), EncodedDiscreteResources.of(entry.getValue(), codec));
         }
 
         return new EncodableDiscreteResources(parent, values);
     }
 
-    private EncodableDiscreteResources(DiscreteResource parent, Map<Class<?>, DiscreteResourceSet> values) {
+    private EncodableDiscreteResources(DiscreteResource parent, Map<Class<?>, EncodedDiscreteResources> values) {
         this.parent = parent;
         this.values = values;
     }
@@ -93,10 +92,8 @@
 
     @Override
     public boolean isEmpty() {
-        return !values.values().stream()
-                .flatMap(x -> x.values().stream())
-                .findAny()
-                .isPresent();
+        return values.values().stream()
+                .allMatch(x -> x.isEmpty());
     }
 
     @Override
@@ -120,7 +117,7 @@
     @Override
     public Set<DiscreteResource> values() {
         return values.values().stream()
-                .flatMap(x -> x.values().stream())
+                .flatMap(x -> x.resources(parent.id()).stream())
                 .collect(Collectors.toCollection(LinkedHashSet::new));
     }
 
@@ -128,7 +125,7 @@
         return parent;
     }
 
-    Map<Class<?>, DiscreteResourceSet> rawValues() {
+    Map<Class<?>, EncodedDiscreteResources> rawValues() {
         return values;
     }
 }