Make resource retrieval more efficient when specifing resource type

This resolves ONOS-4666

Change-Id: I9d09b60531ca48b36fc20f43498cda62f1badb8b
diff --git a/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java b/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java
index 60a8516..52ea71d 100644
--- a/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java
@@ -165,9 +165,9 @@
         checkNotNull(parent);
         checkNotNull(cls);
 
-        // naive implementation
-        return getAvailableResources(parent).stream()
-                .filter(resource -> resource.isTypeOf(cls))
+        return store.getChildResources(parent, cls).stream()
+                // We access store twice in this method, then the store may be updated by others
+                .filter(store::isAvailable)
                 .collect(Collectors.toSet());
     }
 
@@ -177,9 +177,11 @@
         checkNotNull(parent);
         checkNotNull(cls);
 
-        // naive implementation
-        return getAvailableResources(parent).stream()
-                .flatMap(resource -> Tools.stream(resource.valueAs(cls)))
+        return store.getChildResources(parent, cls).stream()
+                // We access store twice in this method, then the store may be updated by others
+                .filter(store::isAvailable)
+                .map(x -> x.valueAs(cls))
+                .flatMap(Tools::stream)
                 .collect(Collectors.toSet());
     }