Fix bug causing ClassCastException

Change-Id: Ic8787f05d05871b4473ff437b98e0b307ee1cacd
(cherry picked from commit e63e356c868241df222f59bfa222845c38c8370e)
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java
index a4818e2..59c39d8 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodedDiscreteResources.java
@@ -74,7 +74,10 @@
 
     @SuppressWarnings("unchecked")
     boolean contains(DiscreteResource resource) {
-        return rangeSet.contains(codec.encode(resource));
+        return resource.valueAs(Object.class)
+                .map(x -> codec.encode(x))
+                .map(rangeSet::contains)
+                .orElse(false);
     }
 
     boolean isEmpty() {
diff --git a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/EncodedDiscreteResourcesTest.java b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/EncodedDiscreteResourcesTest.java
new file mode 100644
index 0000000..e7483cd
--- /dev/null
+++ b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/EncodedDiscreteResourcesTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.store.resource.impl;
+
+import com.google.common.collect.ImmutableSet;
+import org.junit.Test;
+import org.onlab.packet.VlanId;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.resource.DiscreteResource;
+import org.onosproject.net.resource.Resources;
+
+import java.util.Set;
+
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.*;
+
+public class EncodedDiscreteResourcesTest {
+    private static final DeviceId DID = DeviceId.deviceId("device1");
+    private static final PortNumber PN = PortNumber.portNumber(1);
+    private static final VlanId VID1 = VlanId.vlanId((short) 1);
+    private static final VlanId VID2 = VlanId.vlanId((short) 2);
+    private static final VlanId VID3 = VlanId.vlanId((short) 3);
+
+    @Test
+    public void testContains() {
+        DiscreteResource res1 = Resources.discrete(DID, PN, VID1).resource();
+        DiscreteResource res2 = Resources.discrete(DID, PN, VID2).resource();
+        DiscreteResource res3 = Resources.discrete(DID, PN, VID3).resource();
+
+        Set<DiscreteResource> resources = ImmutableSet.of(res1, res2);
+
+        EncodedDiscreteResources sut = EncodedDiscreteResources.of(resources, new VlanIdCodec());
+
+        assertThat(sut.contains(res1), is(true));
+        assertThat(sut.contains(res3), is(false));
+    }
+
+}