Consolidated FlowEntry into FlowRule

Change-Id: I349d73abba3336f4c79429efb5717e0a8c374a30
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
index d20e79e..6801e8a 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
@@ -1,24 +1,37 @@
 package org.onlab.onos.net.flow;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
+
 import org.onlab.onos.net.DeviceId;
 
 public class DefaultFlowRule implements FlowRule {
 
+    private final DeviceId deviceId;
+    private final int priority;
     private final TrafficSelector selector;
     private final TrafficTreatment treatment;
-    private final DeviceId deviceId;
+    private final FlowId id;
+    private final long created;
+
 
     public DefaultFlowRule(DeviceId deviceId,
-            TrafficSelector selector, TrafficTreatment treatment) {
-        this.treatment = treatment;
-        this.selector = selector;
+            TrafficSelector selector, TrafficTreatment treatment, int priority) {
         this.deviceId = deviceId;
+        this.priority = priority;
+        this.selector = selector;
+        this.treatment = treatment;
+        this.id = FlowId.valueOf(this.hashCode());
+        this.created = System.currentTimeMillis();
+    }
+
+    @Override
+    public FlowId id() {
+        return id;
     }
 
     @Override
     public int priority() {
-        // is this supposed to be 0?
-        return 0;
+        return priority;
     }
 
     @Override
@@ -37,6 +50,35 @@
     }
 
     @Override
+    public long lifeMillis() {
+        return (created - System.currentTimeMillis());
+    }
+
+    @Override
+    public long idleMillis() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public long packets() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public long bytes() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    /*
+     * The priority and statistics can change on a given treatment and selector
+     *
+     * (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
     public int hashCode() {
         final int prime = 31;
         int result = prime * this.deviceId().hashCode();
@@ -69,5 +111,16 @@
         return false;
     }
 
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("id", id)
+                .add("deviceId", deviceId)
+                .add("priority", priority)
+                .add("selector", selector)
+                .add("treatment", treatment)
+                .add("created", created)
+                .toString();
+    }
 
 }