Formalize and document ConsistentResourceStore internal interfaces. This is cleanup in preparation for changes coming in ONOS-4859

Change-Id: I23077352f428d83848bee48666957a43642d3665
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDiscreteResourceSubStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDiscreteResourceSubStore.java
index d036c5f..738b8d1 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDiscreteResourceSubStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentDiscreteResourceSubStore.java
@@ -35,7 +35,11 @@
 
 import static org.onosproject.store.resource.impl.ConsistentResourceStore.SERIALIZER;
 
-class ConsistentDiscreteResourceSubStore {
+/**
+ * Consistent substore for discrete resources.
+ */
+class ConsistentDiscreteResourceSubStore implements ConsistentResourceSubStore
+        <DiscreteResourceId, DiscreteResource, TransactionalDiscreteResourceSubStore> {
     private ConsistentMap<DiscreteResourceId, ResourceConsumerId> consumers;
     private ConsistentMap<DiscreteResourceId, DiscreteResources> childMap;
 
@@ -52,12 +56,14 @@
         childMap.put(Resource.ROOT.id(), DiscreteResources.empty());
     }
 
-    TransactionalDiscreteResourceSubStore transactional(TransactionContext tx) {
+    @Override
+    public TransactionalDiscreteResourceSubStore transactional(TransactionContext tx) {
         return new TransactionalDiscreteResourceSubStore(tx);
     }
 
     // computational complexity: O(1)
-    List<ResourceAllocation> getResourceAllocations(DiscreteResourceId resource) {
+    @Override
+    public List<ResourceAllocation> getResourceAllocations(DiscreteResourceId resource) {
         Versioned<ResourceConsumerId> consumerId = consumers.get(resource);
         if (consumerId == null) {
             return ImmutableList.of();
@@ -66,7 +72,8 @@
         return ImmutableList.of(new ResourceAllocation(Resources.discrete(resource).resource(), consumerId.value()));
     }
 
-    Set<DiscreteResource> getChildResources(DiscreteResourceId parent) {
+    @Override
+    public Set<DiscreteResource> getChildResources(DiscreteResourceId parent) {
         Versioned<DiscreteResources> children = childMap.get(parent);
 
         if (children == null) {
@@ -76,7 +83,8 @@
         return children.value().values();
     }
 
-    <T> Set<DiscreteResource> getChildResources(DiscreteResourceId parent, Class<T> cls) {
+    @Override
+    public Set<DiscreteResource> getChildResources(DiscreteResourceId parent, Class<?> cls) {
         Versioned<DiscreteResources> children = childMap.get(parent);
 
         if (children == null) {
@@ -86,11 +94,13 @@
         return children.value().valuesOf(cls);
     }
 
-    boolean isAvailable(DiscreteResource resource) {
+    @Override
+    public boolean isAvailable(DiscreteResource resource) {
         return getResourceAllocations(resource.id()).isEmpty();
     }
 
-    <T> Stream<DiscreteResource> getAllocatedResources(DiscreteResourceId parent, Class<T> cls) {
+    @Override
+    public Stream<DiscreteResource> getAllocatedResources(DiscreteResourceId parent, Class<?> cls) {
         Set<DiscreteResource> children = getChildResources(parent);
         if (children.isEmpty()) {
             return Stream.of();
@@ -101,7 +111,8 @@
                 .filter(x -> consumers.containsKey(x.id()));
     }
 
-    Stream<DiscreteResource> getResources(ResourceConsumerId consumerId) {
+    @Override
+    public Stream<DiscreteResource> getResources(ResourceConsumerId consumerId) {
         return consumers.entrySet().stream()
                 .filter(x -> x.getValue().value().equals(consumerId))
                 .map(Map.Entry::getKey)