API definitions for the TE Topology Core App.

This APP creates and manages a hierarchy of TE topologies received from SBI TE provider and from user configurations from NBI.
The API contains internal data structures for TE attributes that are aligned with the TE attributes definition in standard IETF YANG TE topology model (https://tools.ietf.org/html/draft-ietf-teas-yang-te-topo-05).

This commit includes the following interface definitions:
- TE topology provider service, which is called by the TE topology provider from SB to pass TE topologies to the TE topology core APP
- TE topology service, which provides service APIs for an external APP to get/set TE topologies and their attributes.
- Network, Node, Link definitions for TE networks and their default class implementation

Change-Id: Iafcf6911b8d9e494397e3a255cae282bbca74d5c
diff --git a/apps/tetopology/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java b/apps/tetopology/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java
new file mode 100644
index 0000000..df81a09
--- /dev/null
+++ b/apps/tetopology/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java
@@ -0,0 +1,140 @@
+/*
+ * 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.node;
+
+import java.util.List;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+
+/**
+ * Representation of a tunnel termination point.
+ */
+public class TunnelTerminationPoint {
+    //See org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te
+    //.topology.rev20160708.ietftetopology
+    //.augmentednwnode.te.DefaultTunnelTerminationPoint
+    //org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
+    //.rev20160708.ietftetopology
+    //.augmentednwnode.te.tunnelterminationpoint.DefaultConfig
+    private byte[] tunnelTpId;
+    private List<InterfaceSwitchingCapability> switchingCapabilities;
+    private long interLayerLockId;
+    private List<TerminationCapability> terminationCapability;
+
+    /**
+     * Create an instance of TunnelTerminationPoint.
+     *
+     * @param tunnelTpId tunnel termination point id
+     */
+    public TunnelTerminationPoint(byte[] tunnelTpId) {
+        this.tunnelTpId = tunnelTpId;
+    }
+
+    /**
+     * Sets the switching capabilities.
+     *
+     * @param swcaps the switching capabilities to set
+     */
+    public void setSwitchingCapabilities(List<InterfaceSwitchingCapability> swcaps) {
+        this.switchingCapabilities = swcaps;
+    }
+
+    /**
+     * Sets the interLayerLockId.
+     *
+     * @param id the interLayerLockId to set
+     */
+    public void setInterLayerLockId(long id) {
+        this.interLayerLockId = id;
+    }
+
+    /**
+     * Sets the termination capability.
+     *
+     * @param terminationCapability the terminationCapability to set
+     */
+    public void setTerminationCapabilities(List<TerminationCapability> terminationCapability) {
+        this.terminationCapability = terminationCapability;
+    }
+
+    /**
+     * Returns the tunnelTpId.
+     *
+     * @return tunnel termination point id
+     */
+    public byte[] getTunnelTpId() {
+        return tunnelTpId;
+    }
+
+    /**
+     * Returns the switching capabilities.
+     *
+     * @return switching capabilities
+     */
+    public List<InterfaceSwitchingCapability> getSwitchingCapabilities() {
+        return switchingCapabilities;
+    }
+
+    /**
+     * Returns the interLayerLockId.
+     *
+     * @return inter layer lock identifier
+    */
+    public long getInterLayerLockId() {
+        return interLayerLockId;
+    }
+
+    /**
+     * Returns the termination capability list.
+     *
+     * @return termination capabilities
+     */
+    public List<TerminationCapability> getTerminationCapabilities() {
+        return terminationCapability;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(tunnelTpId, switchingCapabilities, interLayerLockId, terminationCapability);
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (this == object) {
+            return true;
+        }
+        if (object instanceof TunnelTerminationPoint) {
+            TunnelTerminationPoint that = (TunnelTerminationPoint) object;
+            return Objects.equal(this.tunnelTpId, that.tunnelTpId) &&
+                    Objects.equal(this.switchingCapabilities, that.switchingCapabilities) &&
+                    Objects.equal(this.terminationCapability, that.terminationCapability) &&
+                    Objects.equal(this.interLayerLockId, that.interLayerLockId);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("tunnelTpId", tunnelTpId)
+                .add("switchingCapabilities", switchingCapabilities)
+                .add("interLayerLockId", interLayerLockId)
+                .add("terminationCapability", terminationCapability)
+                .toString();
+    }
+
+}