Augment provider service to process batch mapping query

Change-Id: Id44e4ad23f4cfbb56da4d52e1beb8cd0d3ca2b20
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingProviderService.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingProviderService.java
index 724f493..c5bcb80 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingProviderService.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingProviderService.java
@@ -17,6 +17,8 @@
 
 import org.onosproject.net.provider.ProviderService;
 
+import java.util.List;
+
 /**
  * Service through which mapping providers can inject mapping information into
  * the core.
@@ -39,4 +41,13 @@
      * @return a mapping value associated with a given mapping key
      */
     MappingValue mappingQueried(MappingKey mappingKey);
+
+    /**
+     * Signals that a new batch mapping query has been issued.
+     * If no mapping is found, simply returns empty list.
+     *
+     * @param mappingKeys a collection of mapping keys
+     * @return a collection of mapping values associated with give mapping keys
+     */
+    List<MappingValue> mappingQueried(List<MappingKey> mappingKeys);
 }
diff --git a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingProviderServiceAdapter.java b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingProviderServiceAdapter.java
index a5e35af..c047772 100644
--- a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingProviderServiceAdapter.java
+++ b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingProviderServiceAdapter.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.mapping;
 
+import java.util.List;
+
 /**
  * Adapter for testing against mapping provider service.
  */
@@ -33,4 +35,9 @@
     public MappingValue mappingQueried(MappingKey mappingKey) {
         return null;
     }
+
+    @Override
+    public List<MappingValue> mappingQueried(List<MappingKey> mappingKeys) {
+        return null;
+    }
 }
diff --git a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java
index b6e01c8..4283c78 100755
--- a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java
+++ b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java
@@ -15,7 +15,9 @@
  */
 package org.onosproject.mapping.impl;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -44,6 +46,7 @@
 import org.onosproject.net.provider.AbstractProviderService;
 import org.slf4j.Logger;
 
+import java.util.List;
 import java.util.Set;
 
 import static org.slf4j.LoggerFactory.getLogger;
@@ -190,5 +193,17 @@
         public MappingValue mappingQueried(MappingKey mappingKey) {
             return getMappingValueByMappingKey(mappingKey);
         }
+
+        @Override
+        public List<MappingValue> mappingQueried(List<MappingKey> mappingKeys) {
+            List<MappingValue> values = Lists.newArrayList();
+            mappingKeys.forEach(key -> {
+                MappingValue value = getMappingValueByMappingKey(key);
+                if (value != null) {
+                    values.add(value);
+                }
+            });
+            return ImmutableList.copyOf(values);
+        }
     }
 }
diff --git a/providers/lisp/mapping/src/main/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProvider.java b/providers/lisp/mapping/src/main/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProvider.java
index a7ba95f..bdf685a 100644
--- a/providers/lisp/mapping/src/main/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProvider.java
+++ b/providers/lisp/mapping/src/main/java/org/onosproject/provider/lisp/mapping/impl/LispMappingProvider.java
@@ -152,7 +152,9 @@
                     List<MappingKey> keys = Lists.newArrayList();
                     records.forEach(r -> keys.add(new MappingKeyBuilder(deviceService,
                             deviceId, r.getPrefix()).build()));
-                    keys.forEach(key -> providerService.mappingQueried(key));
+                    // TODO: returned mapping values will be converted to
+                    // protocol specifics and wrapped into a mapping record
+                    providerService.mappingQueried(keys);
                     break;
 
                 case LISP_MAP_REGISTER: