YANG leaf prefix defect fix + YANG augment and choice support in YMS

Change-Id: I271735ca879bff8b43229cf8f59d2f60b27d7750
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
index d381fd4..5010315 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
@@ -24,7 +24,8 @@
 import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
 
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils
+        .detectCollidingChildUtil;
 
 /*-
  * Reference RFC 6020.
@@ -79,12 +80,14 @@
  */
 
 /**
- * Representation of data model node to maintain information defined in YANG augment.
+ * Representation of data model node to maintain information defined in YANG
+ * augment.
  */
 public abstract class YangAugment
         extends YangNode
-        implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, Resolvable,
-        YangXPathResolver, YangWhenHolder, YangIfFeatureHolder {
+        implements YangLeavesHolder, YangCommonInfo, Parsable,
+                   CollisionDetector, Resolvable,
+                   YangXPathResolver, YangWhenHolder, YangIfFeatureHolder {
 
     private static final long serialVersionUID = 806201602L;
 
@@ -124,8 +127,10 @@
     private YangNode augmentedNode;
 
     /**
-     * Status of resolution. If completely resolved enum value is "RESOLVED", if not enum value is "UNRESOLVED", in case
-     * reference of grouping/typedef is added to uses/type but it's not resolved value of enum should be
+     * Status of resolution. If completely resolved enum value is "RESOLVED",
+     * if not enum value is "UNRESOLVED", in case
+     * reference of grouping/typedef is added to uses/type but it's not
+     * resolved value of enum should be
      * "INTRA_FILE_RESOLVED".
      */
     private ResolvableStatus resolvableStatus;
@@ -153,14 +158,19 @@
     }
 
     @Override
-    public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
-                                    YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+    public void addToChildSchemaMap(
+            YangSchemaNodeIdentifier schemaNodeIdentifier,
+            YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
             throws DataModelException {
-        getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
-        YangSchemaNodeContextInfo yangSchemaNodeContextInfo1 = new YangSchemaNodeContextInfo();
-        yangSchemaNodeContextInfo1.setSchemaNode(yangSchemaNodeContextInfo.getSchemaNode());
+        getYsnContextInfoMap()
+                .put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
+        YangSchemaNodeContextInfo yangSchemaNodeContextInfo1 =
+                new YangSchemaNodeContextInfo();
+        yangSchemaNodeContextInfo1
+                .setSchemaNode(yangSchemaNodeContextInfo.getSchemaNode());
         yangSchemaNodeContextInfo1.setContextSwitchedNode(this);
-        getAugmentedNode().addToChildSchemaMap(schemaNodeIdentifier, yangSchemaNodeContextInfo1);
+        getAugmentedNode().addToChildSchemaMap(schemaNodeIdentifier,
+                                               yangSchemaNodeContextInfo1);
     }
 
     @Override
@@ -182,13 +192,18 @@
     }
 
     @Override
-    public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+    public void addToDefaultChildMap(
+            YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
+            YangSchemaNode yangSchemaNode) {
         // TODO
     }
 
     @Override
     public YangSchemaNodeType getYangSchemaNodeType() {
-        return YangSchemaNodeType.YANG_NON_DATA_NODE;
+        /*
+         * Augment node to switch the name space in YMS
+         */
+        return YangSchemaNodeType.YANG_AUGMENT_NODE;
     }
 
     /**
@@ -250,21 +265,25 @@
     }
 
     @Override
-    public void detectCollidingChild(String identifierName, YangConstructType dataType)
+    public void detectCollidingChild(String identifierName,
+                                     YangConstructType dataType)
             throws DataModelException {
         // Detect colliding child.
         detectCollidingChildUtil(identifierName, dataType, this);
     }
 
     @Override
-    public void detectSelfCollision(String identifierName, YangConstructType dataType)
+    public void detectSelfCollision(String identifierName,
+                                    YangConstructType dataType)
             throws DataModelException {
         if (getName().equals(identifierName)) {
-            throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \"" +
-                    getName() + " in " +
-                    getLineNumber() + " at " +
-                    getCharPosition() +
-                    " in " + getFileName() + "\"");
+            throw new DataModelException(
+                    "YANG file error: Duplicate input identifier detected, " +
+                            "same as input \"" +
+                            getName() + " in " +
+                            getLineNumber() + " at " +
+                            getCharPosition() +
+                            " in " + getFileName() + "\"");
         }
     }
 
@@ -336,7 +355,8 @@
         }
         // Add namespace for all leaf list.
         for (YangLeafList yangLeafList : getListOfLeafList()) {
-            yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+            yangLeafList
+                    .setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
         }
     }
 
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
index cd08573..e864d1e 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -24,10 +24,14 @@
 import org.onosproject.yangutils.datamodel.utils.Parsable;
 import org.onosproject.yangutils.datamodel.utils.YangConstructType;
 
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CHOICE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.DATA_MISSING_ERROR_TAG;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.ERROR_PATH_MISSING_CHOICE;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.MISSING_CHOICE_ERROR_APP_TAG;
+import static org.onosproject.yangutils.datamodel.utils.YangConstructType
+        .CHOICE_DATA;
+import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants
+        .DATA_MISSING_ERROR_TAG;
+import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants
+        .ERROR_PATH_MISSING_CHOICE;
+import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants
+        .MISSING_CHOICE_ERROR_APP_TAG;
 
 /*-
  * Reference RFC 6020.
@@ -70,8 +74,10 @@
  */
 public abstract class YangChoice
         extends YangNode
-        implements YangCommonInfo, Parsable, CollisionDetector, YangAugmentableNode,
-        YangWhenHolder, YangIfFeatureHolder, YangAppErrorHolder, YangIsFilterContentNodes, YangConfig {
+        implements YangCommonInfo, Parsable, CollisionDetector,
+                   YangAugmentableNode,
+                   YangWhenHolder, YangIfFeatureHolder, YangAppErrorHolder,
+                   YangIsFilterContentNodes, YangConfig {
 
     private static final long serialVersionUID = 806201604L;
 
@@ -172,14 +178,19 @@
     }
 
     @Override
-    public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
-                                    YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+    public void addToChildSchemaMap(
+            YangSchemaNodeIdentifier schemaNodeIdentifier,
+            YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
             throws DataModelException {
-        getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
-        YangSchemaNodeContextInfo yangSchemaNodeContextInfo1 = new YangSchemaNodeContextInfo();
-        yangSchemaNodeContextInfo1.setSchemaNode(yangSchemaNodeContextInfo.getSchemaNode());
+        getYsnContextInfoMap()
+                .put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
+        YangSchemaNodeContextInfo yangSchemaNodeContextInfo1 =
+                new YangSchemaNodeContextInfo();
+        yangSchemaNodeContextInfo1
+                .setSchemaNode(yangSchemaNodeContextInfo.getSchemaNode());
         yangSchemaNodeContextInfo1.setContextSwitchedNode(this);
-        getParent().addToChildSchemaMap(schemaNodeIdentifier, yangSchemaNodeContextInfo1);
+        getParent().addToChildSchemaMap(schemaNodeIdentifier,
+                                        yangSchemaNodeContextInfo1);
     }
 
     @Override
@@ -197,14 +208,17 @@
     }
 
     @Override
-    public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+    public void addToDefaultChildMap(
+            YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
+            YangSchemaNode yangSchemaNode) {
         //For non data nodes, default child to be added to parent node.
         // TODO
     }
 
     @Override
     public YangSchemaNodeType getYangSchemaNodeType() {
-        return YangSchemaNodeType.YANG_NON_DATA_NODE;
+        /*Choice node to be skipped in YANG data tree preperation*/
+        return YangSchemaNodeType.YANG_CHOICE_NODE;
     }
 
     /**
@@ -378,7 +392,8 @@
             // Check whether default string matches the case
             while (node != null) {
                 if (node instanceof YangCase) {
-                    if (defaultValueInString.equals(((YangCase) node).getName())) {
+                    if (defaultValueInString
+                            .equals(((YangCase) node).getName())) {
                         matched = true;
                         break;
                     }
@@ -387,36 +402,46 @@
             }
 
             if (!matched) {
-                throw new DataModelException("YANG file error: default string \"" + defaultValueInString
-                        + "\" not matching choice \"" + getName() + "\" case.");
+                throw new DataModelException(
+                        "YANG file error: default string \"" +
+                                defaultValueInString
+                                + "\" not matching choice \"" + getName() +
+                                "\" case.");
             }
         }
     }
 
     @Override
-    public void detectCollidingChild(String identifierName, YangConstructType dataType)
+    public void detectCollidingChild(String identifierName,
+                                     YangConstructType dataType)
             throws DataModelException {
 
-        if (getParent() instanceof YangCase && dataType != YangConstructType.CASE_DATA) {
-            ((CollisionDetector) getParent()).detectCollidingChild(identifierName, dataType);
+        if (getParent() instanceof YangCase &&
+                dataType != YangConstructType.CASE_DATA) {
+            ((CollisionDetector) getParent())
+                    .detectCollidingChild(identifierName, dataType);
         }
         YangNode node = getChild();
         while (node != null) {
             if (node instanceof CollisionDetector) {
-                ((CollisionDetector) node).detectSelfCollision(identifierName, dataType);
+                ((CollisionDetector) node)
+                        .detectSelfCollision(identifierName, dataType);
             }
             node = node.getNextSibling();
         }
     }
 
     @Override
-    public void detectSelfCollision(String identifierName, YangConstructType dataType)
+    public void detectSelfCollision(String identifierName,
+                                    YangConstructType dataType)
             throws DataModelException {
 
         if (dataType == CHOICE_DATA) {
             if (getName().equals(identifierName)) {
-                throw new DataModelException("YANG file error: Identifier collision detected in choice \"" +
-                        getName() + "\"");
+                throw new DataModelException(
+                        "YANG file error: Identifier collision detected in " +
+                                "choice \"" +
+                                getName() + "\"");
             }
             return;
         }
@@ -424,7 +449,8 @@
         YangNode node = getChild();
         while (node != null) {
             if (node instanceof CollisionDetector) {
-                ((CollisionDetector) node).detectSelfCollision(identifierName, dataType);
+                ((CollisionDetector) node)
+                        .detectSelfCollision(identifierName, dataType);
             }
             node = node.getNextSibling();
         }
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeType.java
index 03d0c6f..89a8c10 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeType.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeType.java
@@ -51,5 +51,16 @@
     /**
      * Represents node which is not a data node.
      */
-    YANG_NON_DATA_NODE
+    YANG_NON_DATA_NODE,
+
+    /**
+     * Represents node which cannot be instantiated.
+     */
+    YANG_CHOICE_NODE,
+
+    /**
+     * Represents the Augmented Node.
+     */
+    YANG_AUGMENT_NODE
+
 }
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
index 4ffd942..25535e2 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
@@ -22,22 +22,28 @@
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType;
-import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
+import org.onosproject.yangutils.translator.tojava.javamodel
+        .AttributesJavaDataType;
+import org.onosproject.yangutils.translator.tojava.javamodel
+        .JavaLeafInfoContainer;
 import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
 
 import com.google.common.base.MoreObjects;
 
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportClass;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportPackage;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype
+        .YangDataTypes.BINARY;
+import static org.onosproject.yangutils.translator.tojava.javamodel
+        .AttributesJavaDataType.getJavaImportClass;
+import static org.onosproject.yangutils.translator.tojava.javamodel
+        .AttributesJavaDataType.getJavaImportPackage;
 import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
 import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
 
 /**
  * Represents the information about individual imports in the generated file.
  */
-public class JavaQualifiedTypeInfoTranslator extends JavaQualifiedTypeInfo
+public class JavaQualifiedTypeInfoTranslator
+        extends JavaQualifiedTypeInfo
         implements Comparable<JavaQualifiedTypeInfoTranslator>, Serializable {
     private static final long serialVersionUID = 806201634L;
 
@@ -89,21 +95,27 @@
      *
      * @param leaf leaf whose java information is being updated
      */
-    public static void updateLeavesJavaQualifiedInfo(JavaLeafInfoContainer leaf) {
+    public static void updateLeavesJavaQualifiedInfo(
+            JavaLeafInfoContainer leaf) {
 
-        JavaQualifiedTypeInfoTranslator importInfo = (JavaQualifiedTypeInfoTranslator) leaf.getJavaQualifiedInfo();
+        JavaQualifiedTypeInfoTranslator importInfo =
+                (JavaQualifiedTypeInfoTranslator) leaf.getJavaQualifiedInfo();
 
         if (leaf.getDataType() == null) {
-            throw new TranslatorException("missing data type of leaf " + leaf.getName()
-                    + " in " + leaf.getLineNumber() + " at" + leaf.getCharPosition() + " in " + leaf.getFileName());
+            throw new TranslatorException(
+                    "missing data type of leaf " + leaf.getName()
+                            + " in " + leaf.getLineNumber() + " at" +
+                            leaf.getCharPosition() + " in " +
+                            leaf.getFileName());
         }
 
         /*
          * Current leaves holder is adding a leaf info as a attribute to the
          * current class.
          */
-        String className = getJavaImportClass(leaf.getDataType(), leaf.isLeafList(),
-                leaf.getConflictResolveConfig());
+        String className =
+                getJavaImportClass(leaf.getDataType(), leaf.isLeafList(),
+                                   leaf.getConflictResolveConfig());
         if (className != null) {
             /*
              * Corresponding to the attribute type a class needs to be imported,
@@ -111,11 +123,16 @@
              */
             importInfo.setClassInfo(className);
             String classPkg = getJavaImportPackage(leaf.getDataType(),
-                    leaf.isLeafList(), leaf.getConflictResolveConfig());
+                                                   leaf.isLeafList(),
+                                                   leaf.getConflictResolveConfig());
             if (classPkg == null) {
-                throw new TranslatorException("import package cannot be null when the class is used for "
-                        + leaf.getName()
-                        + " in " + leaf.getLineNumber() + " at" + leaf.getCharPosition() + " in " + leaf.getFileName());
+                throw new TranslatorException(
+                        "import package cannot be null when the class is used" +
+                                " for "
+                                + leaf.getName()
+                                + " in " + leaf.getLineNumber() + " at" +
+                                leaf.getCharPosition() + " in " +
+                                leaf.getFileName());
             }
             importInfo.setPkgInfo(classPkg);
         } else {
@@ -123,43 +140,56 @@
              * The attribute does not need a class to be imported, for example
              * built in java types.
              */
-            String dataTypeName = AttributesJavaDataType.getJavaDataType(leaf.getDataType());
+            String dataTypeName =
+                    AttributesJavaDataType.getJavaDataType(leaf.getDataType());
             if (dataTypeName == null) {
                 throw new TranslatorException("not supported data type for "
-                        + leaf.getName()
-                        + " in " + leaf.getLineNumber() + " at" + leaf.getCharPosition() + " in " + leaf.getFileName());
+                                                      + leaf.getName()
+                                                      + " in " +
+                                                      leaf.getLineNumber() +
+                                                      " at" +
+                                                      leaf.getCharPosition() +
+                                                      " in " +
+                                                      leaf.getFileName());
             }
             importInfo.setClassInfo(dataTypeName);
         }
 
-        leaf.getJavaQualifiedInfo().setJavaAttributeName(leaf.getJavaName(null));
+        leaf.getJavaQualifiedInfo().setJavaAttributeName(leaf.getJavaName(
+                leaf.getConflictResolveConfig()));
     }
 
     /**
      * Returns the import info for an attribute, which needs to be used for code
      * generation for import or for qualified access.
      *
-     * @param curNode       current data model node for which the java file is being
+     * @param curNode       current data model node for which the java file
+     *                      is being
      *                      generated
      * @param attributeName name of the attribute being added, it will used in
      *                      import info for child class
      * @return return the import info for this attribute
      */
-    public static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfCurNode(YangNode curNode,
-                                                                                String attributeName) {
+    public static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfCurNode(
+            YangNode curNode,
+            String attributeName) {
 
-        JavaQualifiedTypeInfoTranslator importInfo = new JavaQualifiedTypeInfoTranslator();
+        JavaQualifiedTypeInfoTranslator importInfo =
+                new JavaQualifiedTypeInfoTranslator();
 
         if (!(curNode instanceof JavaFileInfoContainer)) {
-            throw new TranslatorException("missing java file information to get the package details "
-                    + "of attribute corresponding to child node " + curNode.getName() +
-                    " in " + curNode.getLineNumber() + " at " + curNode.getCharPosition() + " in " +
-                    curNode.getFileName());
+            throw new TranslatorException(
+                    "missing java file information to get the package details "
+                            + "of attribute corresponding to child node " +
+                            curNode.getName() +
+                            " in " + curNode.getLineNumber() + " at " +
+                            curNode.getCharPosition() + " in " +
+                            curNode.getFileName());
         }
 
         importInfo.setClassInfo(attributeName);
         importInfo.setPkgInfo(((JavaFileInfoContainer) curNode)
-                .getJavaFileInfo().getPackage());
+                                      .getJavaFileInfo().getPackage());
 
         return importInfo;
     }
@@ -171,23 +201,28 @@
      * @param conflictResolver      plugin configurations
      * @return return the import info for this attribute
      */
-    static JavaQualifiedTypeInfoTranslator getQualifiedInfoOfFromString(JavaAttributeInfo referredTypesAttrInfo,
-                                                                        YangToJavaNamingConflictUtil conflictResolver) {
+    static JavaQualifiedTypeInfoTranslator getQualifiedInfoOfFromString(
+            JavaAttributeInfo referredTypesAttrInfo,
+            YangToJavaNamingConflictUtil conflictResolver) {
 
         /*
          * Get the java qualified type information for the wrapper classes and
          * set it in new java attribute information.
          */
-        JavaQualifiedTypeInfoTranslator qualifiedInfoOfFromString = new JavaQualifiedTypeInfoTranslator();
+        JavaQualifiedTypeInfoTranslator qualifiedInfoOfFromString =
+                new JavaQualifiedTypeInfoTranslator();
 
         if (referredTypesAttrInfo.getAttributeType().getDataType() == BINARY) {
             qualifiedInfoOfFromString.setClassInfo(BASE64);
             qualifiedInfoOfFromString.setPkgInfo(COLLECTION_IMPORTS);
         } else {
             qualifiedInfoOfFromString.setClassInfo(
-                    getJavaImportClass(referredTypesAttrInfo.getAttributeType(), true, conflictResolver));
+                    getJavaImportClass(referredTypesAttrInfo.getAttributeType(),
+                                       true, conflictResolver));
             qualifiedInfoOfFromString.setPkgInfo(
-                    getJavaImportPackage(referredTypesAttrInfo.getAttributeType(), true, conflictResolver));
+                    getJavaImportPackage(
+                            referredTypesAttrInfo.getAttributeType(), true,
+                            conflictResolver));
         }
         return qualifiedInfoOfFromString;
     }
@@ -204,7 +239,8 @@
             return true;
         }
         if (obj instanceof JavaQualifiedTypeInfoTranslator) {
-            JavaQualifiedTypeInfoTranslator other = (JavaQualifiedTypeInfoTranslator) obj;
+            JavaQualifiedTypeInfoTranslator other =
+                    (JavaQualifiedTypeInfoTranslator) obj;
             return Objects.equals(pkgInfo, other.pkgInfo) &&
                     Objects.equals(classInfo, other.classInfo);
         }