TE Topoplogy subsystem I2RS API changes

This submission contains the following:

1. Major changes in apps/tetopology. The changes are mainly introduced
   to support new searching keys in TE Topology.

2. Add RESTCONF notification support in the TE Provider. i.e., for
   south-bound RESTCONF communication with the domain controller.

Change-Id: I6786959deb66c98626edc65ff52694dcf08981a3
diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/OduResource.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/OduResource.java
new file mode 100644
index 0000000..3834d9c
--- /dev/null
+++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/link/OduResource.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.tetopology.management.api.link;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+
+/**
+ * Representation of an ODU link resource.
+ */
+public class OduResource {
+    private final short odu0s;
+    private final short odu1s;
+    private final short odu2s;
+    private final short odu2es;
+    private final short odu3s;
+    private final short odu4s;
+    private final short oduFlexes;
+
+    /**
+     * Creates an instance of an ODU link resource.
+     *
+     * @param odu0s     number of available ODU0 containers
+     * @param odu1s     number of available ODU1 containers
+     * @param odu2s     number of available ODU2 containers
+     * @param odu2es    number of available ODU2e containers
+     * @param odu3s     number of available ODU3 containers
+     * @param odu4s     number of available ODU4 containers
+     * @param oduFlexes available ODUflex bandwidth in terms of ODU0 containers
+     */
+    public OduResource(short odu0s, short odu1s, short odu2s,
+                       short odu2es, short odu3s, short odu4s,
+                       short oduFlexes) {
+        this.odu0s = odu0s;
+        this.odu1s = odu1s;
+        this.odu2s = odu2s;
+        this.odu2es = odu2es;
+        this.odu3s = odu3s;
+        this.odu4s = odu4s;
+        this.oduFlexes = oduFlexes;
+    }
+
+    /**
+     * Returns the number of available ODU0s.
+     *
+     * @return the odu0s
+     */
+    public short odu0s() {
+        return odu0s;
+    }
+
+    /**
+     * Returns the number of available ODU1s.
+     *
+     * @return the odu1s
+     */
+    public short odu1s() {
+        return odu1s;
+    }
+
+    /**
+     * Returns the number of available ODU2s.
+     *
+     * @return the odu2s
+     */
+    public short odu2s() {
+        return odu2s;
+    }
+
+    /**
+     * Returns the number of available ODU2es.
+     *
+     * @return the odu2es
+     */
+    public short odu2es() {
+        return odu2es;
+    }
+
+    /**
+     * Returns the number of available ODU3s.
+     *
+     * @return the odu3s
+     */
+    public short odu3s() {
+        return odu3s;
+    }
+
+    /**
+     * Returns the number of available ODU4s.
+     *
+     * @return the odu4s
+     */
+    public short odu4s() {
+        return odu4s;
+    }
+
+    /**
+     * Returns available ODUflex bandwidth in terms of ODU0 containers.
+     *
+     * @return the oduFlexes
+     */
+    public short oduFlexes() {
+        return oduFlexes;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(odu0s, odu1s, odu2s, odu2es, odu3s,
+                                odu4s, oduFlexes);
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (this == object) {
+            return true;
+        }
+        if (object instanceof OduResource) {
+            OduResource that = (OduResource) object;
+            return (this.odu0s == that.odu0s) &&
+                    (this.odu1s == that.odu1s) &&
+                    (this.odu2s == that.odu2s) &&
+                    (this.odu2es == that.odu2es) &&
+                    (this.odu3s == that.odu3s) &&
+                    (this.odu4s == that.odu4s) &&
+                    (this.oduFlexes == that.oduFlexes);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("odu0s", odu0s)
+                .add("odu1s", odu1s)
+                .add("odu2s", odu2s)
+                .add("odu2es", odu2es)
+                .add("odu3s", odu3s)
+                .add("odu4s", odu4s)
+                .add("oduFlexes", oduFlexes)
+                .toString();
+    }
+
+
+}