[ONOS-4350] Inter Jar dependency implementation and code restructuring.

Change-Id: Iacac75e4187aed93ce1754c170a9c19707e5b8c3
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java
new file mode 100644
index 0000000..715fb76
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java
@@ -0,0 +1,532 @@
+/*
+ * 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.yangutils.datamodel.utils;
+
+/**
+ * Represents ENUM to represent the type of data in parse tree.
+ */
+public enum YangConstructType {
+    /**
+     * Identifies the module parsed data.
+     */
+    MODULE_DATA,
+
+    /**
+     * Identifies the sub module parsed data.
+     */
+    SUB_MODULE_DATA,
+
+    /**
+     * Identifies the typedef parsed data.
+     */
+    TYPEDEF_DATA,
+
+    /**
+     * Identifies the type parsed data.
+     */
+    TYPE_DATA,
+
+    /**
+     * Identifies the choice parsed data.
+     */
+    CHOICE_DATA,
+
+    /**
+     * Identifies the case parsed data.
+     */
+    CASE_DATA,
+
+    /**
+     * Identifies the YANG enumeration parsed data.
+     */
+    ENUMERATION_DATA,
+
+    /**
+     * Identifies the grouping parsed data.
+     */
+    GROUPING_DATA,
+
+    /**
+     * Identifies the uses parsed data.
+     */
+    USES_DATA,
+
+    /**
+     * Identifies the augment parsed data.
+     */
+    AUGMENT_DATA,
+
+    /**
+     * Identifies the container parsed data.
+     */
+    CONTAINER_DATA,
+
+    /**
+     * Identifies the YANG list parsed data.
+     */
+    LIST_DATA,
+
+    /**
+     * Identifies the YANG belongs-to parsed data.
+     */
+    BELONGS_TO_DATA,
+
+    /**
+     * Identifies the YANG bit parsed data.
+     */
+    BIT_DATA,
+
+    /**
+     * Identifies the YANG bits parsed data.
+     */
+    BITS_DATA,
+
+    /**
+     * Identifies the YANG enum parsed data.
+     */
+    ENUM_DATA,
+
+    /**
+     * Identifies the YANG import parsed data.
+     */
+    IMPORT_DATA,
+
+    /**
+     * Identifies the YANG include parsed data.
+     */
+    INCLUDE_DATA,
+
+    /**
+     * Identifies the YANG leaf parsed data.
+     */
+    LEAF_DATA,
+
+    /**
+     * Identifies the YANG leaf list parsed data.
+     */
+    LEAF_LIST_DATA,
+
+    /**
+     * Identifies the YANG must parsed data.
+     */
+    MUST_DATA,
+
+    /**
+     * Identifies the YANG revision parsed data.
+     */
+    REVISION_DATA,
+
+    /**
+     * Identifies the YANG revision date parsed data.
+     */
+    REVISION_DATE_DATA,
+
+    /**
+     * Identifies the YANG namespace parsed data.
+     */
+    NAMESPACE_DATA,
+
+    /**
+     * Identifies the YANG contact parsed data.
+     */
+    CONTACT_DATA,
+
+    /**
+     * Identifies the YANG config parsed data.
+     */
+    CONFIG_DATA,
+
+    /**
+     * Identifies the YANG description parsed data.
+     */
+    DESCRIPTION_DATA,
+
+    /**
+     * Identifies the YANG key parsed data.
+     */
+    KEY_DATA,
+
+    /**
+     * Identifies the YANG mandatory parsed data.
+     */
+    MANDATORY_DATA,
+
+    /**
+     * Identifies the YANG max element parsed data.
+     */
+    MAX_ELEMENT_DATA,
+
+    /**
+     * Identifies the YANG min element parsed data.
+     */
+    MIN_ELEMENT_DATA,
+
+    /**
+     * Identifies the YANG presence element parsed data.
+     */
+    PRESENCE_DATA,
+
+    /**
+     * Identifies the YANG reference element parsed data.
+     */
+    REFERENCE_DATA,
+
+    /**
+     * Identifies the YANG status element parsed data.
+     */
+    STATUS_DATA,
+
+    /**
+     * Identifies the YANG units element parsed data.
+     */
+    UNITS_DATA,
+
+    /**
+     * Identifies the YANG version element parsed data.
+     */
+    VERSION_DATA,
+
+    /**
+     * Identifies the YANG base element parsed data.
+     */
+    YANGBASE_DATA,
+
+    /**
+     * Identifies the YANG prefix element parsed data.
+     */
+    PREFIX_DATA,
+
+    /**
+     * Identifies the YANG default element parsed data.
+     */
+    DEFAULT_DATA,
+
+    /**
+     * Identifies the YANG value element parsed data.
+     */
+    VALUE_DATA,
+
+    /**
+     * Identifies the YANG organization parsed data.
+     */
+    ORGANIZATION_DATA,
+
+    /**
+     * Identifies the YANG position element parsed data.
+     */
+    POSITION_DATA,
+
+    /**
+     * Identifies the YANG data definition statements.
+     */
+    DATA_DEF_DATA,
+
+    /**
+     * Identifies the YANG union element parsed data.
+     */
+    UNION_DATA,
+
+    /**
+     * Identifies the YANG notification element parsed data.
+     */
+    NOTIFICATION_DATA,
+
+    /**
+     * Identifies the YANG when element parsed data.
+     */
+    WHEN_DATA,
+
+    /**
+     * Identifies the YANG input element parsed data.
+     */
+    INPUT_DATA,
+
+    /**
+     * Identifies the YANG output element parsed data.
+     */
+    OUTPUT_DATA,
+
+    /**
+     * Identifies the YANG rpc element parsed data.
+     */
+    RPC_DATA,
+
+    /**
+     * Identifies the YANG short case element parsed data.
+     */
+    SHORT_CASE_DATA,
+
+    /**
+     * Identifies the derived data type.
+     */
+    DERIVED,
+
+    /**
+     * Identifies the YANG range element parsed data.
+     */
+    RANGE_DATA,
+
+    /**
+     * Identifies the YANG length element parsed data.
+     */
+    LENGTH_DATA,
+
+    /**
+     * Identifies the YANG pattern element parsed data.
+     */
+    PATTERN_DATA,
+
+    /**
+     * Identifies the YANG extension element parsed data.
+     */
+    EXTENSION_DATA,
+
+    /**
+     * Identifies the YANG identity element parsed data.
+     */
+    IDENTITY_DATA,
+
+    /**
+     * Identifies the YANG base element parsed data.
+     */
+    BASE_DATA,
+
+    /**
+     * Identifies the YANG feature element parsed data.
+     */
+    FEATURE_DATA,
+
+    /**
+     * Identifies the YANG if-feature element parsed data.
+     */
+    IF_FEATURE_DATA,
+
+    /**
+     * Identifies the YANG path element parsed data.
+     */
+    PATH_DATA,
+
+    /**
+     * Identifies the YANG require-instance element parsed data.
+     */
+    REQUIRE_INSTANCE_DATA,
+
+    /**
+     * Identifies the YANG ordered-by element parsed data.
+     */
+    ORDERED_BY_DATA,
+
+    /**
+     * Identifies the YANG error-message element parsed data.
+     */
+    ERROR_MESSAGE_DATA,
+
+    /**
+     * Identifies the YANG error-app-tag element parsed data.
+     */
+    ERROR_APP_TAG_DATA,
+
+    /**
+     * Identifies the YANG unique element parsed data.
+     */
+    UNIQUE_DATA,
+
+    /**
+     * Identifies the YANG refine element parsed data.
+     */
+    REFINE_DATA,
+
+    /**
+     * Identifies the YANG leafref element parsed data.
+     */
+    LEAFREF_DATA,
+
+    /**
+     * Identifies the YANG identityref element parsed data.
+     */
+    IDENTITYREF_DATA,
+
+    /**
+     * Identifies the YANG instance identifier element parsed data.
+     */
+    INSTANCE_IDENTIFIER_DATA,
+
+    /**
+     * Identifies the YANG deviation element parsed data.
+     */
+    DEVIATION_DATA,
+
+    /**
+     * Identifies the YANG anyxml element parsed data.
+     */
+    ANYXML_DATA;
+
+    /**
+     * Returns the YANG construct keyword corresponding to enum values.
+     *
+     * @param yangConstructType enum value for parsable data type.
+     * @return YANG construct keyword.
+     */
+    public static String getYangConstructType(YangConstructType yangConstructType) {
+
+        switch (yangConstructType) {
+            case MODULE_DATA:
+                return "module";
+            case SUB_MODULE_DATA:
+                return "submodule";
+            case TYPEDEF_DATA:
+                return "typedef";
+            case TYPE_DATA:
+                return "type";
+            case CHOICE_DATA:
+                return "choice";
+            case CASE_DATA:
+                return "case";
+            case ENUMERATION_DATA:
+                return "enumeration";
+            case GROUPING_DATA:
+                return "grouping";
+            case USES_DATA:
+                return "uses";
+            case AUGMENT_DATA:
+                return "augment";
+            case CONTAINER_DATA:
+                return "container";
+            case LIST_DATA:
+                return "list";
+            case BELONGS_TO_DATA:
+                return "belongs-to";
+            case BIT_DATA:
+                return "bit";
+            case BITS_DATA:
+                return "bits";
+            case ENUM_DATA:
+                return "enum";
+            case IMPORT_DATA:
+                return "import";
+            case INCLUDE_DATA:
+                return "include";
+            case LEAF_DATA:
+                return "leaf";
+            case LEAF_LIST_DATA:
+                return "leaf-list";
+            case MUST_DATA:
+                return "must";
+            case REVISION_DATA:
+                return "revision";
+            case REVISION_DATE_DATA:
+                return "revision-date";
+            case NAMESPACE_DATA:
+                return "namespace";
+            case CONTACT_DATA:
+                return "contact";
+            case CONFIG_DATA:
+                return "config";
+            case DESCRIPTION_DATA:
+                return "description";
+            case KEY_DATA:
+                return "key";
+            case MANDATORY_DATA:
+                return "mandatory";
+            case MAX_ELEMENT_DATA:
+                return "max-elements";
+            case MIN_ELEMENT_DATA:
+                return "min-elements";
+            case PRESENCE_DATA:
+                return "presence";
+            case REFERENCE_DATA:
+                return "reference";
+            case STATUS_DATA:
+                return "status";
+            case UNITS_DATA:
+                return "units";
+            case VERSION_DATA:
+                return "version";
+            case YANGBASE_DATA:
+                return "yangbase";
+            case PREFIX_DATA:
+                return "prefix";
+            case ORGANIZATION_DATA:
+                return "organization";
+            case VALUE_DATA:
+                return "value";
+            case POSITION_DATA:
+                return "position";
+            case DEFAULT_DATA:
+                return "default";
+            case DATA_DEF_DATA:
+                return "data-def-substatements";
+            case WHEN_DATA:
+                return "when";
+            case INPUT_DATA:
+                return "input";
+            case OUTPUT_DATA:
+                return "ouput";
+            case RPC_DATA:
+                return "rpc";
+            case SHORT_CASE_DATA:
+                return "short-case";
+            case DERIVED:
+                return "derived";
+            case NOTIFICATION_DATA:
+                return "notification";
+            case UNION_DATA:
+                return "union";
+            case RANGE_DATA:
+                return "range";
+            case LENGTH_DATA:
+                return "length";
+            case PATTERN_DATA:
+                return "pattern";
+            case EXTENSION_DATA:
+                return "extension";
+            case IDENTITY_DATA:
+                return "identity";
+            case BASE_DATA:
+                return "base";
+            case FEATURE_DATA:
+                return "feature";
+            case IF_FEATURE_DATA:
+                return "if-feature";
+            case PATH_DATA:
+                return "path";
+            case REQUIRE_INSTANCE_DATA:
+                return "require-instance";
+            case ORDERED_BY_DATA:
+                return "ordered-by";
+            case ERROR_MESSAGE_DATA:
+                return "error-message";
+            case ERROR_APP_TAG_DATA:
+                return "error-app-tag";
+            case UNIQUE_DATA:
+                return "unique";
+            case REFINE_DATA:
+                return "refine";
+            case LEAFREF_DATA:
+                return "leafref";
+            case IDENTITYREF_DATA:
+                return "identityref";
+            case INSTANCE_IDENTIFIER_DATA:
+                return "instance-identifier";
+            case DEVIATION_DATA:
+                return "deviation";
+            case ANYXML_DATA:
+                return "anyxml";
+            default:
+                return "yang";
+        }
+    }
+}