[ONOS-4149],[ONOS-3909] YANG list translator impl and bug fixes.
Change-Id: Ia1a94142a3a114815766f661ed850bf9cacde66f
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
index 5ff4e79..2a32819 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
@@ -18,19 +18,25 @@
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangLeafList;
import org.onosproject.yangutils.datamodel.YangLeavesHolder;
import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator;
+import org.onosproject.yangutils.datamodel.YangTypeDef;
+import org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen;
import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
import org.onosproject.yangutils.utils.UtilConstants;
import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
+import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
+import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+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.GeneratedTempFileType.ATTRIBUTES_MASK;
@@ -43,8 +49,15 @@
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.JavaAttributeInfo.getAttributeInfoOfLeaf;
+import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoOfTypeDef;
import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getCurNodeAsAttributeInParent;
import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefination;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateImplClassFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateTypeDefClassFile;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructor;
@@ -53,11 +66,30 @@
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOfMethod;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForTypeDefClass;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getTypeDefConstructor;
import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
+import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
+import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
+import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
+import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
+import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
+import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.createPackage;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_DEF_CONSTRUCTOR;
+import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_DEF_SETTER_METHOD;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.clean;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
/**
* Provides implementation of java code fragments temporary implementations.
@@ -71,6 +103,12 @@
private int generatedTempFiles;
/**
+ * The variable which guides the types of files generated using
+ * the generated file types mask.
+ */
+ private int generatedJavaFiles;
+
+ /**
* Absolute path where the target java file needs to be generated.
*/
private String absoluteDirPath;
@@ -81,6 +119,11 @@
private String generatedJavaClassName;
/**
+ * File type extension for java classes.
+ */
+ private static final String JAVA_FILE_EXTENSION = ".java";
+
+ /**
* File type extension for temporary classes.
*/
private static final String TEMP_FILE_EXTENSION = ".tmp";
@@ -136,6 +179,56 @@
private static final String EQUALS_METHOD_FILE_NAME = "Equals";
/**
+ * File name for interface java file name suffix.
+ */
+ private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
+
+ /**
+ * File name for builder interface file name suffix.
+ */
+ private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX = BUILDER + INTERFACE;
+
+ /**
+ * File name for builder class file name suffix.
+ */
+ private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
+
+ /**
+ * File name for impl class file name suffix.
+ */
+ private static final String IMPL_CLASS_FILE_NAME_SUFFIX = IMPL;
+
+ /**
+ * File name for typedef class file name suffix.
+ */
+ private static final String TYPEDEF_CLASS_FILE_NAME_SUFFIX = EMPTY_STRING;
+
+ /**
+ * Java file handle for interface file.
+ */
+ private File interfaceJavaFileHandle;
+
+ /**
+ * Java file handle for builder interface file.
+ */
+ private File builderInterfaceJavaFileHandle;
+
+ /**
+ * Java file handle for builder class file.
+ */
+ private File builderClassJavaFileHandle;
+
+ /**
+ * Java file handle for impl class file.
+ */
+ private File implClassJavaFileHandle;
+
+ /**
+ * Java file handle for typedef class file.
+ */
+ private File typedefClassJavaFileHandle;
+
+ /**
* Temporary file handle for attribute.
*/
private File attributesTempFileHandle;
@@ -181,6 +274,16 @@
private File toStringImplTempFileHandle;
/**
+ * Java attribute info.
+ */
+ private JavaAttributeInfo newAttrInfo;
+
+ /**
+ * Current YANG node.
+ */
+ private YangNode curYangNode;
+
+ /**
* Construct an object of temporary java code fragment.
*
* @param genFileType file generation type
@@ -188,12 +291,13 @@
* @param className class name
* @throws IOException when fails to create new file handle
*/
- public TempJavaCodeFragmentFiles(int genFileType, String genDir, String className) throws IOException {
+ public TempJavaCodeFragmentFiles(int genFileType, String genDir, String className)
+ throws IOException {
generatedTempFiles = 0;
absoluteDirPath = genDir;
generatedJavaClassName = className;
-
+ generatedJavaFiles = genFileType;
/**
* Initialize getter when generation file type matches to interface
* mask.
@@ -234,6 +338,18 @@
generatedTempFiles |= TO_STRING_IMPL_MASK;
}
+ /**
+ * Initialize getterImpl, attributes, hash code, equals and
+ * to strings when generation file type matches to typeDef class mask.
+ */
+ if ((genFileType & GENERATE_TYPEDEF_CLASS) != 0) {
+ generatedTempFiles |= ATTRIBUTES_MASK;
+ generatedTempFiles |= GETTER_FOR_CLASS_MASK;
+ generatedTempFiles |= HASH_CODE_IMPL_MASK;
+ generatedTempFiles |= EQUALS_IMPL_MASK;
+ generatedTempFiles |= TO_STRING_IMPL_MASK;
+ }
+
if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
setAttributesTempFileHandle(getTemporaryFileHandle(ATTRIBUTE_FILE_NAME));
}
@@ -272,6 +388,106 @@
}
/**
+ * Returns java file handle for interface file.
+ *
+ * @return java file handle for interface file
+ */
+ public File getInterfaceJavaFileHandle() {
+
+ return interfaceJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for interface file.
+ *
+ * @param interfaceJavaFileHandle java file handle
+ */
+ public void setInterfaceJavaFileHandle(File interfaceJavaFileHandle) {
+
+ this.interfaceJavaFileHandle = interfaceJavaFileHandle;
+ }
+
+ /**
+ * Returns java file handle for builder interface file.
+ *
+ * @return java file handle for builder interface file
+ */
+ public File getBuilderInterfaceJavaFileHandle() {
+
+ return builderInterfaceJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for builder interface file.
+ *
+ * @param builderInterfaceJavaFileHandle java file handle
+ */
+ public void setBuilderInterfaceJavaFileHandle(File builderInterfaceJavaFileHandle) {
+
+ this.builderInterfaceJavaFileHandle = builderInterfaceJavaFileHandle;
+ }
+
+ /**
+ * Returns java file handle for builder class file.
+ *
+ * @return java file handle for builder class file
+ */
+ public File getBuilderClassJavaFileHandle() {
+
+ return builderClassJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for builder class file.
+ *
+ * @param builderClassJavaFileHandle java file handle
+ */
+ public void setBuilderClassJavaFileHandle(File builderClassJavaFileHandle) {
+
+ this.builderClassJavaFileHandle = builderClassJavaFileHandle;
+ }
+
+ /**
+ * Returns java file handle for impl class file.
+ *
+ * @return java file handle for impl class file
+ */
+ public File getImplClassJavaFileHandle() {
+
+ return implClassJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for impl class file.
+ *
+ * @param implClassJavaFileHandle java file handle
+ */
+ public void setImplClassJavaFileHandle(File implClassJavaFileHandle) {
+
+ this.implClassJavaFileHandle = implClassJavaFileHandle;
+ }
+
+ /**
+ * Returns java file handle for typedef class file.
+ *
+ * @return java file handle for typedef class file
+ */
+ public File getTypedefClassJavaFileHandle() {
+
+ return typedefClassJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for typedef class file.
+ *
+ * @param typedefClassJavaFileHandle java file handle
+ */
+ public void setTypedefClassJavaFileHandle(File typedefClassJavaFileHandle) {
+
+ this.typedefClassJavaFileHandle = typedefClassJavaFileHandle;
+ }
+
+ /**
* Returns attribute's temporary file handle.
*
* @return temporary file handle
@@ -452,6 +668,46 @@
}
/**
+ * Returns java attribute info.
+ *
+ * @return java attribute info
+ */
+ public JavaAttributeInfo getNewAttrInfo() {
+
+ return newAttrInfo;
+ }
+
+ /**
+ * Sets java attribute info.
+ *
+ * @param newAttrInfo java attribute info
+ */
+ public void setNewAttrInfo(JavaAttributeInfo newAttrInfo) {
+
+ this.newAttrInfo = newAttrInfo;
+ }
+
+ /**
+ * Returns current YANG node.
+ *
+ * @return current YANG node
+ */
+ public YangNode getCurYangNode() {
+
+ return curYangNode;
+ }
+
+ /**
+ * Sets current YANG node.
+ *
+ * @param curYangNode YANG node
+ */
+ public void setCurYangNode(YangNode curYangNode) {
+
+ this.curYangNode = curYangNode;
+ }
+
+ /**
* Adds attribute for class.
*
* @param attr attribute info
@@ -459,7 +715,7 @@
*/
public void addAttribute(JavaAttributeInfo attr) throws IOException {
- appendToFile(getAttributesTempFileHandle(), parseAttribute(attr) + UtilConstants.FOUR_SPACE_INDENTATION);
+ appendToFile(getAttributesTempFileHandle(), parseAttribute(attr) + FOUR_SPACE_INDENTATION);
}
/**
@@ -470,20 +726,24 @@
*/
public void addGetterForInterface(JavaAttributeInfo attr) throws IOException {
- appendToFile(getGetterInterfaceTempFileHandle(),
- getGetterString(attr) + UtilConstants.NEW_LINE);
+ appendToFile(getGetterInterfaceTempFileHandle(), getGetterString(attr) + NEW_LINE);
}
/**
* Adds getter method's impl for class.
*
* @param attr attribute info
+ * @param genFiletype generated file type
* @throws IOException when fails to append to temporary file
*/
- public void addGetterImpl(JavaAttributeInfo attr) throws IOException {
+ public void addGetterImpl(JavaAttributeInfo attr, int genFiletype) throws IOException {
- appendToFile(getGetterImplTempFileHandle(),
- getOverRideString() + getGetterForClass(attr) + UtilConstants.NEW_LINE);
+ if ((genFiletype & BUILDER_CLASS_MASK) != 0) {
+ appendToFile(getGetterImplTempFileHandle(), getOverRideString() + getGetterForClass(attr) + NEW_LINE);
+ } else {
+ appendToFile(getGetterImplTempFileHandle(), getJavaDoc(GETTER_METHOD, attr.getAttributeName(), false)
+ + getGetterForClass(attr) + NEW_LINE);
+ }
}
/**
@@ -495,7 +755,7 @@
public void addSetterForInterface(JavaAttributeInfo attr) throws IOException {
appendToFile(getSetterInterfaceTempFileHandle(),
- getSetterString(attr, generatedJavaClassName) + UtilConstants.NEW_LINE);
+ getSetterString(attr, generatedJavaClassName) + NEW_LINE);
}
/**
@@ -507,7 +767,7 @@
public void addSetterImpl(JavaAttributeInfo attr) throws IOException {
appendToFile(getSetterImplTempFileHandle(),
- getOverRideString() + getSetterForClass(attr, generatedJavaClassName) + UtilConstants.NEW_LINE);
+ getOverRideString() + getSetterForClass(attr, generatedJavaClassName) + NEW_LINE);
}
/**
@@ -529,7 +789,7 @@
*/
public String addBuildMethodImpl() throws IOException {
- return getBuildString(generatedJavaClassName) + UtilConstants.NEW_LINE;
+ return getBuildString(generatedJavaClassName) + NEW_LINE;
}
/**
@@ -546,13 +806,50 @@
/**
* Adds default constructor for class.
*
+ * @param modifier modifier for constructor.
+ * @param toAppend string which need to be appended with the class name
* @return default constructor for class
* @throws IOException when fails to append to file
*/
- public String addDefaultConstructor() throws IOException {
+ public String addDefaultConstructor(String modifier, String toAppend) throws IOException {
- return UtilConstants.NEW_LINE + getDefaultConstructorString(generatedJavaClassName + UtilConstants.BUILDER,
- UtilConstants.PUBLIC);
+ return NEW_LINE + getDefaultConstructorString(generatedJavaClassName + toAppend, modifier);
+ }
+
+ /**
+ * Adds typedef constructor for class.
+ *
+ * @return typedef constructor for class
+ * @throws IOException when fails to append to file
+ */
+ public String addTypeDefConstructor() throws IOException {
+
+ return NEW_LINE + getJavaDoc(TYPE_DEF_CONSTRUCTOR, generatedJavaClassName, false)
+ + getTypeDefConstructor(newAttrInfo, generatedJavaClassName) + NEW_LINE;
+ }
+
+ /**
+ * Adds default constructor for class.
+ *
+ * @return default constructor for class
+ * @throws IOException when fails to append to file
+ */
+ public String addTypeDefsSetter() throws IOException {
+
+ return getJavaDoc(TYPE_DEF_SETTER_METHOD, generatedJavaClassName, false) + getSetterForTypeDefClass(newAttrInfo)
+ + NEW_LINE;
+ }
+
+ /**
+ * Adds default constructor for class.
+ *
+ * @return default constructor for class
+ * @throws IOException when fails to append to file
+ */
+ public String addOfMethod() throws IOException {
+
+ return JavaDocGen.getJavaDoc(JavaDocType.OF_METHOD, generatedJavaClassName, false)
+ + getOfMethod(generatedJavaClassName, newAttrInfo);
}
/**
@@ -563,7 +860,7 @@
*/
public void addHashCodeMethod(JavaAttributeInfo attr) throws IOException {
- appendToFile(getHashCodeImplTempFileHandle(), getHashCodeMethod(attr) + UtilConstants.NEW_LINE);
+ appendToFile(getHashCodeImplTempFileHandle(), getHashCodeMethod(attr) + NEW_LINE);
}
/**
@@ -574,7 +871,7 @@
*/
public void addEqualsMethod(JavaAttributeInfo attr) throws IOException {
- appendToFile(getEqualsImplTempFileHandle(), getEqualsMethod(attr) + UtilConstants.NEW_LINE);
+ appendToFile(getEqualsImplTempFileHandle(), getEqualsMethod(attr) + NEW_LINE);
}
/**
@@ -585,7 +882,7 @@
*/
public void addToStringMethod(JavaAttributeInfo attr) throws IOException {
- appendToFile(getToStringImplTempFileHandle(), getToStringMethod(attr) + UtilConstants.NEW_LINE);
+ appendToFile(getToStringImplTempFileHandle(), getToStringMethod(attr) + NEW_LINE);
}
/**
@@ -614,6 +911,20 @@
}
/**
+ * Returns a temporary file handle for the specific file type.
+ *
+ * @param fileName file name
+ * @return temporary file handle
+ * @throws IOException when fails to create new file handle
+ */
+ private File getJavaFileHandle(String fileName) throws IOException {
+
+ createPackage(absoluteDirPath, getJavaFileInfo().getJavaName());
+
+ return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION, getJavaFileInfo());
+ }
+
+ /**
* Returns data from the temporary files.
*
* @param file temporary file handle
@@ -624,11 +935,10 @@
String path = getTempDirPath();
if (new File(path + file.getName()).exists()) {
- return FileSystemUtil.readAppendFile(path + file.getName(), UtilConstants.EMPTY_STRING);
+ return FileSystemUtil.readAppendFile(path + file.getName(), EMPTY_STRING);
} else {
throw new IOException("Unable to get data from the given "
- + file.getName() + " file for "
- + generatedJavaClassName + UtilConstants.PERIOD);
+ + file.getName() + " file for " + generatedJavaClassName + PERIOD);
}
}
@@ -639,8 +949,8 @@
*/
private String getTempDirPath() {
- return absoluteDirPath.replace(UtilConstants.PERIOD, UtilConstants.SLASH)
- + File.separator + generatedJavaClassName + TEMP_FOLDER_NAME_SUFIX + File.separator;
+ return absoluteDirPath.replace(PERIOD, UtilConstants.SLASH)
+ + SLASH + generatedJavaClassName + TEMP_FOLDER_NAME_SUFIX + SLASH;
}
/**
@@ -654,7 +964,8 @@
/*
* TODO: check if this utility needs to be called or move to the caller
*/
- String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ String attributeName = JavaIdentifierSyntax
+ .getCamelCase(JavaIdentifierSyntax.getLowerCase(attr.getAttributeName()));
if (attr.isQualifiedName()) {
return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(), attr.getImportInfo().getClassInfo(),
attributeName, attr.isListAttr());
@@ -674,7 +985,7 @@
private void appendToFile(File file, String data) throws IOException {
try {
- JavaFileGenerator.insert(file, data);
+ insertDataIntoJavaFile(file, data);
} catch (IOException ex) {
throw new IOException("failed to write in temp file.");
}
@@ -778,6 +1089,20 @@
}
/**
+ * Adds leaf attributes in generated files.
+ *
+ * @param curNode current data model node
+ * @throws IOException IO operation fail
+ */
+ public void addTypeDefAttributeToTempFiles(YangNode curNode) throws IOException {
+
+ JavaAttributeInfo javaAttributeInfo = getAttributeInfoOfTypeDef(curNode,
+ ((YangTypeDef) curNode).getDerivedType().getDataTypeExtendedInfo().getBaseType(),
+ ((YangTypeDef) curNode).getName(), false);
+ addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
+ }
+
+ /**
* Add the new attribute info to the target generated temporary files.
*
* @param newAttrInfo the attribute info that needs to be added to temporary
@@ -787,6 +1112,7 @@
void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo)
throws IOException {
+ setNewAttrInfo(newAttrInfo);
if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
addAttribute(newAttrInfo);
}
@@ -800,7 +1126,7 @@
}
if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
- addGetterImpl(newAttrInfo);
+ addGetterImpl(newAttrInfo, generatedJavaFiles);
}
if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
@@ -826,11 +1152,134 @@
}
/**
+ * Return java file info.
+ *
+ * @return java file info
+ */
+ private JavaFileInfo getJavaFileInfo() {
+
+ return ((HasJavaFileInfo) getCurYangNode()).getJavaFileInfo();
+ }
+
+ /**
+ * Returns java class name.
+ *
+ * @param suffix for the class name based on the file type
+ * @return java class name
+ */
+ private String getJavaClassName(String suffix) {
+
+ return JavaIdentifierSyntax.getCaptialCase(getJavaFileInfo().getJavaName()) + suffix;
+ }
+
+ /**
+ * Returns the directory path.
+ *
+ * @return directory path
+ */
+ private String getDirPath() {
+
+ return getJavaFileInfo().getPackageFilePath();
+ }
+
+ /**
+ * Construct java code exit.
+ *
+ * @param fileType generated file type
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ public void generateJavaFile(int fileType, YangNode curNode) throws IOException {
+
+ setCurYangNode(curNode);
+ List<String> imports = new ArrayList<>();
+ if (curNode instanceof HasJavaImportData) {
+ imports = ((HasJavaImportData) curNode).getJavaImportData().getImports(getNewAttrInfo());
+ }
+ /**
+ * Start generation of files.
+ */
+ if ((fileType & INTERFACE_MASK) != 0 | (fileType & BUILDER_INTERFACE_MASK) != 0
+ | fileType == GENERATE_INTERFACE_WITH_BUILDER) {
+
+ /**
+ * Create interface file.
+ */
+ setInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX)));
+ setInterfaceJavaFileHandle(generateInterfaceFile(getInterfaceJavaFileHandle(), imports, curNode));
+ /**
+ * Create builder interface file.
+ */
+ setBuilderInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)));
+ setBuilderInterfaceJavaFileHandle(
+ generateBuilderInterfaceFile(getBuilderInterfaceJavaFileHandle(), curNode));
+ /**
+ * Append builder interface file to interface file and close it.
+ */
+ mergeJavaFiles(getBuilderInterfaceJavaFileHandle(), getInterfaceJavaFileHandle());
+ insertDataIntoJavaFile(getInterfaceJavaFileHandle(), JavaCodeSnippetGen.getJavaClassDefClose());
+
+ }
+
+ if (curNode instanceof HasJavaImportData) {
+ imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForHashAndEquals());
+ imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForToString());
+ java.util.Collections.sort(imports);
+ }
+
+ if ((fileType & BUILDER_CLASS_MASK) != 0 | (fileType & IMPL_CLASS_MASK) != 0
+ | fileType == GENERATE_INTERFACE_WITH_BUILDER) {
+
+ /**
+ * Create builder class file.
+ */
+ setBuilderClassJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX)));
+ setBuilderClassJavaFileHandle(generateBuilderClassFile(getBuilderClassJavaFileHandle(), imports, curNode));
+ /**
+ * Create impl class file.
+ */
+ setImplClassJavaFileHandle(getJavaFileHandle(getJavaClassName(IMPL_CLASS_FILE_NAME_SUFFIX)));
+ setImplClassJavaFileHandle(generateImplClassFile(getImplClassJavaFileHandle(), curNode));
+ /**
+ * Append impl class to builder class and close it.
+ */
+ mergeJavaFiles(getImplClassJavaFileHandle(), getBuilderClassJavaFileHandle());
+ insertDataIntoJavaFile(getBuilderClassJavaFileHandle(), JavaCodeSnippetGen.getJavaClassDefClose());
+
+ }
+
+ /**
+ * Creates type def class file.
+ */
+ if ((fileType & GENERATE_TYPEDEF_CLASS) != 0) {
+ setTypedefClassJavaFileHandle(getJavaFileHandle(getJavaClassName(TYPEDEF_CLASS_FILE_NAME_SUFFIX)));
+ setTypedefClassJavaFileHandle(generateTypeDefClassFile(getTypedefClassJavaFileHandle(), curNode, imports));
+ }
+
+ /**
+ * Close all the file handles.
+ */
+ close();
+ }
+
+ /**
* Removes all temporary file handles.
*
* @throws IOException when failed to delete the temporary files
*/
- public void close() throws IOException {
+ private void close() throws IOException {
+
+ closeFile(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
+
+ closeFile(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX));
+ getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)).delete();
+
+ closeFile(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX));
+
+ closeFile(getJavaClassName(IMPL_CLASS_FILE_NAME_SUFFIX));
+ getJavaFileHandle(getJavaClassName(IMPL_CLASS_FILE_NAME_SUFFIX)).delete();
+
+ closeFile(getJavaClassName(TYPEDEF_CLASS_FILE_NAME_SUFFIX));
closeFile(GETTER_METHOD_FILE_NAME);
getTemporaryFileHandle(GETTER_METHOD_FILE_NAME).delete();
@@ -859,6 +1308,7 @@
closeFile(EQUALS_METHOD_FILE_NAME);
getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME).delete();
+ clean(getTempDirPath());
}
/**