[ONOS-3906],[ONOS-3910] Implementation of YANG module and leaf/leaf-list translator.
Change-Id: If1a8a991ffafa14b51211f97c435176ee1bf856f
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
new file mode 100644
index 0000000..604caf6
--- /dev/null
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -0,0 +1,432 @@
+/*
+ * Copyright 2016 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.translator.tojava.utils;
+
+import java.util.List;
+
+import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.translator.GeneratedFileType;
+import org.onosproject.yangutils.translator.tojava.AttributeInfo;
+import org.onosproject.yangutils.translator.tojava.GeneratedMethodTypes;
+import org.onosproject.yangutils.utils.UtilConstants;
+import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
+
+/**
+ * Generated methods for generated files based on the file type.
+ */
+public final class MethodsGenerator {
+
+ private static String builderClassName;
+ private static List<AttributeInfo> attrInfo;
+
+ /**
+ * Sets the builder class name for setter methods of builder class.
+ *
+ * @param name builder class name
+ */
+ public static void setBuilderClassName(String name) {
+ builderClassName = name;
+ }
+
+ /**
+ * Sets the attribute info for the impl class's constructor method.
+ *
+ * @param attr list of attribute info
+ */
+ public static void setAttrInfo(List<AttributeInfo> attr) {
+ attrInfo = attr;
+ }
+
+ /**
+ * Returns attribute info for the impl class's constructor method.
+ *
+ * @return list of attribute info
+ */
+ public static List<AttributeInfo> getAttrInfo() {
+ return attrInfo;
+ }
+
+ /**
+ * Return the class name.
+ *
+ * @return class name
+ */
+ public static String getBuilderClassName() {
+ return builderClassName;
+ }
+
+ /**
+ * Default constructor.
+ */
+ private MethodsGenerator() {
+ }
+
+ /**
+ * Return method strings.
+ *
+ * @param attr attribute info.
+ * @param type generated file type
+ * @return method string
+ */
+ public static String getMethodString(AttributeInfo attr, GeneratedFileType type) {
+
+ if (type.equals(GeneratedFileType.BUILDER_CLASS)) {
+
+ return parseBuilderMethodString(attr);
+ } else if (type.equals(GeneratedFileType.INTERFACE)) {
+
+ return getGetterString(attr);
+ } else if (type.equals(GeneratedFileType.BUILDER_INTERFACE)) {
+
+ return parseBuilderInterfaceMethodString(attr);
+ } else if (type.equals(GeneratedFileType.IMPL)) {
+
+ return parseImplMethodString(attr);
+ }
+ return null;
+ }
+
+ /**
+ * Returns constructed method impl for specific generated file type.
+ *
+ * @param genFileTypes generated file type
+ * @param yangName class name
+ * @param methodTypes method types
+ * @param returnType return type of method
+ * @return constructed method impl
+ */
+ public static String constructMethodInfo(GeneratedFileType genFileTypes, String yangName,
+ GeneratedMethodTypes methodTypes, YangType<?> returnType) {
+
+ if (genFileTypes.equals(GeneratedFileType.INTERFACE)) {
+
+ /**
+ * If interface, only getter will be there.
+ */
+ return getGetterForInterface(yangName, returnType);
+ } else if (genFileTypes.equals(GeneratedFileType.BUILDER_INTERFACE)) {
+
+ /**
+ * If builder interface, getters and setters will be there.
+ */
+ if (methodTypes.equals(GeneratedMethodTypes.GETTER)) {
+
+ return getGetterForInterface(yangName, returnType);
+ } else if (methodTypes.equals(GeneratedMethodTypes.SETTER)) {
+
+ return getSetterForInterface(yangName, returnType);
+ } else if (methodTypes.equals(GeneratedMethodTypes.BUILD)) {
+
+ return getBuildForInterface(yangName);
+ }
+ } else if (genFileTypes.equals(GeneratedFileType.BUILDER_CLASS)) {
+
+ /**
+ * If Builder class , getters, setters ,build and default constructor impls will be there.
+ */
+ if (methodTypes.equals(GeneratedMethodTypes.GETTER)) {
+
+ return getGetterForClass(yangName, returnType);
+ } else if (methodTypes.equals(GeneratedMethodTypes.SETTER)) {
+
+ return getSetterForClass(yangName, returnType);
+ } else if (methodTypes.equals(GeneratedMethodTypes.BUILD)) {
+
+ return getBuild(yangName);
+ } else if (methodTypes.equals(GeneratedMethodTypes.DEFAULT_CONSTRUCTOR)) {
+
+ return getDefaultConstructor(yangName + UtilConstants.BUILDER);
+ }
+ } else if (genFileTypes.equals(GeneratedFileType.IMPL)) {
+
+ if (methodTypes.equals(GeneratedMethodTypes.GETTER)) {
+
+ return getGetterForClass(yangName, returnType);
+ } else if (methodTypes.equals(GeneratedMethodTypes.CONSTRUCTOR)) {
+
+ return getConstructor(yangName);
+ } else if (methodTypes.equals(GeneratedMethodTypes.DEFAULT_CONSTRUCTOR)) {
+
+ return getDefaultConstructor(yangName + UtilConstants.IMPL);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the methods strings for builder class.
+ *
+ * @param attr attribute info.
+ * @return method string for builder class.
+ */
+ private static String parseBuilderMethodString(AttributeInfo attr) {
+
+ String overrideString = UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.OVERRIDE
+ + UtilConstants.NEW_LINE;
+
+ String getterString = JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.BUILDER_CLASS,
+ attr.getAttributeName(), GeneratedMethodTypes.GETTER, attr.getAttributeType());
+ String setterString = JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.BUILDER_CLASS,
+ attr.getAttributeName(), GeneratedMethodTypes.SETTER, attr.getAttributeType());
+
+ return overrideString + getterString + UtilConstants.NEW_LINE + overrideString + setterString
+ + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Returns the methods strings for builder class.
+ *
+ * @param attr attribute info.
+ * @return method string for builder class.
+ */
+ private static String parseImplMethodString(AttributeInfo attr) {
+
+ return UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.OVERRIDE
+ + UtilConstants.NEW_LINE + JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.BUILDER_CLASS,
+ attr.getAttributeName(), GeneratedMethodTypes.GETTER, attr.getAttributeType())
+ + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Returns the methods strings for builder interface.
+ *
+ * @param attr attribute info.
+ * @return method string for builder interface.
+ */
+ private static String parseBuilderInterfaceMethodString(AttributeInfo attr) {
+
+ return getGetterString(attr) + UtilConstants.NEW_LINE + getSetterString(attr);
+ }
+
+ /**
+ * Returns the methods strings for builder interface.
+ *
+ * @param name attribute name.
+ * @return method string for builder interface.
+ */
+ public static String parseBuilderInterfaceBuildMethodString(String name) {
+
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.BUILD, name) + JavaCodeSnippetGen
+ .getJavaMethodInfo(GeneratedFileType.BUILDER_INTERFACE, name, GeneratedMethodTypes.BUILD, null);
+ }
+
+ /**
+ * Returns getter string.
+ *
+ * @param attr attribute info.
+ * @return getter string
+ */
+ public static String getGetterString(AttributeInfo attr) {
+
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.GETTER, attr.getAttributeName())
+ + JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.INTERFACE, attr.getAttributeName(),
+ GeneratedMethodTypes.GETTER, attr.getAttributeType())
+ + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Returns setter string.
+ *
+ * @param attr attribute info.
+ * @return setter string
+ */
+ private static String getSetterString(AttributeInfo attr) {
+
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.SETTER, attr.getAttributeName())
+ + JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.BUILDER_INTERFACE, attr.getAttributeName(),
+ GeneratedMethodTypes.SETTER, attr.getAttributeType());
+ }
+
+ /**
+ * Returns constructor method string.
+ *
+ * @param name class name
+ * @return constructor string
+ */
+ public static String getConstructorString(String name) {
+
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.CONSTRUCTOR, name) + JavaCodeSnippetGen
+ .getJavaMethodInfo(GeneratedFileType.IMPL, name, GeneratedMethodTypes.CONSTRUCTOR, null);
+ }
+
+ /**
+ * Returns default constructor method string.
+ *
+ * @param type generated file type
+ * @param name class name
+ * @return default constructor string
+ */
+ public static String getDefaultConstructorString(GeneratedFileType type, String name) {
+
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR, name)
+ + JavaCodeSnippetGen.getJavaMethodInfo(type, name, GeneratedMethodTypes.DEFAULT_CONSTRUCTOR, null);
+ }
+
+ /**
+ * Returns build method string.
+ *
+ * @param name class name
+ * @return build string
+ */
+ public static String getBuildString(String name) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.OVERRIDE + UtilConstants.NEW_LINE
+ + JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.BUILDER_CLASS, name,
+ GeneratedMethodTypes.BUILD, null);
+ }
+
+ /**
+ * Returns the getter method strings for class file.
+ *
+ * @param yangName name of the attribute.
+ * @param returnType return type of attribute
+ * @return getter method for class.
+ */
+ private static String getGetterForClass(String yangName, YangType<?> returnType) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + returnType.getDataTypeName() + UtilConstants.SPACE + UtilConstants.GET_METHOD_PREFIX + yangName
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE
+ + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION
+ + UtilConstants.RETURN + UtilConstants.SPACE + yangName + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * Returns the setter method strings for class file.
+ *
+ * @param yangName name of the attribute.
+ * @param returnType return type of attribute
+ * @return setter method for class.
+ */
+ private static String getSetterForClass(String yangName, YangType<?> returnType) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE + getBuilderClassName()
+ + UtilConstants.SPACE + UtilConstants.SET_METHOD_PREFIX + yangName + UtilConstants.OPEN_PARENTHESIS
+ + returnType.getDataTypeName() + UtilConstants.SPACE + yangName + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE
+ + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.THIS + UtilConstants.PERIOD + yangName
+ + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.SPACE + yangName + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.RETURN
+ + UtilConstants.SPACE + UtilConstants.THIS + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * Returns the getter method strings for interface file.
+ *
+ * @param yangName name of the attribute.
+ * @param returnType return type of attribute
+ * @return getter method for interface.
+ */
+ private static String getGetterForInterface(String yangName, YangType<?> returnType) {
+ returnType.setDataTypeName(returnType.getDataTypeName().replace("\"", ""));
+ return UtilConstants.FOUR_SPACE_INDENTATION + returnType.getDataTypeName() + UtilConstants.SPACE
+ + UtilConstants.GET_METHOD_PREFIX + yangName + UtilConstants.OPEN_PARENTHESIS
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN;
+ }
+
+ /**
+ * Returns the setter method strings for interface file.
+ *
+ * @param yangName name of the attribute.
+ * @param returnType return type of attribute
+ * @return setter method for interface.
+ */
+ private static String getSetterForInterface(String yangName, YangType<?> returnType) {
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.BUILDER + UtilConstants.SPACE
+ + UtilConstants.SET_METHOD_PREFIX + yangName + UtilConstants.OPEN_PARENTHESIS
+ + returnType.getDataTypeName() + UtilConstants.SPACE + yangName + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SEMI_COLAN;
+ }
+
+ /**
+ * Returns the build method strings for interface file.
+ *
+ * @param yangName name of the attribute.
+ * @param returnType return type of attribute
+ * @return build method for interface.
+ */
+ private static String getBuildForInterface(String yangName) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + yangName + UtilConstants.SPACE + UtilConstants.BUILD
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN;
+ }
+
+ /**
+ * Returns the constructor strings for class file.
+ *
+ * @param yangName name of the class.
+ * @return constructor for class
+ */
+ private static String getConstructor(String yangName) {
+
+ String builderAttribute = (yangName.substring(0, 1).toLowerCase() + yangName.substring(1));
+ String constructor = UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + yangName + UtilConstants.IMPL + UtilConstants.OPEN_PARENTHESIS + yangName + UtilConstants.BUILDER
+ + UtilConstants.SPACE + builderAttribute + UtilConstants.OBJECT + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE;
+
+ if (getAttrInfo() != null) {
+ for (AttributeInfo attribute : getAttrInfo()) {
+ attribute.setAttributeName(JavaIdentifierSyntax.getCamelCase(attribute.getAttributeName()));
+ constructor = constructor + UtilConstants.TWELVE_SPACE_INDENTATION + UtilConstants.THIS
+ + UtilConstants.PERIOD + attribute.getAttributeName() + UtilConstants.SPACE
+ + UtilConstants.EQUAL + UtilConstants.SPACE + builderAttribute + UtilConstants.OBJECT
+ + UtilConstants.PERIOD + UtilConstants.GET_METHOD_PREFIX + attribute.getAttributeName()
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE;
+ }
+ getAttrInfo().clear();
+ }
+ return constructor + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET
+ + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Returns the build method strings for class file.
+ *
+ * @param yangName class name
+ * @return build method string for class.
+ */
+ private static String getBuild(String yangName) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE + yangName
+ + UtilConstants.SPACE + UtilConstants.BUILD + UtilConstants.OPEN_PARENTHESIS
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET
+ + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.RETURN
+ + UtilConstants.SPACE + UtilConstants.NEW + UtilConstants.SPACE + yangName + UtilConstants.IMPL
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.THIS + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * Returns the Default constructor strings for class file.
+ *
+ * @param yangName name of the class.
+ * @return Default constructor for class
+ */
+ private static String getDefaultConstructor(String name) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE + name
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE
+ + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE;
+ }
+
+}