Initial implementation of Meter Service (needs testing)

Change-Id: Ie07bd3e2bd7c67a6499c965d8926eb361ad16462

store impl started

Change-Id: Ib8b474f40dcecff335a421c12ad149fe9830c427

full implementation

Change-Id: Ie59fd61d02972bd04d887bdcca9745793b880681
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java
index a952a14..9439145 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java
@@ -20,20 +20,12 @@
 /**
  * Entity that represents Meter events.
  */
-public class MeterEvent extends AbstractEvent<MeterEvent.Type, Meter> {
+public class MeterEvent extends AbstractEvent<MeterEvent.Type, MeterOperation> {
 
 
-    enum Type {
+    private final MeterFailReason reason;
 
-        /**
-         * Signals that a new meter has been added.
-         */
-        METER_ADDED,
-
-        /**
-         * Signals that a meter has been removed.
-         */
-        METER_REMOVED,
+    public enum Type {
 
         /**
          * Signals that a meter has been added.
@@ -41,19 +33,15 @@
         METER_UPDATED,
 
         /**
-         * Signals that a meter addition failed.
-         */
-        METER_ADD_FAILED,
-
-        /**
-         * Signals that a meter removal failed.
-         */
-        METER_REMOVE_FAILED,
-
-        /**
          * Signals that a meter update failed.
          */
-        METER_UPDATE_FAILED
+        METER_OP_FAILED,
+
+        /**
+         * A meter operation was requested.
+         */
+        METER_OP_REQ,
+
     }
 
 
@@ -62,21 +50,32 @@
      * current time.
      *
      * @param type  meter event type
-     * @param meter event subject
+     * @param op event subject
      */
-    public MeterEvent(Type type, Meter meter) {
-        super(type, meter);
+    public MeterEvent(Type type, MeterOperation op) {
+        super(type, op);
+        this.reason = null;
     }
 
     /**
      * Creates an event of a given type and for the specified meter and time.
      *
      * @param type  meter event type
-     * @param meter event subject
+     * @param op event subject
      * @param time  occurrence time
      */
-    public MeterEvent(Type type, Meter meter, long time) {
-        super(type, meter, time);
+    public MeterEvent(Type type, MeterOperation op, long time) {
+        super(type, op, time);
+        this.reason = null;
+    }
+
+    public MeterEvent(Type type, MeterOperation op, MeterFailReason reason) {
+        super(type, op);
+        this.reason = reason;
+    }
+
+    public MeterFailReason reason() {
+        return reason;
     }
 
 }