[ONOS-4286],[ONOS-3911] YANG typedef and YANG augment
translator implementation.
Change-Id: I3e21d1cb52bcb90b935b672eee42b836c21f448b
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
index 3dffc96..077e39f 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
@@ -16,35 +16,19 @@
package org.onosproject.yangutils.translator.tojava.utils;
-import java.util.Set;
-import java.util.TreeSet;
-
import org.onosproject.yangutils.datamodel.YangDataTypes;
+import org.onosproject.yangutils.datamodel.YangDerivedInfo;
+import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
+import org.onosproject.yangutils.datamodel.YangTypeDef;
+import org.onosproject.yangutils.translator.exception.TranslatorException;
+import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BITS;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.BOOLEAN;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.DECIMAL64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.EMPTY;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.ENUMERATION;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INSTANCE_IDENTIFIER;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT16;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.INT8;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT16;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT32;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT64;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UINT8;
-import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
+import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
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.BYTE;
@@ -52,8 +36,10 @@
import static org.onosproject.yangutils.utils.UtilConstants.INT;
import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
+import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
import static org.onosproject.yangutils.utils.UtilConstants.LONG;
import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
+import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
@@ -63,8 +49,6 @@
*/
public final class AttributesJavaDataType {
- private static Set<JavaQualifiedTypeInfo> importInfo = new TreeSet<>();
-
/**
* Creates an instance of attribute java data type.
*/
@@ -72,26 +56,6 @@
}
/**
- * Returns import info.
- *
- * @return import info
- */
- public static Set<JavaQualifiedTypeInfo> getImportInfo() {
-
- return importInfo;
- }
-
- /**
- * Adds import info to the import info set.
- *
- * @param importData import info
- */
- public static void addImportInfo(JavaQualifiedTypeInfo importData) {
-
- getImportInfo().add(importData);
- }
-
- /**
* Returns java type.
*
* @param yangType YANG type
@@ -101,48 +65,32 @@
YangDataTypes type = yangType.getDataType();
- if (type.equals(INT8)) {
- return BYTE;
- } else if (type.equals(INT16)) {
- return SHORT;
- } else if (type.equals(INT32)) {
- return INT;
- } else if (type.equals(INT64)) {
- return LONG;
- } else if (type.equals(UINT8)) {
- return SHORT;
- } else if (type.equals(UINT16)) {
- return INT;
- } else if (type.equals(UINT32)) {
- return LONG;
- } else if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return STRING_DATA_TYPE;
- } else if (type.equals(BOOLEAN)) {
- return BOOLEAN_DATA_TYPE;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- return yangType.getDataTypeName();
+ switch (type) {
+ case INT8:
+ return BYTE;
+ case INT16:
+ return SHORT;
+ case INT32:
+ return INT;
+ case INT64:
+ return LONG;
+ case UINT8:
+ return SHORT;
+ case UINT16:
+ return INT;
+ case UINT32:
+ return LONG;
+ case UINT64:
+ return BIG_INTEGER;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case STRING:
+ return STRING_DATA_TYPE;
+ case BOOLEAN:
+ return BOOLEAN_DATA_TYPE;
+ default:
+ throw new TranslatorException("given data type is not supported.");
}
- return null;
}
/**
@@ -157,75 +105,80 @@
YangDataTypes type = yangType.getDataType();
if (isListAttr) {
- if (type.equals(INT8)) {
- return BYTE_WRAPPER;
- } else if (type.equals(INT16)) {
- return SHORT_WRAPPER;
- } else if (type.equals(INT32)) {
- return INTEGER_WRAPPER;
- } else if (type.equals(INT64)) {
- return LONG_WRAPPER;
- } else if (type.equals(UINT8)) {
- return SHORT_WRAPPER;
- } else if (type.equals(UINT16)) {
- return INTEGER_WRAPPER;
- } else if (type.equals(UINT32)) {
- return LONG_WRAPPER;
- } else if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return STRING_DATA_TYPE;
- } else if (type.equals(BOOLEAN)) {
- return BOOLEAN_WRAPPER;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ switch (type) {
+ case INT8:
+ return BYTE_WRAPPER;
+ case INT16:
+ return SHORT_WRAPPER;
+ case INT32:
+ return INTEGER_WRAPPER;
+ case INT64:
+ return LONG_WRAPPER;
+ case UINT8:
+ return SHORT_WRAPPER;
+ case UINT16:
+ return INTEGER_WRAPPER;
+ case UINT32:
+ return LONG_WRAPPER;
+ case UINT64:
+ return BIG_INTEGER;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case STRING:
+ return STRING_DATA_TYPE;
+ case BOOLEAN:
+ return BOOLEAN_WRAPPER;
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ return BOOLEAN_WRAPPER;
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ default:
+ throw new TranslatorException("given data type is not supported.");
}
} else {
- if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return STRING_DATA_TYPE;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ switch (type) {
+ case UINT64:
+ return BIG_INTEGER;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case STRING:
+ return STRING_DATA_TYPE;
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ //TODO:EMPTY
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
+ default:
+ return null;
}
}
- return null;
}
/**
@@ -241,75 +194,108 @@
YangDataTypes type = yangType.getDataType();
if (isListAttr) {
- if (type.equals(INT8)
- || type.equals(INT16)
- || type.equals(INT32)
- || type.equals(INT64)
- || type.equals(UINT8)
- || type.equals(UINT16)
- || type.equals(UINT32)
- || type.equals(STRING)
- || type.equals(BOOLEAN)) {
- return JAVA_LANG;
- } else if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- for (JavaQualifiedTypeInfo imports : getImportInfo()) {
- if (imports.getClassInfo().equals(classInfo)) {
- return imports.getPkgInfo();
- }
- }
+ switch (type) {
+ case INT8:
+ case INT16:
+ case INT32:
+ case INT64:
+ case UINT8:
+ case UINT16:
+ case UINT32:
+ case STRING:
+ case BOOLEAN:
+ return JAVA_LANG;
+ case UINT64:
+ return JAVA_MATH;
+ case DECIMAL64:
+ //TODO: DECIMAL64.
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ //TODO:EMPTY
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getTypDefsPackage(yangType);
+ default:
+ throw new TranslatorException("given data type is not supported.");
}
} else {
-
- if (type.equals(UINT64)) {
- //TODO: BIGINTEGER.
- } else if (type.equals(DECIMAL64)) {
- //TODO: DECIMAL64.
- } else if (type.equals(STRING)) {
- return JAVA_LANG;
- } else if (type.equals(ENUMERATION)) {
- //TODO: ENUMERATION.
- } else if (type.equals(BITS)) {
- //TODO:BITS
- } else if (type.equals(BINARY)) {
- //TODO:BINARY
- } else if (type.equals(LEAFREF)) {
- //TODO:LEAFREF
- } else if (type.equals(IDENTITYREF)) {
- //TODO:IDENTITYREF
- } else if (type.equals(EMPTY)) {
- //TODO:EMPTY
- } else if (type.equals(UNION)) {
- //TODO:UNION
- } else if (type.equals(INSTANCE_IDENTIFIER)) {
- //TODO:INSTANCE_IDENTIFIER
- } else if (type.equals(DERIVED)) {
- for (JavaQualifiedTypeInfo imports : getImportInfo()) {
- if (imports.getClassInfo().equals(classInfo)) {
- return imports.getPkgInfo();
- }
- }
+ switch (type) {
+ case UINT64:
+ //TODO: BIGINTEGER.
+ case DECIMAL64:
+ //TODO: DECIMAL64
+ case STRING:
+ return JAVA_LANG;
+ case ENUMERATION:
+ //TODO: ENUMERATION.
+ case BITS:
+ //TODO:BITS
+ case BINARY:
+ //TODO:BINARY
+ case LEAFREF:
+ //TODO:LEAFREF
+ case IDENTITYREF:
+ //TODO:IDENTITYREF
+ case EMPTY:
+ //TODO:EMPTY
+ case UNION:
+ //TODO:UNION
+ case INSTANCE_IDENTIFIER:
+ //TODO:INSTANCE_IDENTIFIER
+ case DERIVED:
+ return getTypDefsPackage(yangType);
+ default:
+ return null;
}
}
- return null;
+ }
+
+ /**
+ * Returns java package for typedef node.
+ *
+ * @param type YANG type
+ * @return java package for typedef node
+ */
+ private static String getTypDefsPackage(YangType<?> type) {
+ Object var = type.getDataTypeExtendedInfo();
+ if (!(var instanceof YangDerivedInfo)) {
+ throw new TranslatorException("type should have been derived.");
+ }
+
+ if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
+ throw new TranslatorException("derived info is not an instance of typedef.");
+ }
+
+ YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
+ if (typedef.getJavaFileInfo().getPackage() == null) {
+ return getPackageFromParent(typedef.getParent());
+ }
+ return typedef.getJavaFileInfo().getPackage();
+ }
+
+ /**
+ * Returns package from parent node.
+ *
+ * @param parent parent YANG node
+ * @return java package from parent node
+ */
+ private static String getPackageFromParent(YangNode parent) {
+ if (!(parent instanceof HasJavaFileInfo)) {
+ throw new TranslatorException("Invalid child node is being processed.");
+ }
+ JavaFileInfo parentInfo = ((HasJavaFileInfo) parent).getJavaFileInfo();
+ return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
}
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
index e1ea084..f3adba0 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
@@ -21,8 +21,12 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.getExtendsList;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.isExtendsList;
import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
+import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
+import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
import static org.onosproject.yangutils.utils.UtilConstants.FINAL;
import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
import static org.onosproject.yangutils.utils.UtilConstants.IMPLEMENTS;
@@ -32,6 +36,7 @@
import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
/**
* Represents generator for class definition of generated files.
@@ -84,8 +89,16 @@
* @return definition
*/
private static String getInterfaceDefinition(String yangName) {
+ if (!isExtendsList()) {
+ return PUBLIC + SPACE + INTERFACE + SPACE + yangName + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+ }
+ String def = PUBLIC + SPACE + INTERFACE + SPACE + yangName + SPACE + EXTEND + SPACE;
+ for (String extend : getExtendsList()) {
+ def = def + extend + COMMA;
+ }
+ def = trimAtLast(def, COMMA);
- return PUBLIC + SPACE + INTERFACE + SPACE + yangName + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+ return def + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
}
/**
@@ -96,7 +109,6 @@
* @return definition
*/
private static String getBuilderInterfaceDefinition(String yangName) {
-
return INTERFACE + SPACE + yangName + BUILDER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + NEW_LINE;
}
@@ -107,7 +119,6 @@
* @return definition
*/
private static String getBuilderClassDefinition(String yangName) {
-
return PUBLIC + SPACE + CLASS + SPACE + yangName + BUILDER + SPACE + IMPLEMENTS + SPACE + yangName + PERIOD
+ yangName + BUILDER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
}
@@ -119,7 +130,6 @@
* @return definition
*/
private static String getImplClassDefinition(String yangName) {
-
return PUBLIC + SPACE + FINAL + SPACE + CLASS + SPACE + yangName + IMPL + SPACE + IMPLEMENTS + SPACE + yangName
+ SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
}
@@ -131,7 +141,6 @@
* @return definition
*/
private static String getTypeDefClassDefinition(String yangName) {
-
return PUBLIC + SPACE + FINAL + SPACE + CLASS + SPACE + yangName + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
}
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
index 861ef4d..07da946 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
@@ -20,12 +20,20 @@
import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
+import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
+import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
+import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
import static org.onosproject.yangutils.utils.UtilConstants.LIST;
+import static org.onosproject.yangutils.utils.UtilConstants.NEW;
import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
@@ -127,6 +135,18 @@
}
/**
+ * Returns attribute of augmented info for generated impl file.
+ *
+ * @return attribute of augmented info for generated impl file
+ */
+ public static String getAugmentedInfoAttribute() {
+ return FOUR_SPACE_INDENTATION + PRIVATE + SPACE + getListAttribute(AUGMENTED_INFO) + SPACE
+ + getSmallCase(AUGMENTED_INFO) + LIST + SPACE + EQUAL + SPACE + NEW + SPACE + ARRAY_LIST
+ + DIAMOND_OPEN_BRACKET + DIAMOND_CLOSE_BRACKET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN
+ + NEW_LINE;
+ }
+
+ /**
* Returns based on the file type and the YANG name of the file, generate the class
* / interface definition close.
*
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index 7a30be8..08b3072 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -40,16 +40,21 @@
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
+import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isHasAugmentationExtended;
import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
@@ -67,12 +72,58 @@
public final class JavaFileGenerator {
/**
- * Creates an instance of java file generator.
+ * Flag to check whether generated interface file need to extends any class.
*/
+ private static boolean isExtendsList = false;
+
+ /**
+ * List of classes to be extended by generated interface file.
+ */
+ private static List<String> extendsList = new ArrayList<>();
+
+ /**
+ * Creates an instance of java file generator.
+ */
private JavaFileGenerator() {
}
/**
+ * Returns true if extends list is not empty.
+ *
+ * @return true or false
+ */
+ public static boolean isExtendsList() {
+ return isExtendsList;
+ }
+
+ /**
+ * Sets the value of is extends list.
+ *
+ * @param isExtends true or false
+ */
+ public static void setIsExtendsList(boolean isExtends) {
+ isExtendsList = isExtends;
+ }
+
+ /**
+ * Returns list of extended classes.
+ *
+ * @return list of extended classes
+ */
+ public static List<String> getExtendsList() {
+ return extendsList;
+ }
+
+ /**
+ * Sets the list of extended classes.
+ *
+ * @param extendList list of extended classes
+ */
+ public static void setExtendsList(List<String> extendList) {
+ extendsList = extendList;
+ }
+
+ /**
* Returns generated interface file for current node.
*
* @param file file
@@ -91,6 +142,7 @@
String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
+
if (isAttrPresent) {
/**
* Add getter methods to interface file.
@@ -258,6 +310,12 @@
+ " while impl class file generation");
}
+ /**
+ * Add attribute for augmented info's list.
+ */
+ if (isHasAugmentationExtended(getExtendsList())) {
+ insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
+ }
insertDataIntoJavaFile(file, NEW_LINE);
try {
/**
@@ -298,6 +356,16 @@
throw new IOException("No data found in temporary java code fragment files for " + className
+ " while impl class file generation");
}
+
+ /**
+ * Add method for augment info's list.
+ */
+ if (isHasAugmentationExtended(getExtendsList())) {
+ methods.add(getAddAugmentInfoMethodImpl());
+ methods.add(getAugmentInfoListImpl());
+ methods.add(getRemoveAugmentationImpl());
+ }
+
/**
* Add methods in impl class.
*/
@@ -310,7 +378,7 @@
}
/**
- * Generate class file for type def.
+ * Generates class file for type def.
*
* @param file generated file
* @param curNode current YANG node
@@ -364,11 +432,6 @@
methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
/**
- * Setter method.
- */
- methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addTypeDefsSetter());
-
- /**
* Hash code method.
*/
methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
@@ -388,7 +451,7 @@
} catch (IOException e) {
throw new IOException("No data found in temporary java code fragment files for " + className
- + " while tyoe def class file generation");
+ + " while type def class file generation");
}
for (String method : methods) {
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
index 90c122b..154090d 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
@@ -23,6 +23,8 @@
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
import static org.onosproject.yangutils.utils.UtilConstants.AND;
+import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
@@ -100,7 +102,6 @@
* @return method string for builder interface
*/
public static String parseBuilderInterfaceBuildMethodString(String name) {
-
return getJavaDoc(BUILD_METHOD, name, false) + getBuildForInterface(name);
}
@@ -142,7 +143,6 @@
* @return constructor string
*/
public static String getConstructorString(String name) {
-
return getJavaDoc(CONSTRUCTOR, name, false);
}
@@ -154,7 +154,6 @@
* @return default constructor string
*/
public static String getDefaultConstructorString(String name, String modifierType) {
-
return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false) + getDefaultConstructor(name, modifierType);
}
@@ -186,7 +185,6 @@
* @return setter for type def's attribute
*/
private static String getTypeDefConstructorString(String type, String name, String className) {
-
return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + className + OPEN_PARENTHESIS + type + SPACE + VALUE
+ CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + THIS + PERIOD
+ name + SPACE + EQUAL + SPACE + VALUE + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION
@@ -200,7 +198,6 @@
* @return check not null string
*/
public static String getCheckNotNull(String name) {
-
return EIGHT_SPACE_INDENTATION + CHECK_NOT_NULL_STRING + OPEN_PARENTHESIS + name + COMMA + SPACE + name
+ CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
}
@@ -212,7 +209,6 @@
* @return build string
*/
public static String getBuildString(String name) {
-
return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE + getBuild(name);
}
@@ -242,7 +238,6 @@
* @return getter for attribute
*/
private static String getGetter(String type, String name) {
-
return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + type + SPACE + GET_METHOD_PREFIX + getCaptialCase(name)
+ OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
+ RETURN + SPACE + name + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
@@ -275,7 +270,6 @@
* @return setter for attribute
*/
private static String getSetter(String className, String name, String type) {
-
return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + className + BUILDER + SPACE + SET_METHOD_PREFIX
+ getCaptialCase(name) + OPEN_PARENTHESIS + type + SPACE + name + CLOSE_PARENTHESIS + SPACE
+ OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + THIS + PERIOD + name + SPACE + EQUAL + SPACE
@@ -304,7 +298,6 @@
* @return setter for type def's attribute
*/
private static String getTypeDefSetter(String type, String name) {
-
return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + VOID + SPACE + SET_METHOD_PREFIX + getCaptialCase(name)
+ OPEN_PARENTHESIS + type + SPACE + VALUE + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+ EIGHT_SPACE_INDENTATION + THIS + PERIOD + name + SPACE + EQUAL + SPACE + VALUE + SEMI_COLAN + NEW_LINE
@@ -317,7 +310,6 @@
* @return override string
*/
public static String getOverRideString() {
-
return NEW_LINE + FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE;
}
@@ -346,7 +338,6 @@
* @return getter for interface
*/
private static String getGetterInterfaceString(String returnType, String yangName) {
-
return FOUR_SPACE_INDENTATION + returnType + SPACE + GET_METHOD_PREFIX + getCaptialCase(yangName)
+ OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN;
}
@@ -378,7 +369,6 @@
* @return setter string
*/
private static String getSetterInterfaceString(String className, String attrName, String attrType) {
-
return FOUR_SPACE_INDENTATION + className + BUILDER + SPACE + SET_METHOD_PREFIX + getCaptialCase(attrName)
+ OPEN_PARENTHESIS + attrType + SPACE + attrName + CLOSE_PARENTHESIS + SEMI_COLAN;
}
@@ -389,7 +379,6 @@
* @return list string
*/
private static String getListString() {
-
return LIST + DIAMOND_OPEN_BRACKET;
}
@@ -416,7 +405,6 @@
* @return build method for interface
*/
public static String getBuildForInterface(String yangName) {
-
return FOUR_SPACE_INDENTATION + yangName + SPACE + BUILD + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN
+ NEW_LINE;
}
@@ -462,7 +450,6 @@
* @return build method string for class
*/
public static String getBuild(String yangName) {
-
return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + yangName + SPACE + BUILD + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+ SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + RETURN + SPACE + NEW + SPACE
+ yangName + IMPL + OPEN_PARENTHESIS + THIS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
@@ -477,7 +464,6 @@
* @return Default constructor for class
*/
private static String getDefaultConstructor(String name, String modifierType) {
-
return FOUR_SPACE_INDENTATION + modifierType + SPACE + name + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE
+ OPEN_CURLY_BRACKET + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
}
@@ -488,7 +474,6 @@
* @return to string method open string
*/
public static String getToStringMethodOpen() {
-
return getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO
+ STRING_DATA_TYPE + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+ EIGHT_SPACE_INDENTATION + RETURN + GOOGLE_MORE_OBJECT_METHOD_STRING + NEW_LINE;
@@ -500,7 +485,6 @@
* @return to string method close string
*/
public static String getToStringMethodClose() {
-
return TWELVE_SPACE_INDENTATION + PERIOD + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+ SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
}
@@ -514,10 +498,8 @@
public static String getToStringMethod(JavaAttributeInfo attr) {
String attributeName = getSmallCase(attr.getAttributeName());
-
return TWELVE_SPACE_INDENTATION + PERIOD + ADD_STRING + OPEN_PARENTHESIS + QUOTES + attributeName + QUOTES
+ COMMA + SPACE + attributeName + CLOSE_PARENTHESIS;
-
}
/**
@@ -526,7 +508,6 @@
* @return hash code method open string
*/
public static String getHashCodeMethodOpen() {
-
return getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + INT + SPACE + HASH_CODE_STRING
+ OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
+ RETURN + SPACE + OBJECT_STRING + SUFFIX_S + PERIOD + HASH + OPEN_PARENTHESIS;
@@ -539,7 +520,6 @@
* @return to hash code method close string
*/
public static String getHashCodeMethodClose(String hashcodeString) {
-
hashcodeString = trimAtLast(hashcodeString, COMMA);
hashcodeString = trimAtLast(hashcodeString, SPACE);
return hashcodeString + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
@@ -553,7 +533,6 @@
* @return hash code method
*/
public static String getHashCodeMethod(JavaAttributeInfo attr) {
-
return getSmallCase(attr.getAttributeName()) + COMMA + SPACE;
}
@@ -564,7 +543,6 @@
* @return equals method open string
*/
public static String getEqualsMethodOpen(String className) {
-
return getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + BOOLEAN_DATA_TYPE + SPACE + EQUALS_STRING
+ OPEN_PARENTHESIS + OBJECT_STRING + SPACE + OBJ + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET
+ NEW_LINE + getEqualsMethodsCommonIfCondition() + getEqualsMethodsSpecificIfCondition(className);
@@ -576,7 +554,6 @@
* @return if condition string
*/
private static String getEqualsMethodsCommonIfCondition() {
-
return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + THIS + SPACE + EQUAL + EQUAL + SPACE + OBJ
+ CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN + SPACE
+ TRUE + SEMI_COLAN + NEW_LINE + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
@@ -589,7 +566,6 @@
* @return if condition string
*/
private static String getEqualsMethodsSpecificIfCondition(String className) {
-
return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ + INSTANCE_OF + className
+ CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + className
+ SPACE + OTHER + SPACE + EQUAL + SPACE + OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE
@@ -603,7 +579,6 @@
* @return equals method close string
*/
public static String getEqualsMethodClose(String equalMethodString) {
-
equalMethodString = trimAtLast(equalMethodString, AND);
equalMethodString = trimAtLast(equalMethodString, AND);
equalMethodString = trimAtLast(equalMethodString, SPACE);
@@ -622,11 +597,9 @@
public static String getEqualsMethod(JavaAttributeInfo attr) {
String attributeName = getSmallCase(attr.getAttributeName());
-
return SIXTEEN_SPACE_INDENTATION + SPACE + OBJECT_STRING + SUFFIX_S + PERIOD + EQUALS_STRING + OPEN_PARENTHESIS
+ attributeName + COMMA + SPACE + OTHER + PERIOD + attributeName + CLOSE_PARENTHESIS + SPACE + AND
+ AND;
-
}
/**
@@ -639,11 +612,57 @@
public static String getOfMethod(String name, JavaAttributeInfo attr) {
String attrQuaifiedType = getReturnType(attr);
-
return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + STATIC + SPACE + name + SPACE + OF + OPEN_PARENTHESIS
+ attrQuaifiedType + SPACE + VALUE + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+ EIGHT_SPACE_INDENTATION + RETURN + SPACE + NEW + SPACE + name + OPEN_PARENTHESIS + VALUE
+ CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
}
+ /**
+ * Returns implementation of add augmentation method of HasAugmentation class.
+ *
+ * @return implementation of add augmentation method of HasAugmentation class
+ */
+ public static String getAddAugmentInfoMethodImpl() {
+ String method = FOUR_SPACE_INDENTATION;
+ method = method + getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + VOID + SPACE + ADD_STRING
+ + AUGMENTATION + OPEN_PARENTHESIS + AUGMENTED_INFO + SPACE + VALUE + CLOSE_PARENTHESIS + SPACE
+ + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + GET_METHOD_PREFIX + AUGMENTED_INFO + LIST
+ + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + PERIOD + ADD_STRING + OPEN_PARENTHESIS + VALUE
+ + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
+
+ return method;
+ }
+
+ /**
+ * Returns implementation of get augment info list method of HasAugmentation class.
+ *
+ * @return implementation of get augment info list method of HasAugmentation class
+ */
+ public static String getAugmentInfoListImpl() {
+
+ String method = FOUR_SPACE_INDENTATION;
+ method = method + getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + LIST + DIAMOND_OPEN_BRACKET
+ + AUGMENTED_INFO + DIAMOND_CLOSE_BRACKET + SPACE + GET_METHOD_PREFIX + AUGMENTED_INFO + LIST
+ + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
+ + RETURN + SPACE + getSmallCase(AUGMENTED_INFO) + LIST + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION
+ + CLOSE_CURLY_BRACKET;
+ return method;
+ }
+
+ /**
+ * Returns implementation of remove augmentation method of HasAugmentation class.
+ *
+ * @return implementation of remove augmentation method of HasAugmentation class
+ */
+ public static String getRemoveAugmentationImpl() {
+ String method = FOUR_SPACE_INDENTATION;
+ method = method + getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + VOID + SPACE + "remove"
+ + AUGMENTATION + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+ + EIGHT_SPACE_INDENTATION + GET_METHOD_PREFIX + AUGMENTED_INFO + LIST + OPEN_PARENTHESIS
+ + CLOSE_PARENTHESIS + PERIOD + "clear" + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
+ + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET;
+ return method;
+ }
+
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
new file mode 100644
index 0000000..adc90ef
--- /dev/null
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempJavaCodeFragmentFilesUtils.java
@@ -0,0 +1,193 @@
+/*
+ * 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.translator.tojava.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.translator.tojava.HasJavaImportData;
+
+import static org.onosproject.yangutils.translator.tojava.JavaImportData.getAugmentedInfoImport;
+import static org.onosproject.yangutils.translator.tojava.JavaImportData.getHasAugmentationImport;
+import static org.onosproject.yangutils.translator.tojava.JavaImportData.getImportForArrayList;
+import static org.onosproject.yangutils.translator.tojava.JavaImportData.getImportForList;
+import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
+import static org.onosproject.yangutils.utils.UtilConstants.HAS_AUGMENTATION;
+import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle;
+
+/**
+ * Represents utilities for temporary java code fragments.
+ */
+public final class TempJavaCodeFragmentFilesUtils {
+
+ /**
+ * Creates a private instance of temporary java code fragment utils.
+ */
+ private TempJavaCodeFragmentFilesUtils() {
+ }
+
+ /**
+ * Adds imports for ToString and HashCodeMethod.
+ *
+ * @param curNode current YANG node
+ * @param imports import list
+ * @return import list
+ */
+ public static List<String> addImportsToStringAndHasCodeMethods(YangNode curNode, List<String> imports) {
+ if (curNode instanceof HasJavaImportData) {
+ imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForHashAndEquals());
+ imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForToString());
+ }
+ return imports;
+ }
+
+ /**
+ * Adds import for HasAugmentation class.
+ *
+ * @param curNode current YANG node
+ * @param imports list of imports
+ * @param operation add or delete import
+ * @return import for HasAugmentation class
+ */
+ public static List<String> addHasAugmentationImport(YangNode curNode, List<String> imports, boolean operation) {
+ if (curNode instanceof HasJavaImportData) {
+ String thisImport = getHasAugmentationImport();
+ performOperationOnImports(imports, thisImport, operation);
+ }
+ return imports;
+ }
+
+ /**
+ * Adds import for AugmentedInfo class.
+ *
+ * @param curNode current YANG node
+ * @param imports list of imports
+ * @param operation add or delete import
+ * @return import for AugmentedInfo class
+ */
+ public static List<String> addAugmentedInfoImport(YangNode curNode, List<String> imports, boolean operation) {
+ if (curNode instanceof HasJavaImportData) {
+ String thisImport = getAugmentedInfoImport();
+ performOperationOnImports(imports, thisImport, operation);
+ }
+ return imports;
+ }
+
+ /**
+ * Adds import for array list.
+ *
+ * @param curNode current YANG node
+ * @param imports list of imports
+ * @param operation add or delete import
+ * @return import for HasAugmentation class
+ */
+ public static List<String> addArrayListImport(YangNode curNode, List<String> imports, boolean operation) {
+ if (curNode instanceof HasJavaImportData) {
+ String arrayListImport = getImportForArrayList();
+ String listImport = getImportForList();
+ performOperationOnImports(imports, arrayListImport, operation);
+ if (!imports.contains(listImport)) {
+ /**
+ * List can be there because of attribute also , so no need to remove it and operation will
+ * always be add(true).
+ */
+ performOperationOnImports(imports, listImport, true);
+ }
+ }
+
+ return imports;
+ }
+
+ /**
+ * Performs given operations on import list.
+ *
+ * @param imports list of imports
+ * @param curImport current import
+ * @param operation add or remove
+ * @return import list
+ */
+ private static List<String> performOperationOnImports(List<String> imports, String curImport, boolean operation) {
+ if (operation) {
+ imports.add(curImport);
+ } else {
+ imports.remove(curImport);
+ }
+ java.util.Collections.sort(imports);
+ return imports;
+ }
+
+ /**
+ * Prepares java file generator for extends list.
+ *
+ * @param extendsList list of classes need to be extended
+ */
+ public static void prepareJavaFileGeneratorForExtendsList(List<String> extendsList) {
+
+ if (!extendsList.isEmpty() && !extendsList.equals(null)) {
+ JavaFileGenerator.setExtendsList(extendsList);
+ JavaFileGenerator.setIsExtendsList(true);
+ } else {
+ JavaFileGenerator.getExtendsList().clear();
+ JavaFileGenerator.setIsExtendsList(false);
+ }
+ }
+
+ /**
+ * Returns true if HasAugmentation class needs to be extended.
+ *
+ * @param extendsList list of classes need to be extended
+ * @return true or false
+ */
+ public static boolean isHasAugmentationExtended(List<String> extendsList) {
+ if (extendsList != null && extendsList.contains(HAS_AUGMENTATION)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if AugmentedInfo class needs to be extended.
+ *
+ * @param extendsList list of classes need to be extended
+ * @return true or false
+ */
+ public static boolean isAugmentedInfoExtended(List<String> extendsList) {
+ if (extendsList != null && extendsList.contains(AUGMENTED_INFO)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Closes the file handle for temporary file.
+ *
+ * @param file file to be closed
+ * @param toBeDeleted flag to indicate if file needs to be deleted
+ * @throws IOException when failed to close the file handle
+ */
+ public static void closeFile(File file, boolean toBeDeleted) throws IOException {
+
+ if (file != null) {
+ updateFileHandle(file, null, true);
+ if (toBeDeleted) {
+ file.delete();
+ }
+ }
+ }
+}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
index f0fb9bc..6716251 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/YangJavaModelUtils.java
@@ -17,8 +17,17 @@
package org.onosproject.yangutils.translator.tojava.utils;
import java.io.IOException;
+
+import org.onosproject.yangutils.datamodel.YangAugment;
+import org.onosproject.yangutils.datamodel.YangCase;
+import org.onosproject.yangutils.datamodel.YangChoice;
+import org.onosproject.yangutils.datamodel.YangContainer;
+import org.onosproject.yangutils.datamodel.YangInput;
import org.onosproject.yangutils.datamodel.YangLeavesHolder;
+import org.onosproject.yangutils.datamodel.YangList;
import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangNotification;
+import org.onosproject.yangutils.datamodel.YangOutput;
import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
@@ -26,6 +35,8 @@
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
+import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
+import static org.onosproject.yangutils.utils.UtilConstants.HAS_AUGMENTATION;
import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
/**
@@ -143,6 +154,21 @@
javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
.addCurNodeInfoInParentTempFile((YangNode) javaCodeGeneratorInfo, isMultiInstance);
+
+ /**
+ * For augmentation of nodes.
+ */
+ if (javaCodeGeneratorInfo instanceof YangContainer
+ || javaCodeGeneratorInfo instanceof YangCase
+ || javaCodeGeneratorInfo instanceof YangChoice
+ || javaCodeGeneratorInfo instanceof YangInput
+ || javaCodeGeneratorInfo instanceof YangList
+ || javaCodeGeneratorInfo instanceof YangNotification
+ || javaCodeGeneratorInfo instanceof YangOutput) {
+ javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().addToExtendsList(HAS_AUGMENTATION);
+ } else if (javaCodeGeneratorInfo instanceof YangAugment) {
+ javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles().addToExtendsList(AUGMENTED_INFO);
+ }
}
/**