[ONOS-5058][ONOS-4796][ONOS-4893]compiler annotation implementation + defect fix

Change-Id: Ie317409d9ab1d36e626433558b2d51f26daaac82
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
index 29dc4ff..2250a62 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 
+import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.utils.io.YangPluginConfig;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
@@ -55,7 +56,9 @@
 import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
 import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
 import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
+import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
+import static org.onosproject.yangutils.utils.UtilConstants.SET;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
 import static org.onosproject.yangutils.utils.UtilConstants.TYPE;
 import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE_ATTR;
@@ -110,11 +113,13 @@
      * @param javaAttributeName    name of the attribute
      * @param isList               is list attribute
      * @param attributeAccessType  attribute access type
+     * @param compilerAnnotation compiler annotation
      * @return the textual java code for attribute definition in class
      */
     public static String getJavaAttributeDefinition(String javaAttributeTypePkg, String javaAttributeType,
                                                     String javaAttributeName, boolean isList,
-                                                    String attributeAccessType) {
+                                                    String attributeAccessType,
+                                                    YangCompilerAnnotation compilerAnnotation) {
 
         String attributeDefinition = attributeAccessType + SPACE;
 
@@ -126,13 +131,43 @@
             attributeDefinition = attributeDefinition + javaAttributeType + SPACE + javaAttributeName + SEMI_COLAN
                     + NEW_LINE;
         } else {
-            attributeDefinition = attributeDefinition + LIST + DIAMOND_OPEN_BRACKET;
+            if (compilerAnnotation != null && compilerAnnotation.getYangAppDataStructure() != null) {
+                switch (compilerAnnotation.getYangAppDataStructure().getDataStructure()) {
+                    case QUEUE: {
+                        attributeDefinition = attributeDefinition + QUEUE + DIAMOND_OPEN_BRACKET;
+                        break;
+                    }
+                    case SET: {
+                        attributeDefinition = attributeDefinition + SET + DIAMOND_OPEN_BRACKET;
+                        break;
+                    }
+                    default: {
+                        attributeDefinition = attributeDefinition + LIST + DIAMOND_OPEN_BRACKET;
+                    }
+                }
+            } else {
+                attributeDefinition = attributeDefinition + LIST + DIAMOND_OPEN_BRACKET;
+            }
+
             if (javaAttributeTypePkg != null) {
                 attributeDefinition = attributeDefinition + javaAttributeTypePkg + PERIOD;
             }
 
-            attributeDefinition = attributeDefinition + javaAttributeType + DIAMOND_CLOSE_BRACKET + SPACE
-                    + javaAttributeName + SPACE + EQUAL + SPACE + NEW + SPACE + ARRAY_LIST + SEMI_COLAN + NEW_LINE;
+            attributeDefinition = attributeDefinition + javaAttributeType;
+
+            if (compilerAnnotation != null && compilerAnnotation.getYangAppDataStructure() != null) {
+                switch (compilerAnnotation.getYangAppDataStructure().getDataStructure()) {
+                    default: {
+                        attributeDefinition = attributeDefinition + DIAMOND_CLOSE_BRACKET + SPACE
+                                + javaAttributeName + SEMI_COLAN + NEW_LINE;
+                    }
+                }
+            } else {
+                attributeDefinition = attributeDefinition + DIAMOND_CLOSE_BRACKET + SPACE
+                        + javaAttributeName + SPACE + EQUAL + SPACE + NEW + SPACE
+                        + ARRAY_LIST + SEMI_COLAN + NEW_LINE;
+            }
+
         }
         return attributeDefinition;
     }
@@ -155,7 +190,7 @@
      * @return string for enum's attribute
      */
     public static String generateEnumAttributeString(String name, int value, YangPluginConfig pluginConfig) {
-        return NEW_LINE + getJavaDoc(ENUM_ATTRIBUTE, name, false, pluginConfig)
+        return NEW_LINE + getJavaDoc(ENUM_ATTRIBUTE, name, false, pluginConfig, null)
                 + EIGHT_SPACE_INDENTATION + getEnumJavaAttribute(name).toUpperCase() + OPEN_PARENTHESIS
                 + value + CLOSE_PARENTHESIS + COMMA + NEW_LINE;
     }