Modify DiscreteResourceCodec interface

This is for ONOS-4281

Change-Id: Idaa4e3666946ebf1a76abfeb54c626dfb50082c4
(cherry picked from commit 81b75a9e00061d655b2cfbdb8c734753b2bb8c09)
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceSetSerializer.java b/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceSetSerializer.java
index ee81211..2d6446a 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceSetSerializer.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceSetSerializer.java
@@ -24,6 +24,7 @@
 import com.google.common.collect.Range;
 import com.google.common.collect.TreeRangeSet;
 import org.onlab.util.ClosedOpenRange;
+import org.onlab.util.Tools;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -45,6 +46,8 @@
     public void write(Kryo kryo, Output output, DiscreteResourceSet object) {
         TreeRangeSet<Integer> rangeSet = TreeRangeSet.create();
         object.values().stream()
+                .map(x -> x.valueAs(Object.class))
+                .flatMap(Tools::stream)
                 .map(x -> object.codec().encode(x))
                 .map(Range::singleton)
                 .map(x -> x.canonical(DiscreteDomain.integers()))
@@ -70,7 +73,8 @@
 
         Set<DiscreteResource> resources = ranges.stream()
                 .flatMapToInt(x -> IntStream.range(x.lowerBound(), x.upperBound()))
-                .mapToObj(x -> codec.decode(parent, x))
+                .mapToObj(x -> codec.decode(x))
+                .map(x -> Resources.discrete(parent, x).resource())
                 .collect(Collectors.toSet());
 
         return DiscreteResourceSet.of(resources, codec);