[ONOS-5413]From string and to string method generation for YTB to handle in yms

Change-Id: Ib066598ca40ff642113481617369d82a6d94620a
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
index 6d5a14c..c0d05b0 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
@@ -41,9 +41,11 @@
 import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIfConditionForAddToListMethod;
 import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.AND;
+import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
 import static org.onosproject.yangutils.utils.UtilConstants.AT;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
 import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
 import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
 import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
@@ -74,6 +76,7 @@
 import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
 import static org.onosproject.yangutils.utils.UtilConstants.GET;
+import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.IF;
 import static org.onosproject.yangutils.utils.UtilConstants.IMPLEMENTS;
 import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
@@ -88,12 +91,14 @@
 import static org.onosproject.yangutils.utils.UtilConstants.LONG_MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.MAP;
+import static org.onosproject.yangutils.utils.UtilConstants.MORE_OBJ_ATTR;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW;
 import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
 import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.OF;
 import static org.onosproject.yangutils.utils.UtilConstants.OMIT_NULL_VALUE_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
 import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
 import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
@@ -102,19 +107,24 @@
 import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
 import static org.onosproject.yangutils.utils.UtilConstants.PARSE_LONG;
 import static org.onosproject.yangutils.utils.UtilConstants.PARSE_SHORT;
+import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
 import static org.onosproject.yangutils.utils.UtilConstants.PUT;
 import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
 import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTE_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
 import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
 import static org.onosproject.yangutils.utils.UtilConstants.SET;
+import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE;
 import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
 import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
 import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
+import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER;
+import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
 import static org.onosproject.yangutils.utils.UtilConstants.THIS;
 import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
 import static org.onosproject.yangutils.utils.UtilConstants.TRY;
@@ -136,7 +146,6 @@
 /**
  * Represents string generator for translator.
  */
-@SuppressWarnings("HardcodedFileSeparator")
 public final class StringGenerator {
 
     private StringGenerator() {
@@ -203,8 +212,8 @@
     static String getNewInstance(String returnType, String varName,
                                  String space, String value) {
         return space + returnType + SPACE + varName + SPACE + EQUAL + SPACE +
-                NEW + returnType + brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
-                                            value, null) + signatureClose();
+                NEW + SPACE + returnType + brackets(
+                OPEN_CLOSE_BRACKET_WITH_VALUE, value, null) + signatureClose();
     }
 
     /**
@@ -270,20 +279,24 @@
      * @param prefix          prefix for internal method
      * @param paramType       parameter type
      * @param isBuilderSetter is for builder setter
+     * @param setterVal       value to set in setter
      * @return body of the method
      */
     static String methodBody(MethodBodyTypes type, String paraName,
                              String methodName,
                              String space, String prefix,
-                             String paramType, boolean isBuilderSetter) {
+                             String paramType, boolean isBuilderSetter, String setterVal) {
         StringBuilder builder = new StringBuilder();
         String body;
         switch (type) {
             case GETTER:
                 return getReturnString(paraName, space);
             case SETTER:
+                if (setterVal == null) {
+                    setterVal = paraName;
+                }
                 body = space + THIS + PERIOD + paraName + SPACE + EQUAL + SPACE +
-                        paraName + signatureClose();
+                        setterVal + signatureClose();
                 builder.append(body);
                 if (isBuilderSetter) {
                     body = getReturnString(THIS + signatureClose(), space);
@@ -341,8 +354,7 @@
                                 OPEN_CLOSE_BRACKET_WITH_VALUE, VALUE, null)
                                 + signatureClose(), space);
             case TO_STRING:
-                return space + PERIOD + ADD_STRING + OPEN_PARENTHESIS + QUOTES +
-                        paraName + QUOTES + COMMA + SPACE + paraName +
+                return getToStringMethodsAddString(space, paraName) + paraName +
                         CLOSE_PARENTHESIS;
             case EQUALS_METHOD:
             default:
@@ -351,6 +363,18 @@
     }
 
     /**
+     * Returns to string method's add string.
+     *
+     * @param space    indentation
+     * @param paraName parameter name
+     * @return to string method's add string
+     */
+    static String getToStringMethodsAddString(String space, String paraName) {
+        return space + PERIOD + ADD_STRING + OPEN_PARENTHESIS +
+                getQuotedString(paraName) + COMMA + SPACE;
+    }
+
+    /**
      * Returns end of line.
      *
      * @return end of line
@@ -462,6 +486,9 @@
             method = modifier + SPACE;
         }
         methodBuilder.append(method);
+        if (prefix == null) {
+            prefix = EMPTY_STRING;
+        }
         if (methodReturnType != null) {
             method = methodReturnType + SPACE + prefix + methodName;
         } else {
@@ -471,7 +498,7 @@
         methodBuilder.append(method)
                 .append(OPEN_PARENTHESIS);
         for (Map.Entry<String, String> param : params.entrySet()) {
-            methodBuilder.append(methodParam(param.getKey(), param.getValue()));
+            methodBuilder.append(methodParam(param.getValue(), param.getKey()));
             methodBuilder.append(commaWithSpace());
         }
         String para = methodBuilder.toString();
@@ -505,6 +532,9 @@
         if (modifier != null) {
             method = modifier + SPACE;
         }
+        if (prefix == null) {
+            prefix = EMPTY_STRING;
+        }
         methodBuilder.append(method);
         if (methodReturnType != null) {
             method = methodReturnType + SPACE + prefix + methodName;
@@ -637,10 +667,11 @@
      *
      * @param type     type of conflict
      * @param addFirst true int/long need to be added first
+     * @param val      value to set
      * @return if condition string for typedef constructor
      */
     static String ifConditionForIntInTypeDefConstructor(ValidatorTypeForUnionTypes type,
-                                                        boolean addFirst) {
+                                                        boolean addFirst, String val) {
         String condition =
                 EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
                         VALIDATE_RANGE + OPEN_PARENTHESIS;
@@ -649,28 +680,28 @@
             case INT_TYPE_CONFLICT:
                 if (addFirst) {
                     condition = condition + INT_MIN_RANGE + COMMA + SPACE +
-                            INT_MAX_RANGE + COMMA + SPACE + VALUE;
+                            INT_MAX_RANGE + COMMA + SPACE + val;
                 } else {
                     condition = condition + UINT_MIN_RANGE + COMMA + SPACE +
-                            UINT_MAX_RANGE + COMMA + SPACE + VALUE;
+                            UINT_MAX_RANGE + COMMA + SPACE + val;
                 }
                 break;
             case LONG_TYPE_CONFLICT:
                 if (addFirst) {
                     condition = condition + LONG_MIN_RANGE + COMMA + SPACE +
-                            LONG_MAX_RANGE + COMMA + SPACE + VALUE;
+                            LONG_MAX_RANGE + COMMA + SPACE + val;
                 } else {
                     condition = condition + ULONG_MIN_RANGE + COMMA + SPACE +
-                            ULONG_MAX_RANGE + COMMA + SPACE + VALUE;
+                            ULONG_MAX_RANGE + COMMA + SPACE + val;
                 }
                 break;
             case SHORT_TYPE_CONFLICT:
                 if (addFirst) {
                     condition = condition + SHORT_MIN_RANGE + COMMA + SPACE +
-                            SHORT_MAX_RANGE + COMMA + SPACE + VALUE;
+                            SHORT_MAX_RANGE + COMMA + SPACE + val;
                 } else {
                     condition = condition + UINT8_MIN_RANGE + COMMA + SPACE +
-                            UINT8_MAX_RANGE + COMMA + SPACE + VALUE;
+                            UINT8_MAX_RANGE + COMMA + SPACE + val;
                 }
                 break;
             default:
@@ -717,10 +748,10 @@
             case EMPTY:
             case BOOLEAN:
                 return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
-            case BITS:
-            case UNION:
             case ENUMERATION:
+                return targetDataType + PERIOD + OF;
             case DERIVED:
+            case UNION:
                 return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
             default:
                 throw new TranslatorException("given data type is not " +
@@ -752,7 +783,7 @@
      * @return sub string with return statement for union's from string method
      */
     static String getReturnOfSubString() {
-        return getReturnString(OF, EIGHT_SPACE_INDENTATION) +
+        return getReturnString(OF, TWELVE_SPACE_INDENTATION) +
                 brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, TMP_VAL, null) +
                 signatureClose();
     }
@@ -1054,4 +1085,109 @@
                 .append(line).append(AT).append(position).append(IN)
                 .append(fileName).toString();
     }
+
+    /**
+     * Returns string builder attribute string;
+     *
+     * @param init  first param to be appended to string builder
+     * @param space indentation space
+     * @return string builder attribute
+     */
+    static String getStringBuilderAttr(String init, String space) {
+        StringBuilder builder = new StringBuilder(space);
+        builder.append(STRING_BUILDER).append(SPACE).append(STRING_BUILDER_VAR)
+                .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+                .append(SPACE).append(STRING_BUILDER).append(
+                brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, getQuotedString(init), null))
+                .append(signatureClose());
+        return builder.toString();
+    }
+
+    /**
+     * Returns quoted string.
+     *
+     * @param name name to be quoted
+     * @return quoted string
+     */
+    static String getQuotedString(String name) {
+        return QUOTES + name + QUOTES;
+    }
+
+    /**
+     * Returns string builder's append string.
+     *
+     * @param append data to be append
+     * @param space  indentation
+     * @return string builder's append string
+     */
+    static String getStringBuilderAppendString(String append, String space) {
+        return space + STRING_BUILDER_VAR + PERIOD + APPEND + OPEN_PARENTHESIS +
+                append + CLOSE_PARENTHESIS + signatureClose();
+    }
+
+    /**
+     * Returns pattern quote string.
+     *
+     * @param type type for pattern is needed
+     * @return pattern quote string
+     */
+    static String getPatternQuoteString(String type) {
+        return PATTERN + PERIOD + QUOTE_STRING + brackets(
+                OPEN_CLOSE_BRACKET_WITH_VALUE, getQuotedString(type), null);
+    }
+
+    /**
+     * Returns bitset attribute.
+     *
+     * @param indentation indentation
+     * @return bitset attribute
+     */
+    static String getBitSetAttr(String indentation) {
+        StringBuilder builder = new StringBuilder(indentation);
+        return builder.append(BITSET).append(SPACE).append(TMP_VAL)
+                .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+                .append(SPACE).append(BITSET).append(OPEN_CLOSE_BRACKET_STRING)
+                .append(signatureClose()).toString();
+    }
+
+    /**
+     * Returns for loop string
+     *
+     * @param space indentation
+     * @param type  data type
+     * @param var   variable
+     * @param data  data variable/collection
+     * @return for loop string
+     */
+    static String getForLoopString(String space, String type, String var,
+                                   String data) {
+        return space + FOR + SPACE + OPEN_PARENTHESIS + type + SPACE + var +
+                SPACE + COLON + SPACE + data + CLOSE_PARENTHESIS +
+                methodSignatureClose(CLASS_TYPE);
+    }
+
+    /**
+     * Returns set value parameter's get string for union to string method.
+     *
+     * @param count count of type
+     * @return get string
+     */
+    static String getSetValueParaCondition(int count) {
+        return SET_VALUE_PARA + PERIOD + GET + brackets(OPEN_CLOSE_BRACKET_WITH_VALUE,
+                                                        count + EMPTY_STRING, null);
+    }
+
+    /**
+     * Returns more object attr for union to string method.
+     *
+     * @return more object attr for union to string method
+     */
+    static String getMoreObjectAttr() {
+        StringBuilder attr = new StringBuilder(EIGHT_SPACE_INDENTATION);
+        String[] array = {NEW_LINE};
+        attr.append(MORE_OBJ_ATTR).append(GOOGLE_MORE_OBJECT_METHOD_STRING)
+                .append(NEW_LINE).append(FOUR_SPACE_INDENTATION).append(trimAtLast(
+                getOmitNullValueString(), array)).append(signatureClose());
+        return attr.toString();
+    }
 }