ONOS-5549 TE Tunnel attributes management API

Change-Id: I22f85009f1620cb972fec4a1d0e4bbc357c042e7
diff --git a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/tunnel/TeTunnel.java b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/tunnel/TeTunnel.java
new file mode 100755
index 0000000..0c1bd2f
--- /dev/null
+++ b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/tunnel/TeTunnel.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2016-present 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.tetunnel.api.tunnel;
+
+import org.onosproject.tetopology.management.api.node.TeNodeKey;
+import org.onosproject.tetopology.management.api.node.TtpKey;
+import org.onosproject.tetunnel.api.tunnel.path.TePath;
+
+import java.util.List;
+
+/**
+ * Representation of a TE tunnel attributes.
+ */
+public interface TeTunnel {
+
+    /**
+     * TE tunnel types.
+     */
+    enum Type {
+        /**
+         * Designates TE point-to-point tunnel.
+         */
+        P2P,
+        /**
+         * Designates TE point-to-multipoint tunnel.
+         */
+        P2MP,
+        /**
+         * Designates RSVP-TE path signaling tunnel.
+         */
+        PATH_SIGNALING_RSVPTE,
+        /**
+         * Designates Segment-routing path signaling tunnel.
+         */
+        PATH_SIGNALING_SR
+    }
+
+    /**
+     * LSP protection types.
+     */
+    enum LspProtectionType {
+        /**
+         * Designates LSP protection "Unprotected".
+         */
+        LSP_PROT_UNPROTECTED,
+        /**
+         * Designates LSP protection "Rerouting without Extra-Traffic".
+         */
+        LSP_PROT_REROUTE,
+        /**
+         * Designates LSP protection "(Full) Rerouting".
+         */
+        LSP_PROT_REROUTE_EXTRA,
+        /**
+         * Designates LSP protection "1+1 Unidirectional Protection".
+         */
+        LSP_PROT_UNIDIR_1_TO_1,
+        /**
+         * Designates LSP protection "1+1 Bidirectional Protection".
+         */
+        LSP_PROT_BIDIR_1_TO_1,
+        /**
+         * Designates LSP protection "1:N Protection with Extra-Traffic".
+         */
+        LSP_PROT_1_FOR_N
+    }
+
+    /**
+     * TE Tunnel state.
+     */
+    enum State {
+        /**
+         * Designates the tunnel is down (non-operational).
+         */
+        DOWN,
+        /**
+         * Designates the tunnel is up.
+         */
+        UP
+    }
+
+    /**
+     * Returns the TE tunnel key.
+     *
+     * @return TE tunnel key
+     */
+    TeTunnelKey teTunnelKey();
+
+    /**
+     * Returns the name of the TE tunnel.
+     *
+     * @return name of the TE tunnel
+     */
+    String name();
+
+    /**
+     * Returns the type of the TE tunnel.
+     *
+     * @return type of the TE tunnel
+     */
+    Type type();
+
+    /**
+     * Returns the key of source TE node of this TE tunnel.
+     *
+     * @return key of the source TE node
+     */
+    TeNodeKey srcNode();
+
+    /**
+     * Returns key of the source TE termination point of this tunnel.
+     *
+     * @return key of the source TE termination point
+     */
+    TtpKey srcTp();
+
+    /**
+     * Returns key of the destination TE node of this TE tunnel.
+     *
+     * @return key of the destination TE node
+     */
+    TeNodeKey dstNode();
+
+    /**
+     * Returns key of the destination TE termination point of this TE tunnel.
+     *
+     * @return key of the destination TE termination point
+     */
+    TtpKey dstTp();
+
+    /**
+     * Returns the TE LSP protection type of the TE tunnel.
+     *
+     * @return TE LSP protection type of the TE tunnel
+     */
+    LspProtectionType lspProtectionType();
+
+    /**
+     * Returns the TE tunnel administrative state.
+     *
+     * @return TE tunnel administrative state
+     */
+    State adminStatus();
+
+    /**
+     * Returns primary paths of this TE tunnel.
+     *
+     * @return a list of TE paths
+     */
+    List<TePath> primaryPaths();
+
+    /**
+     * Returns segment tunnels of this (E2E cross-domain) tunnel.
+     *
+     * @return a list of keys of the segment tunnels
+     */
+    List<TeTunnelKey> segmentTunnels();
+
+    /**
+     * Sets segment tunnels of this (E2E cross-domain) tunnel.
+     *
+     * @param segmentTunnels a list of keys of segment tunnels
+     */
+    void segmentTunnels(List<TeTunnelKey> segmentTunnels);
+
+    /**
+     * Returns key of the E2E tunnel of this (segment) tunnel.
+     *
+     * @return key of the corresponding E2E TE tunnel
+     */
+    TeTunnelKey e2eTunnel();
+
+    /**
+     * Sets the E2E tunnel of this (segment) tunnel.
+     *
+     * @param e2eTunnel key of the corresponding E2E tunnel
+     */
+    void e2eTunnel(TeTunnelKey e2eTunnel);
+
+    //TODO: add more required TE attributes
+}