[ONOS-4694] YANG management system outline and YMSM/YDT interfaces

Change-Id: I050ed98ba18edc2c2cea2abafeee6d8c9061b579
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtContext.java b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtContext.java
new file mode 100644
index 0000000..8d8152b
--- /dev/null
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtContext.java
@@ -0,0 +1,124 @@
+/*
+ * 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.yms.ydt;
+
+import java.util.Set;
+
+/**
+ * Abstraction of an entity which represents YANG data tree context
+ * information. This context information will be used protocol to obtain
+ * the information associated with YDT node. This is used when protocol is
+ * walking the data tree in both visitor and listener mechanism.
+ */
+public interface YdtContext {
+
+    /**
+     * Returns the node name.
+     *
+     * @return node name
+     */
+    String getName();
+
+    /**
+     * Returns the node namespace.
+     *
+     * @return node  namespace
+     */
+    String getNamespace();
+
+    /**
+     * Returns the YDT node extended context information corresponding to YDT
+     * node.
+     *
+     * @param <T> specifies YMS operation specific extended information
+     *            associated with YDT context. It will be
+     *            YdtContextOperationType in case extended information type
+     *            is EDIT_REQUEST and will be YdtContextResponseInfo in case
+     *            extended information type is RESPONSE.
+     * @return YdtContextOperationType  YDT node operation type
+     */
+    <T> T getYdtContextExtendedInfo();
+
+    /**
+     * Returns YANG data tree extended information type. This is used to
+     * identify the type of extended information applicable for YDT node.
+     *
+     * @return type of extended information
+     */
+    YdtExtendedInfoType getYdtExtendedInfoType();
+
+    /**
+     * Returns the type of YDT entity. This type will be used by protocols to
+     * identify the nature of node and can implement it accordingly.
+     *
+     * @return YDT entity type
+     */
+    YdtType getYdtType();
+
+    /**
+     * Returns the context of parent node.
+     *
+     * @return context of parent node
+     */
+    YdtContext getParent();
+
+    /**
+     * Returns the context of first child.
+     *
+     * @return context of first child
+     */
+    YdtContext getFirstChild();
+
+    /**
+     * Returns the context of last child.
+     *
+     * @return context of last child
+     */
+    YdtContext getLastChild();
+
+    /**
+     * Returns the context of next sibling.
+     *
+     * @return context of next sibling
+     */
+    YdtContext getNextSibling();
+
+    /**
+     * Returns the context of previous sibling.
+     *
+     * @return context of previous sibling
+     */
+    YdtContext getPreviousSibling();
+
+    /**
+     * Returns value of node, this is only valid for single instance leaf
+     * node, to obtain the nature of the node protocols need to use
+     * getYdtType().
+     *
+     * @return value of node
+     */
+    String getValue();
+
+    /**
+     * Returns set of values of a node, this is only valid for multi instance
+     * leaf node, to obtain the nature of the node protocols need to use
+     * getYdtType().
+     *
+     * @return value of YDT leaf
+     */
+    Set<String> getValueSet();
+}