YANG Translator optimization
Change-Id: Ie6a6b9d371a4fc5fd973cf56d6f3c7b44a3146ba
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 221f757..ab537c8 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
@@ -16,36 +16,55 @@
package org.onosproject.yangutils.translator.tojava.utils;
-import static org.onosproject.yangutils.translator.GeneratedFileType.BUILDER_CLASS_MASK;
-import static org.onosproject.yangutils.translator.GeneratedFileType.BUILDER_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.GeneratedFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.GeneratedFileType.IMPL_CLASS_MASK;
-import static org.onosproject.yangutils.translator.GeneratedFileType.INTERFACE_MASK;
-import static org.slf4j.LoggerFactory.getLogger;
-
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
-import org.onosproject.yangutils.translator.CachedFileHandle;
-import org.onosproject.yangutils.translator.tojava.AttributeInfo;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
import org.onosproject.yangutils.utils.UtilConstants;
import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
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 org.onosproject.yangutils.utils.io.impl.YangIoUtils;
-import org.slf4j.Logger;
+
+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_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;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
+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.JavaIdentifierSyntax.getCaptialCase;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
+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.getToStringMethodClose;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
/**
* Generates java file.
*/
public final class JavaFileGenerator {
- private static final Logger log = getLogger(JavaFileGenerator.class);
-
/**
* Default constructor.
*/
@@ -61,42 +80,37 @@
* @param handle cached file handle
* @return file object
*/
- public static File getFileObject(String filePath, String fileName, String extension, CachedFileHandle handle) {
- return new File(handle.getCodeGenFilePath() + filePath + File.separator + fileName + extension);
+ public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
+
+ return new File(handle.getBaseCodeGenPath() + filePath + File.separator + fileName + extension);
}
/**
* Returns generated interface file for current node.
*
* @param file file
- * @param className class name
* @param imports imports for the file
- * @param attrList attribute info
- * @param pkg generated file package
- * @param handle cached file handle
+ * @param curNode current YANG node
* @return interface file
* @throws IOException when fails to write in file
*/
- public static File generateInterfaceFile(File file, String className, List<String> imports,
- List<AttributeInfo> attrList, String pkg, CachedFileHandle handle) throws IOException {
- String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
- initiateFile(file, className, INTERFACE_MASK, imports, pkg);
+ public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode) throws IOException {
- if (!attrList.isEmpty()) {
- List<String> methods = new ArrayList<>();
- try {
- methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS, className, path));
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
- }
+ JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
- /**
- * Add getter methods to interface file.
- */
- for (String method : methods) {
- appendMethod(file, method);
- }
+ String className = getCaptialCase(javaFileInfo.getJavaName());
+ String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
+
+ initiateFile(file, className, INTERFACE_MASK, imports, path);
+
+ /**
+ * Add getter methods to interface file.
+ */
+ try {
+ appendMethod(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
+ } catch (IOException e) {
+ throw new IOException("No data found in temporary java code fragment files for " + className
+ + " while interface file generation");
}
return file;
}
@@ -105,39 +119,41 @@
* Return generated builder interface file for current node.
*
* @param file file
- * @param className class name
- * @param pkg generated file package
- * @param attrList attribute info
- * @param handle cached file handle
+ * @param curNode current YANG node
* @return builder interface file
* @throws IOException when fails to write in file
*/
- public static File generateBuilderInterfaceFile(File file, String className, String pkg,
- List<AttributeInfo> attrList, CachedFileHandle handle) throws IOException {
- String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
- initiateFile(file, className, BUILDER_INTERFACE_MASK, null, pkg);
+ public static File generateBuilderInterfaceFile(File file, YangNode curNode) throws IOException {
+
+ JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
+
+ String className = getCaptialCase(javaFileInfo.getJavaName());
+ String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
+
+ initiateFile(file, className, BUILDER_INTERFACE_MASK, null, path);
List<String> methods = new ArrayList<>();
- if (!attrList.isEmpty()) {
-
- try {
- methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS, className, path));
- methods.add(handle.getTempData(TempDataStoreTypes.SETTER_METHODS, className, path));
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
- }
+ try {
+ methods.add(UtilConstants.FOUR_SPACE_INDENTATION
+ + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
+ methods.add(UtilConstants.NEW_LINE);
+ methods.add(UtilConstants.FOUR_SPACE_INDENTATION
+ + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK, curNode));
+ } catch (IOException e) {
+ throw new IOException("No data found in temporary java code fragment files for " + className
+ + " while builder interface file generation");
}
+
/**
* Add build method to builder interface file.
*/
- methods.add(MethodsGenerator.parseBuilderInterfaceBuildMethodString(className));
+ methods.add(parseBuilderInterfaceBuildMethodString(className));
/**
* Add getters and setters in builder interface.
*/
for (String method : methods) {
- appendMethod(file, UtilConstants.FOUR_SPACE_INDENTATION + method);
+ appendMethod(file, method);
}
insert(file, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
@@ -148,61 +164,53 @@
* Returns generated builder class file for current node.
*
* @param file file
- * @param className class name
* @param imports imports for the file
- * @param pkg generated file package
- * @param attrList attribute info
- * @param handle cached file handle
+ * @param curNode current YANG node
* @return builder class file
* @throws IOException when fails to write in file
*/
- public static File generateBuilderClassFile(File file, String className, List<String> imports, String pkg,
- List<AttributeInfo> attrList, CachedFileHandle handle) throws IOException {
- String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
- initiateFile(file, className, BUILDER_CLASS_MASK, imports, pkg);
+ public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode) throws IOException {
+
+ JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
+
+ String className = getCaptialCase(javaFileInfo.getJavaName());
+ String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
+
+ initiateFile(file, className, BUILDER_CLASS_MASK, imports, path);
List<String> methods = new ArrayList<>();
- if (!attrList.isEmpty()) {
- /**
- * Add attribute strings.
- */
- List<String> attributes = new ArrayList<>();
- try {
- attributes.add(handle.getTempData(TempDataStoreTypes.ATTRIBUTE, className, path));
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
- }
- /**
- * Add attributes to the file.
- */
- for (String attribute : attributes) {
- insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
- }
- try {
- methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS_IMPL, className, path));
- methods.add(handle.getTempData(TempDataStoreTypes.SETTER_METHODS_IMPL, className, path));
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
- }
-
+ /**
+ * Add attribute strings.
+ */
+ try {
+ insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
+ } catch (IOException e) {
+ throw new IOException("No data found in temporary java code fragment files for " + className
+ + " while builder class file generation");
}
+
+ try {
+ methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
+ methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK, curNode) + UtilConstants.NEW_LINE);
+ } catch (IOException e) {
+ throw new IOException("No data found in temporary java code fragment files for " + className
+ + " while builder class file generation");
+ }
+
/**
* Add default constructor and build method impl.
*/
- methods.add(
- UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
- + MethodsGenerator.getDefaultConstructorString(className + UtilConstants.BUILDER,
- UtilConstants.PUBLIC));
- methods.add(MethodsGenerator.getBuildString(className));
+ methods.add(getBuildString(className) + UtilConstants.NEW_LINE);
+ methods.add(UtilConstants.NEW_LINE
+ + getDefaultConstructorString(className + UtilConstants.BUILDER, UtilConstants.PUBLIC));
/**
* Add methods in builder class.
*/
for (String method : methods) {
- appendMethod(file, method + UtilConstants.NEW_LINE);
+ appendMethod(file, method);
}
return file;
}
@@ -211,67 +219,59 @@
* Returns generated impl class file for current node.
*
* @param file file
- * @param className class name
- * @param pkg generated file package
- * @param attrList attribute's info
- * @param handle cached file handle
+ * @param curNode current YANG node
* @return impl class file
* @throws IOException when fails to write in file
*/
- public static File generateImplClassFile(File file, String className, String pkg, List<AttributeInfo> attrList,
- CachedFileHandle handle)
- throws IOException {
- String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
+ public static File generateImplClassFile(File file, YangNode curNode)
+ throws IOException {
+
+ JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
+
+ String className = getCaptialCase(javaFileInfo.getJavaName());
+ String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
+
initiateFile(file, className, IMPL_CLASS_MASK, null, path);
List<String> methods = new ArrayList<>();
- if (!attrList.isEmpty()) {
- List<String> attributes = new ArrayList<>();
- try {
- attributes.add(handle.getTempData(TempDataStoreTypes.ATTRIBUTE, className, path));
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
- }
- /**
- * Add attributes to the file.
- */
- for (String attribute : attributes) {
- insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
- }
+ /**
+ * Add attribute strings.
+ */
+ try {
+ insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
+ } catch (IOException e) {
+ throw new IOException("No data found in temporary java code fragment files for " + className
+ + " while impl class file generation");
+ }
- try {
+ insert(file, UtilConstants.NEW_LINE);
+ try {
- methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS_IMPL, className, path));
+ methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
- methods.add(MethodsGenerator.getHashCodeMethodClose(MethodsGenerator.getHashCodeMethodOpen()
- + YangIoUtils
- .partString(handle.getTempData(TempDataStoreTypes.HASH_CODE, className, path).replace(
- UtilConstants.NEW_LINE, ""))));
+ methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
+ getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(UtilConstants.NEW_LINE,
+ UtilConstants.EMPTY_STRING))));
- methods.add(MethodsGenerator
- .getEqualsMethodClose(MethodsGenerator.getEqualsMethodOpen(className + UtilConstants.IMPL)
- + handle.getTempData(TempDataStoreTypes.EQUALS, className, path)));
+ methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + UtilConstants.IMPL)
+ + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
- methods.add(MethodsGenerator.getToStringMethodOpen()
- + handle.getTempData(TempDataStoreTypes.TO_STRING, className, path)
- + MethodsGenerator.getToStringMethodClose());
+ methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
+ + getToStringMethodClose());
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
- }
-
+ } catch (IOException e) {
+ throw new IOException("No data found in temporary java code fragment files for " + className
+ + " while impl class file generation");
}
try {
- methods.add(getConstructorString(className)
- + handle.getTempData(TempDataStoreTypes.CONSTRUCTOR, className, path)
+ methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK, curNode)
+ UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET);
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
+ } catch (IOException e) {
+ throw new IOException("No data found in temporary java code fragment files for " + className
+ + " while impl class file generation");
}
/**
* Add methods in impl class.
@@ -285,56 +285,48 @@
}
/**
- * Generate class file for type def.
+ * Return data stored in temporary files.
*
- * @param file generated file
- * @param className file name
- * @param imports imports for file
- * @param pkg package path
- * @param cachedAttributeList attribute list
- * @param handle cached file handle
- * @return type def class file
- * @throws IOException when fails to generate class file
+ * @param curNode current YANG node
+ * @param generatedTempFiles mask for the types of files being generated
+ * @return data stored in temporary files
+ * @throws IOException when failed to get the data from temporary file
+ * handle
*/
- public static File generateTypeDefClassFile(File file, String className, List<String> imports,
- String pkg, List<AttributeInfo> cachedAttributeList, CachedFileHandle handle) throws IOException {
- String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
- initiateFile(file, className, GENERATE_TYPEDEF_CLASS, imports, pkg);
+ private static String getDataFromTempFileHandle(int generatedTempFiles, YangNode curNode) throws IOException {
- List<String> typeDef = new ArrayList<>();
- try {
- typeDef.add(handle.getTempData(TempDataStoreTypes.TYPE_DEF, className, path));
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
- throw new IOException("Fail to read data from temp file.");
+ TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((HasTempJavaCodeFragmentFiles) curNode)
+ .getTempJavaCodeFragmentFiles();
+
+ if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getAttributesTempFileHandle());
+ } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getGetterInterfaceTempFileHandle());
+ } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getSetterInterfaceTempFileHandle());
+ } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getGetterImplTempFileHandle());
+ } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getSetterImplTempFileHandle());
+ } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getConstructorImplTempFileHandle());
+ } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getHashCodeImplTempFileHandle());
+ } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getEqualsImplTempFileHandle());
+ } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
+ return tempJavaCodeFragmentFiles
+ .getTemporaryDataFromFileHandle(tempJavaCodeFragmentFiles.getToStringImplTempFileHandle());
}
-
- /**
- * Add attributes to the file.
- */
- for (String attribute : typeDef) {
- insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
- }
-
- return file;
- }
-
- /**
- * Returns constructor string for impl class.
- *
- * @param yangName class name
- * @return constructor string
- */
- private static String getConstructorString(String yangName) {
-
- String builderAttribute = yangName.substring(0, 1).toLowerCase() + yangName.substring(1);
- String javadoc = MethodsGenerator.getConstructorString(yangName);
- String constructor = UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
- + yangName + UtilConstants.IMPL + UtilConstants.OPEN_PARENTHESIS + yangName + UtilConstants.BUILDER
- + UtilConstants.SPACE + builderAttribute + UtilConstants.BUILDER + UtilConstants.OBJECT
- + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET
- + UtilConstants.NEW_LINE;
- return javadoc + constructor;
+ return null;
}
/**
@@ -349,6 +341,7 @@
*/
private static void initiateFile(File file, String className, int type, List<String> imports,
String pkg) throws IOException {
+
try {
file.createNewFile();
appendContents(file, className, type, imports, pkg);
@@ -365,6 +358,7 @@
* @throws IOException when fails to append contents
*/
public static void appendFileContents(File appendFile, File srcFile) throws IOException {
+
try {
FileSystemUtil.appendFileContents(appendFile, srcFile);
} catch (IOException e) {
@@ -377,184 +371,14 @@
*
* @param file file in which method needs to be appended
* @param method method which needs to be appended
+ * @throws IOException IO operation failure
*/
private static void appendMethod(File file, String method) throws IOException {
+
insert(file, method);
}
/**
- * Closes the current generated file.
- *
- * @param fileType generate file type
- * @param yangName file name
- * @return end of class definition string
- */
- public static String closeFile(int fileType, String yangName) {
- return JavaCodeSnippetGen.getJavaClassDefClose(fileType, yangName);
- }
-
- /**
- * Parses attribute info and fetch specific data and creates serialized
- * files of it.
- *
- * @param attr attribute info.
- * @param genFileType generated file type
- * @param className class name
- * @param path file path
- * @param handle cached file handle
- */
- public static void parseAttributeInfo(AttributeInfo attr, int genFileType, String className, String path,
- CachedFileHandle handle) {
-
- String attrString = "";
-
- String getterString = "";
- String getterImplString = "";
-
- String setterString = "";
- String setterImplString = "";
-
- String constructorString = "";
- String typeDefString = "";
-
- String toString = "";
- String hashCodeString = "";
- String equalsString = "";
-
- className = JavaIdentifierSyntax.getCaptialCase(className);
-
- try {
- /*
- * Get the attribute definition and save attributes to temporary
- * file.
- */
-
- boolean isList = attr.isListAttr();
- String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
- if (attr.isQualifiedName()) {
- attrString = JavaCodeSnippetGen.getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
- attr.getImportInfo().getClassInfo(),
- attributeName, attr.isListAttr());
- } else {
- attrString = JavaCodeSnippetGen.getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(),
- attributeName, attr.isListAttr());
- }
- handle.setTempData(attrString + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION,
- TempDataStoreTypes.ATTRIBUTE, className,
- path);
-
- if ((genFileType & INTERFACE_MASK) != 0) {
- getterString = MethodsGenerator.getGetterString(attr);
- handle.setTempData(getterString + UtilConstants.NEW_LINE,
- TempDataStoreTypes.GETTER_METHODS,
- className,
- path);
-
- }
-
- if ((genFileType & BUILDER_INTERFACE_MASK) != 0) {
- setterString = MethodsGenerator.getSetterString(attr, className);
- handle.setTempData(setterString + UtilConstants.NEW_LINE,
- TempDataStoreTypes.SETTER_METHODS,
- className,
- path);
- }
-
- if ((genFileType & BUILDER_CLASS_MASK) != 0) {
- getterImplString = MethodsGenerator.getGetterForClass(attr);
- handle.setTempData(
- MethodsGenerator.getOverRideString() + getterImplString + UtilConstants.NEW_LINE,
- TempDataStoreTypes.GETTER_METHODS_IMPL, className,
- path);
- setterImplString = MethodsGenerator.getSetterForClass(attr, className);
- handle.setTempData(
- MethodsGenerator.getOverRideString() + setterImplString + UtilConstants.NEW_LINE,
- TempDataStoreTypes.SETTER_METHODS_IMPL, className,
- path);
- }
-
- if ((genFileType & IMPL_CLASS_MASK) != 0) {
- constructorString = MethodsGenerator.getConstructor(className, attr);
- handle.setTempData(constructorString, TempDataStoreTypes.CONSTRUCTOR, className,
- path);
-
- hashCodeString = MethodsGenerator.getHashCodeMethod(attr);
- handle.setTempData(hashCodeString + UtilConstants.NEW_LINE,
- TempDataStoreTypes.HASH_CODE,
- className,
- path);
- equalsString = MethodsGenerator.getEqualsMethod(attr);
- handle.setTempData(equalsString + UtilConstants.NEW_LINE,
- TempDataStoreTypes.EQUALS,
- className,
- path);
-
- toString = MethodsGenerator.getToStringMethod(attr);
- handle.setTempData(toString + UtilConstants.NEW_LINE,
- TempDataStoreTypes.TO_STRING,
- className,
- path);
-
- }
-
- if ((genFileType & GENERATE_TYPEDEF_CLASS) != 0) {
-
- if (attr.isQualifiedName()) {
- typeDefString = JavaCodeSnippetGen.getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
- attr.getImportInfo().getClassInfo(),
- attributeName, attr.isListAttr()) + UtilConstants.NEW_LINE;
- } else {
- typeDefString = JavaCodeSnippetGen.getJavaAttributeDefination(null,
- attr.getImportInfo().getClassInfo(),
- attributeName, attr.isListAttr()) + UtilConstants.NEW_LINE;
- }
-
- typeDefString = typeDefString + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
- + UtilConstants.JAVA_DOC_FIRST_LINE;
-
- typeDefString = typeDefString
- + MethodsGenerator.getDefaultConstructorString(className, UtilConstants.PRIVATE)
- + UtilConstants.NEW_LINE;
-
- typeDefString = typeDefString
- + JavaDocGen.getJavaDoc(JavaDocType.TYPE_DEF_CONSTRUCTOR, className, isList)
- + MethodsGenerator.getTypeDefConstructor(attr, className)
- + UtilConstants.NEW_LINE;
-
- typeDefString = typeDefString + JavaDocGen.getJavaDoc(JavaDocType.OF, className, isList)
- + MethodsGenerator.getOfMethod(className, attr) + UtilConstants.NEW_LINE;
-
- typeDefString = typeDefString + JavaDocGen.getJavaDoc(JavaDocType.GETTER, className, isList)
- + MethodsGenerator.getGetterForClass(attr) + UtilConstants.NEW_LINE;
-
- typeDefString = typeDefString + JavaDocGen.getJavaDoc(JavaDocType.TYPE_DEF_SETTER, className, isList)
- + MethodsGenerator.getSetterForTypeDefClass(attr)
- + UtilConstants.NEW_LINE;
-
- hashCodeString = MethodsGenerator.getHashCodeMethodOpen()
- + YangIoUtils.partString(
- MethodsGenerator.getHashCodeMethod(attr).replace(UtilConstants.NEW_LINE, ""));
- hashCodeString = MethodsGenerator.getHashCodeMethodClose(hashCodeString) + UtilConstants.NEW_LINE;
-
- equalsString = MethodsGenerator.getEqualsMethodOpen(className) + UtilConstants.NEW_LINE
- + MethodsGenerator.getEqualsMethod(attr);
- equalsString = MethodsGenerator.getEqualsMethodClose(equalsString) + UtilConstants.NEW_LINE;
-
- toString = MethodsGenerator.getToStringMethodOpen()
- + MethodsGenerator.getToStringMethod(attr) + UtilConstants.NEW_LINE
- + MethodsGenerator.getToStringMethodClose()
- + UtilConstants.NEW_LINE;
- typeDefString = typeDefString + hashCodeString + equalsString + toString;
- handle.setTempData(typeDefString, TempDataStoreTypes.TYPE_DEF, className,
- path);
- }
- } catch (IOException e) {
- log.info("Failed to set data for " + attr.getAttributeName() + " in temp data files.");
- }
-
- }
-
- /**
* Appends all the contents into a generated java file.
*
* @param file generated file
@@ -567,10 +391,7 @@
private static void appendContents(File file, String fileName, int type, List<String> importsList,
String pkg) throws IOException {
- if (pkg.contains(UtilConstants.YANG_GEN_DIR)) {
- String[] strArray = pkg.split(UtilConstants.YANG_GEN_DIR);
- pkg = strArray[1].replace(UtilConstants.SLASH, UtilConstants.PERIOD);
- }
+ String pkgString = parsePackageString(pkg, importsList);
if ((type & IMPL_CLASS_MASK) != 0) {
@@ -579,38 +400,68 @@
write(file, fileName, type, JavaDocType.BUILDER_INTERFACE);
} else if ((type & GENERATE_TYPEDEF_CLASS) != 0) {
- insert(file, CopyrightHeader.getCopyrightHeader());
- insert(file, "package" + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE);
- if (importsList != null) {
- insert(file, UtilConstants.NEW_LINE);
- for (String imports : importsList) {
- insert(file, imports);
- }
- }
+ appendHeaderContents(file, pkgString, importsList);
write(file, fileName, type, JavaDocType.IMPL_CLASS);
- } else {
+ } else if ((type & INTERFACE_MASK) != 0) {
- if ((type & INTERFACE_MASK) != 0) {
- insert(file, CopyrightHeader.getCopyrightHeader());
- insert(file, "package" + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE);
- if (importsList != null) {
- insert(file, UtilConstants.NEW_LINE);
- for (String imports : importsList) {
- insert(file, imports);
- }
- }
- write(file, fileName, type, JavaDocType.INTERFACE);
- } else if ((type & BUILDER_CLASS_MASK) != 0) {
- insert(file, CopyrightHeader.getCopyrightHeader());
- insert(file, "package" + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE);
- if (importsList != null) {
- insert(file, UtilConstants.NEW_LINE);
- for (String imports : importsList) {
- insert(file, imports);
- }
- insert(file, UtilConstants.NEW_LINE);
- }
- write(file, fileName, type, JavaDocType.BUILDER_CLASS);
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, fileName, type, JavaDocType.INTERFACE);
+ } else if ((type & BUILDER_CLASS_MASK) != 0) {
+
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, fileName, type, JavaDocType.BUILDER_CLASS);
+ }
+ }
+
+ /**
+ * Removes base directory path from package and generates package string for
+ * file.
+ *
+ * @param pkg generated package
+ * @param importsList list of imports
+ * @return package string
+ */
+ private static String parsePackageString(String pkg, List<String> importsList) {
+
+ if (pkg.contains(UtilConstants.ORG)) {
+ String[] strArray = pkg.split(UtilConstants.ORG);
+ pkg = UtilConstants.ORG + strArray[1].replace(UtilConstants.SLASH, UtilConstants.PERIOD);
+ }
+ if (importsList != null) {
+ if (!importsList.isEmpty()) {
+ return UtilConstants.PACKAGE + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE;
+ } else {
+ return UtilConstants.PACKAGE + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN;
+ }
+ } else {
+ return UtilConstants.PACKAGE + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN;
+ }
+ }
+
+ /**
+ * Appends other contents to interface, builder and typedef classes. for
+ * example : ONOS copyright, imports and package.
+ *
+ * @param file generated file
+ * @param pkg generated package
+ * @param importsList list of imports
+ * @throws IOException when fails to append contents.
+ */
+ private static void appendHeaderContents(File file, String pkg, List<String> importsList) throws IOException {
+
+ insert(file, CopyrightHeader.getCopyrightHeader());
+ insert(file, pkg);
+
+ /*
+ * TODO: add the file header using
+ * JavaCodeSnippetGen.getFileHeaderComment
+ */
+
+ if (importsList != null) {
+ insert(file, UtilConstants.NEW_LINE);
+ for (String imports : importsList) {
+ insert(file, imports);
}
}
}
@@ -639,6 +490,7 @@
* @throws IOException when fails to insert into file
*/
public static void insert(File file, String data) throws IOException {
+
try {
FileSystemUtil.updateFileHandle(file, data, false);
} catch (IOException e) {
@@ -653,6 +505,7 @@
* @throws IOException when failed to close the file handle
*/
public static void closeFileHandles(File file) throws IOException {
+
try {
FileSystemUtil.updateFileHandle(file, null, true);
} catch (IOException e) {
@@ -666,6 +519,7 @@
* @param file file to be removed
*/
public static void clean(File file) {
+
if (file.exists()) {
file.delete();
}
@@ -678,6 +532,7 @@
* @throws IOException when fails to delete the directory
*/
public static void cleanTempFiles(File tempDir) throws IOException {
+
FileUtils.deleteDirectory(tempDir);
}
}