Add getMetersByDeviceId REST method

Change-Id: I50b9158aac1c8b0789ee271276db0fa701fdb7df
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
index 801e46d..be484ef 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
@@ -73,10 +73,29 @@
     }
 
     /**
+     * Returns a collection of meters by the device id.
+     *
+     * @param deviceId device identifier
+     * @return array of meters which belongs to specified device
+     * @onos.rsModel Meters
+     */
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("{deviceId}")
+    public Response getMetersByDeviceId(@PathParam("deviceId") String deviceId) {
+        DeviceId did = DeviceId.deviceId(deviceId);
+        final Iterable<Meter> meters = meterService.getMeters(did);
+        if (meters != null) {
+            meters.forEach(meter -> metersNode.add(codec(Meter.class).encode(meter, this)));
+        }
+        return ok(root).build();
+    }
+
+    /**
      * Returns a meter by the meter id.
      *
      * @param deviceId device identifier
-     * @return array of all the groups in the system
+     * @return a meter, return 404 if no entry has been found
      * @onos.rsModel Meter
      */
     @GET
diff --git a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
index 3714e48..fb027d1 100644
--- a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
@@ -393,7 +393,35 @@
     }
 
     /**
-     * Tests the result of a rest api GET for a device.
+     * Tests the results of a rest api GET for a device.
+     */
+    @Test
+    public void testMeterSingleDevice() {
+        setupMockMeters();
+
+        final Set<Meter> meters1 = new HashSet<>();
+        meters1.add(meter1);
+        meters1.add(meter2);
+
+        expect(mockMeterService.getMeters(anyObject())).andReturn(meters1).anyTimes();
+        replay(mockMeterService);
+        replay(mockDeviceService);
+
+        final WebResource rs = resource();
+        final String response = rs.path("meters/" + deviceId1.toString()).get(String.class);
+        final JsonObject result = JsonObject.readFrom(response);
+        assertThat(result, notNullValue());
+
+        assertThat(result.names(), hasSize(1));
+        assertThat(result.names().get(0), is("meters"));
+        final JsonArray jsonMeters = result.get("meters").asArray();
+        assertThat(jsonMeters, notNullValue());
+        assertThat(jsonMeters, hasMeter(meter1));
+        assertThat(jsonMeters, hasMeter(meter2));
+    }
+
+    /**
+     * Tests the result of a rest api GET for a device with meter id.
      */
     @Test
     public void testMeterSingleDeviceWithId() {