[ONOS-3618] Implement REST API for Meter query, insert, delete

* Implement encode & decode method for MeterBandCodec & MeterCodec
* Implement MetersWebResource
* Add unit test for MeterBandCodec & MeterCodec
* Add unit test for MetersWebResource
* Add meter insertion json example
* Add Swagger doc

Change-Id: I07284c6678c08b3cb9e109e86ffb2cf28bf36447
diff --git a/web/api/src/main/resources/definitions/Meters.json b/web/api/src/main/resources/definitions/Meters.json
new file mode 100644
index 0000000..0e7488b
--- /dev/null
+++ b/web/api/src/main/resources/definitions/Meters.json
@@ -0,0 +1,129 @@
+{
+  "type": "object",
+  "title": "meters",
+  "required": [
+    "meters"
+  ],
+  "properties": {
+    "groups": {
+      "type": "array",
+      "xml": {
+        "name": "meters",
+        "wrapped": true
+      },
+      "items": {
+        "type": "object",
+        "title": "meter",
+        "required": [
+          "id",
+          "appId",
+          "deviceId",
+          "unit",
+          "burst",
+          "state",
+          "life",
+          "refCount",
+          "packets",
+          "bytes",
+          "bands"
+        ],
+        "properties": {
+          "id": {
+            "type": "string",
+            "example": "1"
+          },
+          "appId": {
+            "type": "string",
+            "example": "1"
+          },
+          "deviceId": {
+            "type": "string",
+            "example": "of:0000000000000001"
+          },
+          "unit": {
+            "type": "string",
+            "example": "KB_PER_SEC"
+          },
+          "burst": {
+            "type": "boolean",
+            "example": true
+          },
+          "state": {
+            "type": "string",
+            "example": "ADDED"
+          },
+          "life": {
+            "type": "integer",
+            "format": "int64",
+            "example": 0
+          },
+          "refCount": {
+            "type": "integer",
+            "format": "int64",
+            "example": 0
+          },
+          "packets": {
+            "type": "integer",
+            "format": "int64",
+            "example": 0
+          },
+          "bytes": {
+            "type": "integer",
+            "format": "int64",
+            "example": 0
+          },
+          "bands": {
+            "type": "array",
+            "xml": {
+              "name": "bands",
+              "wrapped": true
+            },
+            "items": {
+              "type": "object",
+              "title": "bands",
+              "required": [
+                "type",
+                "rate",
+                "burstSize",
+                "prec",
+                "packets",
+                "bytes"
+              ],
+              "properties": {
+                "type": {
+                  "type": "string",
+                  "example": "REMARK"
+                },
+                "rate": {
+                  "type": "integer",
+                  "format": "int64",
+                  "example": 0
+                },
+                "burstSize": {
+                  "type": "integer",
+                  "format": "int64",
+                  "example": 0
+                },
+                "prec": {
+                  "type": "integer",
+                  "format": "int16",
+                  "example": 0
+                },
+                "packets": {
+                  "type": "integer",
+                  "format": "int64",
+                  "example": 0
+                },
+                "bytes": {
+                  "type": "integer",
+                  "format": "int64",
+                  "example": 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file