Implement compareTo for TableId to avoid IllegalArgumentException

java.lang.IllegalArgumentException: Comparison method violates its general contract!

Change-Id: I4033e9a6743f134583eab936de2b960d76274919
diff --git a/core/api/src/main/java/org/onosproject/net/flow/IndexTableId.java b/core/api/src/main/java/org/onosproject/net/flow/IndexTableId.java
index fab2463..7b49d98 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/IndexTableId.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/IndexTableId.java
@@ -32,6 +32,16 @@
         return Type.INDEX;
     }
 
+    @Override
+    public int compareTo(TableId other) {
+        if (this.type() != other.type()) {
+            return this.type().compareTo(other.type());
+        } else {
+            IndexTableId indexTableId = (IndexTableId) other;
+            return this.id() - indexTableId.id();
+        }
+    }
+
     /**
      * Returns a table identifier for the given index.
      *
diff --git a/core/api/src/main/java/org/onosproject/net/flow/TableId.java b/core/api/src/main/java/org/onosproject/net/flow/TableId.java
index bb2dda1..fb115f6 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/TableId.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/TableId.java
@@ -36,5 +36,18 @@
         PIPELINE_INDEPENDENT
     }
 
+    /**
+     * Gets type of this table ID.
+     *
+     * @return type
+     */
     Type type();
+
+    /**
+     * Compares table ID.
+     *
+     * @param other table ID to be compared
+     * @return zero if the table IDs are the same. Otherwise, return a non-zero integer
+     */
+    int compareTo(TableId other);
 }
diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableId.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableId.java
index 2e799a9..f817e31 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableId.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableId.java
@@ -49,4 +49,16 @@
     public Type type() {
         return Type.PIPELINE_INDEPENDENT;
     }
+
+    @Override
+    public int compareTo(TableId other) {
+        if (this.type() != other.type()) {
+            return this.type().compareTo(other.type());
+        } else {
+            PiTableId piTableId = (PiTableId) other;
+            checkNotNull(this.identifier, "PiTableId identifier should not be null");
+            checkNotNull(piTableId.identifier, "PiTableId identifier should not be null");
+            return this.identifier.compareTo(piTableId.identifier);
+        }
+    }
 }