[ONOS-3908] YANG container translator.
Change-Id: I4e239509df747238905ca0995f41019679093627
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java b/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
index c38bbbc..99baf4a 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -26,6 +26,7 @@
import org.onosproject.yangutils.translator.CachedFileHandle;
import org.onosproject.yangutils.translator.GeneratedFileType;
import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
+import org.onosproject.yangutils.utils.UtilConstants;
import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
/*-
* Reference RFC 6020.
@@ -472,17 +473,21 @@
@Override
public void generateJavaCodeEntry() throws IOException {
YangNode parent = getParent();
- String modPkg = JavaIdentifierSyntax.getPackageFromParent(parent.getPackage(), getName());
- setPackage(modPkg);
+ String contPkg = JavaIdentifierSyntax.getPackageFromParent(parent.getPackage(), parent.getName());
+ setPackage(contPkg);
CachedFileHandle handle = null;
try {
- FileSystemUtil.createPackage(getPackage(), getName());
+ FileSystemUtil.createPackage(UtilConstants.YANG_GEN_DIR + getPackage(), getName());
handle = FileSystemUtil.createSourceFiles(getPackage(), getName(), GeneratedFileType.ALL);
+ handle.setFilePath(UtilConstants.YANG_GEN_DIR + getPackage().replace(".", "/"));
} catch (IOException e) {
throw new IOException("Failed to create the source files.");
}
setFileHandle(handle);
+
+ addLeavesAttributes();
+ addLeafListAttributes();
addAttributeInParent();
}
@@ -498,8 +503,6 @@
@Override
public void generateJavaCodeExit() throws IOException {
- addLeavesAttributes();
- addLeafListAttributes();
getFileHandle().close();
return;
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
index 836ad77..8eda617 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
@@ -26,6 +26,7 @@
import org.onosproject.yangutils.translator.CodeGenerator;
import org.onosproject.yangutils.translator.GeneratedFileType;
import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
+import org.onosproject.yangutils.utils.UtilConstants;
import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
/*-
@@ -558,18 +559,19 @@
CachedFileHandle handle = null;
try {
- FileSystemUtil.createPackage(getPackage(), getName());
+ FileSystemUtil.createPackage(UtilConstants.YANG_GEN_DIR + getPackage(), getName());
handle = FileSystemUtil.createSourceFiles(getPackage(), getName(), GeneratedFileType.ALL);
+ handle.setFilePath(UtilConstants.YANG_GEN_DIR + getPackage().replace(".", "/"));
} catch (IOException e) {
throw new IOException("Failed to create the source files.");
}
setFileHandle(handle);
+ addLeavesAttributes();
+ addLeafListAttributes();
}
@Override
public void generateJavaCodeExit() throws IOException {
- addLeavesAttributes();
- addLeafListAttributes();
getFileHandle().close();
return;
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java b/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java
index b73b821..4d7e51b 100644
--- a/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java
+++ b/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java
@@ -49,4 +49,11 @@
* @param pkg child's package path
*/
void setChildsPackage(String pkg);
+
+ /**
+ * Sets directory package path for code generation.
+ *
+ * @param filePath directory package path for code generation
+ */
+ void setFilePath(String filePath);
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java b/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java
index c61c96c..f2c1562 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java
@@ -19,6 +19,7 @@
import java.io.Serializable;
import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.translator.tojava.utils.AttributesJavaDataType;
/**
* Maintains the attribute info corresponding to class/interface generated.
@@ -71,7 +72,10 @@
* @param type the data type info of attribute.
*/
public void setAttributeType(YangType<?> type) {
- attrType = type;
+
+ if (type != null) {
+ attrType = AttributesJavaDataType.getJavaDataType(type);
+ }
}
/**
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java b/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java
index ac917aa..c6fcea4 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java
@@ -27,26 +27,18 @@
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.translator.CachedFileHandle;
import org.onosproject.yangutils.translator.GeneratedFileType;
+import org.onosproject.yangutils.translator.tojava.utils.AttributesJavaDataType;
import org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen;
+import org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator;
import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
import org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator;
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.SerializedDataStore;
-import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
-import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
-
-import static org.slf4j.LoggerFactory.getLogger;
-import org.slf4j.Logger;
/**
* Maintain the information about the java file to be generated.
*/
public class CachedJavaFileHandle implements CachedFileHandle {
- private static final Logger log = getLogger(CachedJavaFileHandle.class);
-
private static final int MAX_CACHABLE_ATTR = 64;
private static final String JAVA_FILE_EXTENSION = ".java";
private static final String TEMP_FILE_EXTENSION = ".tmp";
@@ -58,12 +50,6 @@
private GeneratedFileType genFileTypes;
/**
- * The type(s) of java method to be generated when the cached file handle is
- * closed.
- */
- private GeneratedMethodTypes genMethodTypes;
-
- /**
* Java package in which the class/interface needs to be generated.
*/
private String pkg;
@@ -90,9 +76,14 @@
private List<AttributeInfo> attributeList;
/**
+ * File generation directory path.
+ */
+ private String filePath;
+
+ /**
* Prevent invoking default constructor.
*/
- private CachedJavaFileHandle() {
+ public CachedJavaFileHandle() {
setCachedAttributeList(new LinkedList<AttributeInfo>());
}
@@ -106,16 +97,9 @@
* @throws IOException file IO exception.
*/
public CachedJavaFileHandle(String pcg, String yangName, GeneratedFileType types) throws IOException {
- if ((new File(pcg).exists())) {
- setGeneratedFileTypes(types);
- setPackage(pcg);
- setYangName(yangName);
- } else {
- FileSystemUtil.createPackage(pcg, yangName);
- setGeneratedFileTypes(types);
- setPackage(pcg);
- setYangName(yangName);
- }
+ setGeneratedFileTypes(types);
+ setPackage(pcg);
+ setYangName(yangName);
}
/**
@@ -185,11 +169,6 @@
return childsPkg;
}
- /**
- * Set the java package.
- *
- * @param pcg the package to set
- */
@Override
public void setChildsPackage(String pcg) {
childsPkg = pcg;
@@ -251,13 +230,27 @@
attributeList = attrList;
}
+ @Override
+ public void setFilePath(String path) {
+ filePath = path;
+ }
+
+ /**
+ * Set the cached attribute list.
+ *
+ * @param attrList attribute list.
+ */
+ private String getFilePath() {
+ return filePath;
+ }
+
/**
* Flush the cached attribute list to the serialized file.
*/
- private void flushCacheAttrToSerFile() {
+ private void flushCacheAttrToSerFile(String className) {
for (AttributeInfo attr : getCachedAttributeList()) {
- parseAttributeInfo(attr);
+ JavaFileGenerator.parseAttributeInfo(attr, getGeneratedFileTypes(), className);
}
/*
@@ -279,10 +272,6 @@
AttributeInfo newAttr = new AttributeInfo();
if (attrType != null) {
- attrType.setDataTypeName(attrType.getDataTypeName().replace("\"", ""));
- if (attrType.getDataTypeName().equals("string")) {
- attrType.setDataTypeName(JavaIdentifierSyntax.getCaptialCase(attrType.getDataTypeName()));
- }
newAttr.setAttributeType(attrType);
} else {
ImportInfo importInfo = new ImportInfo();
@@ -301,6 +290,10 @@
newAttr.setAttributeName(name);
newAttr.setListAttr(isListAttr);
+ if (newAttr.isListAttr()) {
+ newAttr.setAttributeType(AttributesJavaDataType.getListString(newAttr));
+ }
+
if (isListAttr) {
String listImport = UtilConstants.COLLECTION_IMPORTS + UtilConstants.LIST + UtilConstants.SEMI_COLAN
+ UtilConstants.NEW_LINE + UtilConstants.NEW_LINE;
@@ -317,7 +310,7 @@
if (getCachedAttributeList() != null) {
if (getCachedAttributeList().size() == MAX_CACHABLE_ATTR) {
- flushCacheAttrToSerFile();
+ flushCacheAttrToSerFile(getYangName());
}
getCachedAttributeList().add(newAttr);
} else {
@@ -361,89 +354,19 @@
String className = getYangName();
className = JavaIdentifierSyntax.getCaptialCase(className);
- String packagePath = getPackage();
- String filePath = UtilConstants.YANG_GEN_DIR + packagePath.replace(".", "/");
+ String filePath = getFilePath();
GeneratedFileType fileType = getGeneratedFileTypes();
- /**
- * Create interface file.
- */
- String interfaceFileName = className + JAVA_FILE_EXTENSION;
- File interfaceFile = new File(filePath + File.separator + interfaceFileName);
-
- /**
- * Create temp builder interface file.
- */
- String builderInterfaceFileName = interfaceFileName + TEMP_FILE_EXTENSION;
- File builderInterfaceFile = new File(filePath + File.separator + builderInterfaceFileName);
-
- /**
- * Create builder class file.
- */
- String builderFileName = className + UtilConstants.BUILDER + JAVA_FILE_EXTENSION;
- File builderFile = new File(filePath + File.separator + builderFileName);
- MethodsGenerator.setBuilderClassName(className + UtilConstants.BUILDER);
-
- /**
- * Create temp impl class file.
- */
-
- String implFileName = className + UtilConstants.IMPL + TEMP_FILE_EXTENSION;
- File implTempFile = new File(filePath + File.separator + implFileName);
-
/*
* TODO: add the file header using
* JavaCodeSnippetGen.getFileHeaderComment
*/
- List<String> attributes = new LinkedList<>();
- List<String> interfaceMethods = new LinkedList<>();
- List<String> builderInterfaceMethods = new LinkedList<>();
- List<String> builderClassMethods = new LinkedList<>();
- List<String> implClassMethods = new LinkedList<>();
List<String> imports = new LinkedList<>();
- try {
- attributes = SerializedDataStore.getSerializeData(SerializedDataStore.SerializedDataStoreType.ATTRIBUTE);
-
- interfaceMethods = SerializedDataStore
- .getSerializeData(SerializedDataStore.SerializedDataStoreType.INTERFACE_METHODS);
-
- builderInterfaceMethods = SerializedDataStore
- .getSerializeData(SerializedDataStore.SerializedDataStoreType.BUILDER_INTERFACE_METHODS);
-
- builderClassMethods = SerializedDataStore
- .getSerializeData(SerializedDataStore.SerializedDataStoreType.BUILDER_METHODS);
-
- implClassMethods = SerializedDataStore
- .getSerializeData(SerializedDataStore.SerializedDataStoreType.IMPL_METHODS);
-
- imports = SerializedDataStore.getSerializeData(SerializedDataStore.SerializedDataStoreType.IMPORT);
- } catch (ClassNotFoundException | IOException e) {
- log.info("There is no attribute info of " + className + " YANG file in the serialized files.");
- }
-
if (getCachedAttributeList() != null) {
MethodsGenerator.setAttrInfo(getCachedAttributeList());
for (AttributeInfo attr : getCachedAttributeList()) {
- if (attr.isListAttr()) {
- String listString = JavaCodeSnippetGen.getListAttribute(attr.getAttributeType().getDataTypeName());
- @SuppressWarnings("rawtypes")
- YangType<?> type = new YangType();
- type.setDataTypeName(listString);
- attr.setAttributeType(type);
- }
-
- attributes.add(getAttributeString(attr));
-
- interfaceMethods.add(MethodsGenerator.getMethodString(attr, GeneratedFileType.INTERFACE));
-
- builderClassMethods.add(MethodsGenerator.getMethodString(attr, GeneratedFileType.BUILDER_CLASS));
-
- builderInterfaceMethods
- .add(MethodsGenerator.getMethodString(attr, GeneratedFileType.BUILDER_INTERFACE));
-
- implClassMethods.add(MethodsGenerator.getMethodString(attr, GeneratedFileType.IMPL));
if (getImportSet() != null) {
imports = new ArrayList<>(getImportSet());
@@ -451,288 +374,73 @@
}
}
- builderInterfaceMethods.add(MethodsGenerator.parseBuilderInterfaceBuildMethodString(className));
- builderClassMethods.add(UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
- + MethodsGenerator.getDefaultConstructorString(GeneratedFileType.BUILDER_CLASS, className));
- builderClassMethods.add(MethodsGenerator.getBuildString(className));
-
- implClassMethods.add(UtilConstants.JAVA_DOC_FIRST_LINE
- + MethodsGenerator.getDefaultConstructorString(GeneratedFileType.IMPL, className));
- implClassMethods.add(MethodsGenerator.getConstructorString(className));
-
/**
* Start generation of files.
*/
if (fileType.equals(GeneratedFileType.INTERFACE) || fileType.equals(GeneratedFileType.ALL)) {
- initiateFile(interfaceFile, className, GeneratedFileType.INTERFACE, imports);
+
+ /**
+ * Create interface file.
+ */
+ String interfaceFileName = className;
+ File interfaceFile = new File(filePath + File.separator + interfaceFileName + JAVA_FILE_EXTENSION);
+ interfaceFile = JavaFileGenerator.generateInterfaceFile(interfaceFile, className, imports,
+ getCachedAttributeList(), getPackage());
+
+ /**
+ * Create temp builder interface file.
+ */
+ String builderInterfaceFileName = className + UtilConstants.BUILDER + UtilConstants.INTERFACE;
+ File builderInterfaceFile = new File(
+ filePath + File.separator + builderInterfaceFileName + TEMP_FILE_EXTENSION);
+ builderInterfaceFile = JavaFileGenerator.generateBuilderInterfaceFile(builderInterfaceFile, className,
+ getPackage(), getCachedAttributeList());
+
+ /**
+ * Append builder interface file to interface file and close it.
+ */
+ JavaFileGenerator.appendFileContents(builderInterfaceFile, interfaceFile);
+ JavaFileGenerator.insert(interfaceFile,
+ JavaFileGenerator.closeFile(GeneratedFileType.INTERFACE, interfaceFileName));
+
+ /**
+ * Remove temp files.
+ */
+ JavaFileGenerator.clean(builderInterfaceFile);
}
if (fileType.equals(GeneratedFileType.BUILDER_CLASS) || fileType.equals(GeneratedFileType.ALL)) {
- initiateFile(builderFile, className, GeneratedFileType.BUILDER_CLASS, imports);
- }
- if (fileType.equals(GeneratedFileType.IMPL) || fileType.equals(GeneratedFileType.ALL)) {
- initiateFile(implTempFile, className, GeneratedFileType.IMPL, imports);
- }
-
- if (fileType.equals(GeneratedFileType.BUILDER_INTERFACE) || fileType.equals(GeneratedFileType.ALL)) {
- initiateFile(builderInterfaceFile, className, GeneratedFileType.BUILDER_INTERFACE, imports);
- }
-
- /**
- * Add attributes to the file.
- */
- for (String attribute : attributes) {
- insert(builderFile, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
- insert(implTempFile, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
- }
-
- insert(builderFile, UtilConstants.NEW_LINE);
- insert(implTempFile, UtilConstants.NEW_LINE);
-
- /**
- * Add getter methods to interface file.
- */
- for (String method : interfaceMethods) {
- appendMethod(interfaceFile, method + UtilConstants.NEW_LINE);
- }
-
- /**
- * Add getters and setters in builder interface.
- */
- for (String method : builderInterfaceMethods) {
- appendMethod(builderInterfaceFile, UtilConstants.FOUR_SPACE_INDENTATION + method + UtilConstants.NEW_LINE);
- }
-
- insert(builderInterfaceFile, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
- /**
- * Add methods in builder class.
- */
- for (String method : builderClassMethods) {
- appendMethod(builderFile, method + UtilConstants.NEW_LINE);
- }
-
- /**
- * Add methods in impl class.
- */
- for (String method : implClassMethods) {
- appendMethod(implTempFile, UtilConstants.FOUR_SPACE_INDENTATION + method + UtilConstants.NEW_LINE);
- }
-
- insert(implTempFile, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
-
- /**
- * Append builder interface file to interface file and close it.
- */
- appendFileContents(builderInterfaceFile, interfaceFile);
- insert(interfaceFile, closeFile(GeneratedFileType.INTERFACE, interfaceFileName));
-
- /**
- * Append impl class to builder class and close it.
- */
- appendFileContents(implTempFile, builderFile);
- insert(builderFile, closeFile(GeneratedFileType.BUILDER_CLASS, builderFileName));
-
- /**
- * Remove temp files.
- */
- clean(implTempFile);
- clean(builderInterfaceFile);
- }
-
- /**
- * Initiate generation of file based on generated file type.
- *
- * @param file generated file
- * @param className generated file class name
- * @param type generated file type
- * @param imports imports for the file
- * @throws IOException when fails to generate a file
- */
- private void initiateFile(File file, String className, GeneratedFileType type, List<String> imports)
- throws IOException {
- try {
- file.createNewFile();
- appendContents(file, className, type, imports);
- } catch (IOException e) {
- throw new IOException("Failed to create " + file.getName() + " class file.");
- }
- }
-
- /**
- * Appends the temp files to main files.
- *
- * @param appendFile temp file
- * @param srcFile main file
- */
- private static void appendFileContents(File appendFile, File srcFile) throws IOException {
- try {
- FileSystemUtil.appendFileContents(appendFile, srcFile);
- } catch (IOException e) {
- throw new IOException("Failed to append " + appendFile + " in " + srcFile);
- }
- }
-
- /**
- * Append methods to the generated files.
- *
- * @param file file in which method needs to be appended.
- * @param method method which needs to be appended.
- */
- 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.
- */
- private static String closeFile(GeneratedFileType 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.
- */
- private void parseAttributeInfo(AttributeInfo attr) {
-
- String attrString = "";
- String methodString = "";
- String getterString = "";
-
- try {
- /*
- * Serialize attributes.
+ /**
+ * Create builder class file.
*/
- attrString = getAttributeString(attr);
- attrString = attrString.replace("\"", "");
- SerializedDataStore.setSerializeData(attrString, SerializedDataStore.SerializedDataStoreType.ATTRIBUTE);
+ String builderFileName = className + UtilConstants.BUILDER;
+ File builderFile = new File(filePath + File.separator + builderFileName + JAVA_FILE_EXTENSION);
+ MethodsGenerator.setBuilderClassName(className + UtilConstants.BUILDER);
- if (getGeneratedFileTypes().equals(GeneratedFileType.ALL)) {
+ builderFile = JavaFileGenerator.generateBuilderClassFile(builderFile, className, imports, getPackage(),
+ getCachedAttributeList());
- methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.INTERFACE);
- SerializedDataStore.setSerializeData(methodString,
- SerializedDataStore.SerializedDataStoreType.INTERFACE_METHODS);
+ /**
+ * Create temp impl class file.
+ */
- methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.BUILDER_CLASS);
- SerializedDataStore.setSerializeData(methodString,
- SerializedDataStore.SerializedDataStoreType.BUILDER_METHODS);
+ String implFileName = className + UtilConstants.IMPL;
+ File implTempFile = new File(filePath + File.separator + implFileName + TEMP_FILE_EXTENSION);
+ implTempFile = JavaFileGenerator.generateImplClassFile(implTempFile, className, getPackage(),
+ getCachedAttributeList());
- methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.BUILDER_INTERFACE);
- SerializedDataStore.setSerializeData(methodString,
- SerializedDataStore.SerializedDataStoreType.BUILDER_INTERFACE_METHODS);
+ /**
+ * Append impl class to builder class and close it.
+ */
+ JavaFileGenerator.appendFileContents(implTempFile, builderFile);
+ JavaFileGenerator.insert(builderFile,
+ JavaFileGenerator.closeFile(GeneratedFileType.BUILDER_CLASS, builderFileName));
- methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.IMPL);
- SerializedDataStore.setSerializeData(methodString,
- SerializedDataStore.SerializedDataStoreType.IMPL_METHODS);
-
- } else if (getGeneratedFileTypes().equals(GeneratedFileType.INTERFACE)) {
-
- getterString = MethodsGenerator.getGetterString(attr);
- SerializedDataStore.setSerializeData(methodString,
- SerializedDataStore.SerializedDataStoreType.INTERFACE_METHODS);
- }
- } catch (IOException e) {
- log.info("Failed to get data for " + attr.getAttributeName() + " from serialized files.");
- }
- }
-
- /**
- * Returns attribute string.
- *
- * @param attr attribute info
- * @return attribute string
- */
- private String getAttributeString(AttributeInfo attr) {
- return JavaCodeSnippetGen.getJavaAttributeInfo(getGeneratedFileTypes(), attr.getAttributeName(),
- attr.getAttributeType());
- }
-
- /**
- * Appends all the contents into a generated java file.
- *
- * @param file generated file
- * @param fileName generated file name
- * @param type generated file type
- */
- private void appendContents(File file, String fileName, GeneratedFileType type, List<String> importsList)
- throws IOException {
-
- if (type.equals(GeneratedFileType.IMPL)) {
-
- write(file, fileName, type, JavaDocType.IMPL_CLASS);
- } else if (type.equals(GeneratedFileType.BUILDER_INTERFACE)) {
-
- write(file, fileName, type, JavaDocType.BUILDER_INTERFACE);
- } else {
-
- // TODO: handle imports for attributes.
-
- if (type.equals(GeneratedFileType.INTERFACE)) {
- insert(file, CopyrightHeader.getCopyrightHeader());
- insert(file, "package" + UtilConstants.SPACE + getPackage() + UtilConstants.SEMI_COLAN
- + UtilConstants.NEW_LINE + UtilConstants.NEW_LINE);
- for (String imports : importsList) {
- insert(file, imports);
- }
- insert(file, UtilConstants.NEW_LINE);
- write(file, fileName, type, JavaDocType.INTERFACE);
- } else if (type.equals(GeneratedFileType.BUILDER_CLASS)) {
- insert(file, CopyrightHeader.getCopyrightHeader());
- insert(file, "package" + UtilConstants.SPACE + getPackage() + UtilConstants.SEMI_COLAN
- + UtilConstants.NEW_LINE + UtilConstants.NEW_LINE);
- for (String imports : importsList) {
- insert(file, imports);
- }
- insert(file, UtilConstants.NEW_LINE);
- write(file, fileName, type, JavaDocType.BUILDER_CLASS);
- }
- }
- }
-
- /**
- * Write data to the specific generated file.
- *
- * @param file generated file
- * @param fileName file name
- * @param genType generated file type
- * @param javaDocType java doc type
- */
- private static void write(File file, String fileName, GeneratedFileType genType, JavaDocGen.JavaDocType javaDocType)
- throws IOException {
-
- insert(file, JavaDocGen.getJavaDoc(javaDocType, fileName));
- insert(file, JavaCodeSnippetGen.getJavaClassDefStart(genType, fileName));
- }
-
- /**
- * Insert in the generated file.
- *
- * @param file file in which need to be inserted.
- * @param data data which need to be inserted.
- */
- private static void insert(File file, String data) throws IOException {
- try {
- FileSystemUtil.insertStringInFile(file, data);
- } catch (IOException e) {
- throw new IOException("Failed to insert in " + file + "file");
- }
- }
-
- /**
- * Removes temp files.
- *
- * @param file file to be removed.
- */
- private static void clean(File file) {
- if (file.exists()) {
- file.delete();
+ /**
+ * Remove temp files.
+ */
+ JavaFileGenerator.clean(implTempFile);
}
}
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java
index 50b0d06..0c70747 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java
@@ -42,21 +42,22 @@
TraversalType curTraversal = TraversalType.ROOT;
while (!(curNode == null)) {
- if (curTraversal != TraversalType.PARENT || curTraversal == TraversalType.SIBILING) {
+ if (curTraversal != TraversalType.PARENT) {
curNode.generateJavaCodeEntry();
}
- if (curTraversal != TraversalType.PARENT && !(curNode.getChild() == null)) {
+ if (curTraversal != TraversalType.PARENT && (curNode.getChild() != null)) {
curTraversal = TraversalType.CHILD;
curNode = curNode.getChild();
- } else if (curTraversal == TraversalType.PARENT && !(curNode.getNextSibling() == null)) {
+ } else if ((curNode.getNextSibling() != null)) {
curNode.generateJavaCodeExit();
curTraversal = TraversalType.SIBILING;
curNode = curNode.getNextSibling();
} else {
- curNode.generateJavaCodeExit();
curTraversal = TraversalType.PARENT;
+ curNode.generateJavaCodeExit();
curNode = curNode.getParent();
}
}
+
}
}
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
new file mode 100644
index 0000000..e2d27ac
--- /dev/null
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.translator.tojava.utils;
+
+import org.onosproject.yangutils.datamodel.YangDataTypes;
+import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.translator.tojava.AttributeInfo;
+import org.onosproject.yangutils.utils.UtilConstants;
+
+/**
+ * Provides java data types corresponding to YANG type.
+ */
+public final class AttributesJavaDataType {
+
+ /**
+ * Default constructor.
+ */
+ private AttributesJavaDataType() {
+ }
+
+ /**
+ * Returns YANG type.
+ *
+ * @param yangType YANG type
+ * @return YANG type
+ */
+ public static YangType<?> getJavaDataType(YangType<?> yangType) {
+ yangType.setDataTypeName(yangType.getDataTypeName().replace("\"", ""));
+ if (yangType.getDataType() != null) {
+ yangType.setDataTypeName(parseYangDataType(yangType.getDataType()));
+ }
+ return yangType;
+ }
+
+ /**
+ * Returns list string as attribute name when attribute is a list.
+ *
+ * @param attr attribute info.
+ * @return list attribute
+ */
+ @SuppressWarnings("rawtypes")
+ public static YangType<?> getListString(AttributeInfo attr) {
+ String listString = JavaCodeSnippetGen.getListAttribute(attr.getAttributeType().getDataTypeName());
+ YangType<?> type = new YangType();
+ type.setDataTypeName(listString);
+ attr.setAttributeType(type);
+ return type;
+ }
+
+ /**
+ * Parses YANG data type and returns corresponding java data type.
+ *
+ * @param type YANG data type
+ * @return java data type
+ */
+ private static String parseYangDataType(YangDataTypes type) {
+ if (type.equals(YangDataTypes.INT8)) {
+ return UtilConstants.BYTE;
+ } else if (type.equals(YangDataTypes.INT16)) {
+ return UtilConstants.SHORT;
+ } else if (type.equals(YangDataTypes.INT32)) {
+ return UtilConstants.INT;
+ } else if (type.equals(YangDataTypes.INT64)) {
+ return UtilConstants.LONG;
+ } else if (type.equals(YangDataTypes.UINT8)) {
+ return UtilConstants.SHORT;
+ } else if (type.equals(YangDataTypes.UINT16)) {
+ return UtilConstants.INT;
+ } else if (type.equals(YangDataTypes.UINT32)) {
+ return UtilConstants.LONG;
+ } else if (type.equals(YangDataTypes.UINT64)) {
+ //TODO: BIGINTEGER.
+ } else if (type.equals(YangDataTypes.DECIMAL64)) {
+ //TODO: DECIMAL64.
+ } else if (type.equals(YangDataTypes.STRING)) {
+ return UtilConstants.STRING;
+ } else if (type.equals(YangDataTypes.BOOLEAN)) {
+ return UtilConstants.BOOLEAN;
+ } else if (type.equals(YangDataTypes.ENUMERATION)) {
+ //TODO: ENUMERATION.
+ } else if (type.equals(YangDataTypes.BITS)) {
+ //TODO:BITS
+ } else if (type.equals(YangDataTypes.BINARY)) {
+ //TODO:BINARY
+ } else if (type.equals(YangDataTypes.LEAFREF)) {
+ //TODO:LEAFREF
+ } else if (type.equals(YangDataTypes.IDENTITYREF)) {
+ //TODO:IDENTITYREF
+ } else if (type.equals(YangDataTypes.EMPTY)) {
+ //TODO:EMPTY
+ } else if (type.equals(YangDataTypes.UNION)) {
+ //TODO:UNION
+ } else if (type.equals(YangDataTypes.INSTANCE_IDENTIFIER)) {
+ //TODO:INSTANCE_IDENTIFIER
+ } else if (type.equals(YangDataTypes.DERIVED)) {
+ //TODO:DERIVED
+ }
+ return null;
+ }
+}
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 a470aef..e8bade3 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
@@ -16,9 +16,6 @@
package org.onosproject.yangutils.translator.tojava.utils;
-import java.util.List;
-import java.util.SortedSet;
-
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.translator.GeneratedFileType;
import org.onosproject.yangutils.translator.tojava.GeneratedMethodTypes;
@@ -50,17 +47,6 @@
}
/**
- * reorder the import list based on the ONOS import rules.
- *
- * @param importInfo the set of classes/interfaces to be imported.
- * @return string of import info.
- */
- public List<ImportInfo> sortImportOrder(SortedSet<ImportInfo> importInfo) {
- /* TODO: reorder the import list based on the ONOS import rules. */
- return null;
- }
-
- /**
* Get the textual java code information corresponding to the import list.
*
* @param importInfo import info.
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
new file mode 100644
index 0000000..60d8c2a
--- /dev/null
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -0,0 +1,453 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.translator.tojava.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.onosproject.yangutils.translator.GeneratedFileType;
+import org.onosproject.yangutils.translator.tojava.AttributeInfo;
+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.TempDataStore;
+import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
+import org.onosproject.yangutils.utils.io.impl.TempDataStore.TempDataStoreType;
+
+import static org.slf4j.LoggerFactory.getLogger;
+import org.slf4j.Logger;
+
+public final class JavaFileGenerator {
+
+ private static final Logger log = getLogger(JavaFileGenerator.class);
+
+ /**
+ * Default constructor.
+ */
+ private JavaFileGenerator() {
+ }
+
+ /**
+ * 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
+ * @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) throws IOException {
+
+ initiateFile(file, className, GeneratedFileType.INTERFACE, imports, pkg);
+ List<String> methods = getMethodStrings(TempDataStoreType.GETTER_METHODS, GeneratedFileType.INTERFACE,
+ className, file, attrList);
+
+ /**
+ * Add getter methods to interface file.
+ */
+ for (String method : methods) {
+ appendMethod(file, method);
+ }
+ return file;
+ }
+
+ /**
+ * Return generated builder interface file for current node.
+ * @param file file
+ * @param className class name
+ * @param pkg generated file package
+ * @param attrList attribute info
+ * @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) throws IOException {
+
+ initiateFile(file, className, GeneratedFileType.BUILDER_INTERFACE, null, pkg);
+ List<String> methods = getMethodStrings(TempDataStoreType.BUILDER_INTERFACE_METHODS,
+ GeneratedFileType.BUILDER_INTERFACE, className, file, attrList);
+
+ /**
+ * Add build method to builder interface file.
+ */
+ methods.add(MethodsGenerator.parseBuilderInterfaceBuildMethodString(className));
+
+ /**
+ * Add getters and setters in builder interface.
+ */
+ for (String method : methods) {
+ appendMethod(file, UtilConstants.FOUR_SPACE_INDENTATION + method + UtilConstants.NEW_LINE);
+ }
+
+ insert(file, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
+ return file;
+ }
+
+ /**
+ * 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
+ * @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) throws IOException {
+
+ initiateFile(file, className, GeneratedFileType.BUILDER_CLASS, imports, pkg);
+ List<String> methods = getMethodStrings(TempDataStoreType.BUILDER_METHODS, GeneratedFileType.BUILDER_CLASS,
+ className, file, attrList);
+
+ /**
+ * Add default constructor and build method impl.
+ */
+ methods.add(UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
+ + MethodsGenerator.getDefaultConstructorString(GeneratedFileType.BUILDER_CLASS, className));
+ methods.add(MethodsGenerator.getBuildString(className));
+
+ /**
+ * Add attribute strings.
+ */
+ addAttributeSring(file, className, attrList, GeneratedFileType.BUILDER_CLASS);
+
+ /**
+ * Add methods in builder class.
+ */
+ for (String method : methods) {
+ appendMethod(file, method + UtilConstants.NEW_LINE);
+ }
+ return file;
+ }
+
+ /**
+ * 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
+ * @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)
+ throws IOException {
+
+ initiateFile(file, className, GeneratedFileType.IMPL, null, pkg);
+ List<String> methods = getMethodStrings(TempDataStoreType.IMPL_METHODS, GeneratedFileType.IMPL, className, file,
+ attrList);
+
+ /**
+ * Add attributes.
+ */
+ addAttributeSring(file, className, attrList, GeneratedFileType.IMPL);
+
+ /**
+ * Add default constructor and constructor methods.
+ */
+ methods.add(UtilConstants.JAVA_DOC_FIRST_LINE
+ + MethodsGenerator.getDefaultConstructorString(GeneratedFileType.IMPL, className));
+ methods.add(MethodsGenerator.getConstructorString(className));
+
+ /**
+ * Add methods in impl class.
+ */
+ for (String method : methods) {
+ appendMethod(file, UtilConstants.FOUR_SPACE_INDENTATION + method + UtilConstants.NEW_LINE);
+ }
+ insert(file, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
+
+ return file;
+ }
+
+ /**
+ * Adds attribute string for generated files.
+ *
+ * @param className class name
+ * @param file generated file
+ * @param attrList attribute info
+ * @param genFileType generated file type
+ * @param IOException when fails to add attributes in files.
+ */
+ private static void addAttributeSring(File file, String className, List<AttributeInfo> attrList,
+ GeneratedFileType genFileType) throws IOException {
+ List<String> attributes = new LinkedList<>();
+ try {
+ attributes = TempDataStore.getTempData(TempDataStoreType.ATTRIBUTE, className);
+ } catch (ClassNotFoundException | IOException e) {
+ log.info("There is no attribute info of " + className + " YANG file in the serialized files.");
+ }
+
+ if (attrList != null) {
+ MethodsGenerator.setAttrInfo(attrList);
+ for (AttributeInfo attr : attrList) {
+ if (attr.isListAttr()) {
+ attr.setAttributeType(AttributesJavaDataType.getListString(attr));
+ }
+ attributes.add(getAttributeString(attr, genFileType));
+ }
+ }
+
+ /**
+ * Add attributes to the file.
+ */
+ for (String attribute : attributes) {
+ insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
+ }
+ insert(file, UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Returns method strings for generated files.
+ *
+ * @param dataStoreType temp data store file type.
+ * @param genFileType generated file type
+ * @param className generated file name
+ * @param attrList attribute info
+ * @return method strings
+ */
+ private static List<String> getMethodStrings(TempDataStoreType dataStoreType, GeneratedFileType genFileType,
+ String className, File file, List<AttributeInfo> attrList) {
+
+ List<String> methods = new LinkedList<>();
+ try {
+ methods = TempDataStore.getTempData(dataStoreType, className);
+ } catch (ClassNotFoundException | IOException e) {
+ log.info("There is no attribute info of " + className + " YANG file in the serialized files.");
+ }
+
+ if (attrList != null) {
+ MethodsGenerator.setAttrInfo(attrList);
+ for (AttributeInfo attr : attrList) {
+ if (attr.isListAttr()) {
+ attr.setAttributeType(AttributesJavaDataType.getListString(attr));
+ }
+ methods.add(MethodsGenerator.getMethodString(attr, genFileType));
+ }
+ }
+ return methods;
+ }
+
+ /**
+ * Initiate generation of file based on generated file type.
+ *
+ * @param file generated file
+ * @param className generated file class name
+ * @param type generated file type
+ * @param imports imports for the file
+ * @param pkg generated file package
+ * @throws IOException when fails to generate a file
+ */
+ private static void initiateFile(File file, String className, GeneratedFileType type, List<String> imports,
+ String pkg) throws IOException {
+ try {
+ file.createNewFile();
+ appendContents(file, className, type, imports, pkg);
+ } catch (IOException e) {
+ throw new IOException("Failed to create " + file.getName() + " class file.");
+ }
+ }
+
+ /**
+ * Appends the temp files to main files.
+ *
+ * @param appendFile temp file
+ * @param srcFile main file
+ * @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) {
+ throw new IOException("Failed to append " + appendFile + " in " + srcFile);
+ }
+ }
+
+ /**
+ * Append methods to the generated files.
+ *
+ * @param file file in which method needs to be appended.
+ * @param method method which needs to be appended.
+ */
+ 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(GeneratedFileType 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
+ */
+ public static void parseAttributeInfo(AttributeInfo attr, GeneratedFileType genFileType, String className) {
+
+ String attrString = "";
+ String methodString = "";
+ String getterString = "";
+
+ try {
+ /*
+ * Serialize attributes.
+ */
+ attrString = getAttributeString(attr, genFileType);
+ attrString = attrString.replace("\"", "");
+ TempDataStore.setTempData(attrString, TempDataStore.TempDataStoreType.ATTRIBUTE, className);
+
+ if (genFileType.equals(GeneratedFileType.ALL)) {
+
+ methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.INTERFACE);
+ TempDataStore.setTempData(methodString, TempDataStore.TempDataStoreType.GETTER_METHODS, className);
+
+ methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.BUILDER_CLASS);
+ TempDataStore.setTempData(methodString, TempDataStore.TempDataStoreType.BUILDER_METHODS, className);
+
+ methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.BUILDER_INTERFACE);
+ TempDataStore.setTempData(methodString, TempDataStore.TempDataStoreType.BUILDER_INTERFACE_METHODS,
+ className);
+
+ methodString = MethodsGenerator.getMethodString(attr, GeneratedFileType.IMPL);
+ TempDataStore.setTempData(methodString, TempDataStore.TempDataStoreType.IMPL_METHODS, className);
+
+ } else if (genFileType.equals(GeneratedFileType.INTERFACE)) {
+
+ getterString = MethodsGenerator.getGetterString(attr);
+ TempDataStore.setTempData(methodString, TempDataStore.TempDataStoreType.GETTER_METHODS, className);
+ }
+ } catch (IOException e) {
+ log.info("Failed to get data for " + attr.getAttributeName() + " from serialized files.");
+ }
+ }
+
+ /**
+ * Returns attribute string.
+ *
+ * @param attr attribute info
+ * @param genFileType generated file type
+ * @return attribute string
+ */
+ private static String getAttributeString(AttributeInfo attr, GeneratedFileType genFileType) {
+ return JavaCodeSnippetGen.getJavaAttributeInfo(genFileType, attr.getAttributeName(), attr.getAttributeType());
+ }
+
+ /**
+ * Appends all the contents into a generated java file.
+ *
+ * @param file generated file
+ * @param fileName generated file name
+ * @param type generated file type
+ * @param pkg generated file package
+ * @throws IOException when fails to append contents.
+ */
+ private static void appendContents(File file, String fileName, GeneratedFileType type, List<String> importsList,
+ String pkg) throws IOException {
+
+ if (type.equals(GeneratedFileType.IMPL)) {
+
+ write(file, fileName, type, JavaDocType.IMPL_CLASS);
+ } else if (type.equals(GeneratedFileType.BUILDER_INTERFACE)) {
+
+ write(file, fileName, type, JavaDocType.BUILDER_INTERFACE);
+ } else {
+
+ if (type.equals(GeneratedFileType.INTERFACE)) {
+ 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);
+ }
+ insert(file, UtilConstants.NEW_LINE);
+ write(file, fileName, type, JavaDocType.INTERFACE);
+ } else if (type.equals(GeneratedFileType.BUILDER_CLASS)) {
+ 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);
+ }
+ insert(file, UtilConstants.NEW_LINE);
+ write(file, fileName, type, JavaDocType.BUILDER_CLASS);
+ }
+ }
+ }
+
+ /**
+ * Write data to the specific generated file.
+ *
+ * @param file generated file
+ * @param fileName file name
+ * @param genType generated file type
+ * @param javaDocType java doc type
+ * @throws IOException when fails to write into a file.
+ */
+ private static void write(File file, String fileName, GeneratedFileType genType, JavaDocGen.JavaDocType javaDocType)
+ throws IOException {
+
+ insert(file, JavaDocGen.getJavaDoc(javaDocType, fileName));
+ insert(file, JavaCodeSnippetGen.getJavaClassDefStart(genType, fileName));
+ }
+
+ /**
+ * Insert in the generated file.
+ *
+ * @param file file in which need to be inserted.
+ * @param data data which need to be inserted.
+ * @throws IOException when fails to insert into file
+ */
+ public static void insert(File file, String data) throws IOException {
+ try {
+ FileSystemUtil.insertStringInFile(file, data);
+ } catch (IOException e) {
+ throw new IOException("Failed to insert in " + file + "file");
+ }
+ }
+
+ /**
+ * Removes temp files.
+ *
+ * @param file file to be removed.
+ */
+ public static void clean(File file) {
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
index cd26056..58005b1 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
@@ -50,7 +50,7 @@
pkg = pkg + UtilConstants.PERIOD;
pkg = pkg + getYangRevisionStr(revision);
- return pkg;
+ return pkg.toLowerCase();
}
/**
@@ -126,11 +126,11 @@
* Get the package from parent's package and string.
*
* @param parentPkg parent's package.
- * @param childName child's name.
+ * @param parentName parent's name.
* @return package string.
*/
- public static String getPackageFromParent(String parentPkg, String childName) {
- return parentPkg + UtilConstants.PERIOD + getSubPkgFromName(childName);
+ public static String getPackageFromParent(String parentPkg, String parentName) {
+ return (parentPkg + UtilConstants.PERIOD + getSubPkgFromName(parentName)).toLowerCase();
}
/**
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 23b4afb..8fdaf5f 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
@@ -109,6 +109,7 @@
* @param returnType return type of method
* @return constructed method impl
*/
+ @SuppressWarnings("rawtypes")
public static String constructMethodInfo(GeneratedFileType genFileTypes, String yangName,
GeneratedMethodTypes methodTypes, YangType<?> returnType) {
@@ -187,8 +188,7 @@
attr.getAttributeName(), GeneratedMethodTypes.GETTER, attr.getAttributeType());
String setterString = JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.BUILDER_CLASS,
attr.getAttributeName(), GeneratedMethodTypes.SETTER, attr.getAttributeType());
- return overrideString + getterString + UtilConstants.NEW_LINE + overrideString + setterString
- + UtilConstants.NEW_LINE;
+ return overrideString + getterString + UtilConstants.NEW_LINE + overrideString + setterString;
}
/**
@@ -201,8 +201,7 @@
return UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.OVERRIDE
+ UtilConstants.NEW_LINE + JavaCodeSnippetGen.getJavaMethodInfo(GeneratedFileType.BUILDER_CLASS,
- attr.getAttributeName(), GeneratedMethodTypes.GETTER, attr.getAttributeType())
- + UtilConstants.NEW_LINE;
+ attr.getAttributeName(), GeneratedMethodTypes.GETTER, attr.getAttributeType());
}
/**
@@ -400,8 +399,7 @@
}
getAttrInfo().clear();
}
- return constructor + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET
- + UtilConstants.NEW_LINE;
+ return constructor + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET;
}
/**
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
index 58dfb69..8a537f5 100644
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
@@ -54,7 +54,6 @@
return false;
}
-
/**
* Create a package structure with package info java file if not present.
*
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
index 19a130e..4be5037 100644
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
@@ -170,8 +170,8 @@
* @return javaDocs.
*/
private static String generateForBuilderClass(String className) {
- return (UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_FIRST_LINE + UtilConstants.BUILDER_CLASS_JAVA_DOC
- + className + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_END_LINE);
+ return (UtilConstants.JAVA_DOC_FIRST_LINE + UtilConstants.BUILDER_CLASS_JAVA_DOC + className
+ + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_END_LINE);
}
/**
@@ -181,8 +181,8 @@
* @return javaDocs.
*/
private static String generateForInterface(String interfaceName) {
- return (UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_FIRST_LINE + UtilConstants.INTERFACE_JAVA_DOC
- + interfaceName + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_END_LINE);
+ return (UtilConstants.JAVA_DOC_FIRST_LINE + UtilConstants.INTERFACE_JAVA_DOC + interfaceName
+ + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_END_LINE);
}
/**
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java
deleted file mode 100644
index 9ceb50f..0000000
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Provides storage for serialized data while traversing data model tree for code generation.
- */
-public final class SerializedDataStore {
-
- /**
- * Data Store types.
- */
- public static enum SerializedDataStoreType {
-
- /**
- * Methods.
- */
- INTERFACE_METHODS,
-
- /**
- * Methods.
- */
- BUILDER_METHODS,
-
- /**
- * Methods.
- */
- BUILDER_INTERFACE_METHODS,
-
- /**
- * Methods.
- */
- IMPL_METHODS,
-
- /**
- * Attributes.
- */
- ATTRIBUTE,
-
- /**
- * Imports.
- */
- IMPORT
- }
-
- /**
- * File name string for serialized files of methods.
- */
- private static final String INTERFACE_METHOD_FILE_NAME = "SerializedInterfaceMethodDataStore";
-
- /**
- * File name string for serialized files of methods.
- */
- private static final String BUILDER_METHOD_FILE_NAME = "SerializedBuilderMethodDataStore";
-
- /**
- * File name string for serialized files of methods.
- */
- private static final String BUILDER_INTERFACE_METHOD_FILE_NAME = "SerializedBuilderInterfaceMethodDataStore";
-
- /**
- * File name string for serialized files of methods.
- */
- private static final String IMPL_METHOD_FILE_NAME = "SerializedImplMethodDataStore";
-
- /**
- * File name string for serialized files of attributes.
- */
- private static final String ATTRIBUTE_FILE_NAME = "SerializedAttributeDataStore";
-
- /**
- * File name string for serialized files of imports.
- */
- private static final String IMPORT_FILE_NAME = "SerializedImportDataStore";
-
- /**
- * File extension of serialized files.
- */
- private static final String SERIALIZE_FILE_EXTENSION = ".ser";
-
- /**
- * Directory for generating Serialized files.
- */
- private static final String GEN_DIR = "target/";
-
- /**
- * Buffer size.
- */
- private static final int BUFFER_SIZE = 8 * 1024;
-
- /**
- * Default constructor.
- */
- private SerializedDataStore() {
- }
-
- /**
- * Writes specific info to a serialized file.
- *
- * @param data data to be stored
- * @param type type of serialized data store
- * @throws IOException when fails to create a serialized data file.
- */
- public static void setSerializeData(String data, SerializedDataStoreType type) throws IOException {
-
- String fileName = "";
- if (type.equals(SerializedDataStoreType.ATTRIBUTE)) {
- fileName = ATTRIBUTE_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.INTERFACE_METHODS)) {
- fileName = INTERFACE_METHOD_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.BUILDER_INTERFACE_METHODS)) {
- fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.BUILDER_METHODS)) {
- fileName = BUILDER_METHOD_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.IMPL_METHODS)) {
- fileName = IMPL_METHOD_FILE_NAME;
- } else {
- fileName = IMPORT_FILE_NAME;
- }
-
- try {
- OutputStream file = new FileOutputStream(GEN_DIR + fileName + SERIALIZE_FILE_EXTENSION);
- OutputStream buffer = new BufferedOutputStream(file, BUFFER_SIZE);
-
- ObjectOutput output = new ObjectOutputStream(buffer);
- try {
- output.writeObject(data);
- } finally {
- output.close();
- }
- } catch (IOException ex) {
- throw new IOException("failed to serialize data");
- }
- }
-
- /**
- * Get the serialized data.
- *
- * @param type type of serialized data store
- * @return list of attribute info.
- * @throws IOException when fails to read from the file.
- * @throws ClassNotFoundException when class is missing.
- * @throws FileNotFoundException when file is missing.
- */
- public static List<String> getSerializeData(SerializedDataStoreType type)
- throws IOException, FileNotFoundException, ClassNotFoundException {
-
- String fileName = "";
- if (type.equals(SerializedDataStoreType.ATTRIBUTE)) {
- fileName = ATTRIBUTE_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.INTERFACE_METHODS)) {
- fileName = INTERFACE_METHOD_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.BUILDER_INTERFACE_METHODS)) {
- fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.BUILDER_METHODS)) {
- fileName = BUILDER_METHOD_FILE_NAME;
- } else if (type.equals(SerializedDataStoreType.IMPL_METHODS)) {
- fileName = IMPL_METHOD_FILE_NAME;
- } else {
- fileName = IMPORT_FILE_NAME;
- }
- try {
- InputStream file = new FileInputStream(GEN_DIR + fileName + SERIALIZE_FILE_EXTENSION);
- InputStream buffer = new BufferedInputStream(file);
- ObjectInput input = new ObjectInputStream(buffer);
- try {
- String data = (String) input.readObject();
- List<String> recoveredData = new ArrayList<>();
- recoveredData.add(data);
- return recoveredData;
- } finally {
- input.close();
- file.close();
- }
- } catch (FileNotFoundException ex) {
- throw new FileNotFoundException("No such file or directory.");
- } catch (ClassNotFoundException ex) {
- throw new ClassNotFoundException("failed to fetch the serialized data file.");
- }
- }
-}
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java
new file mode 100644
index 0000000..63cba97
--- /dev/null
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.utils.io.impl;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Provides storage for Temp data while traversing data model tree for code generation.
+ */
+public final class TempDataStore {
+
+ /**
+ * Data Store types.
+ */
+ public static enum TempDataStoreType {
+
+ /**
+ * Methods.
+ */
+ GETTER_METHODS,
+
+ /**
+ * Methods.
+ */
+ BUILDER_METHODS,
+
+ /**
+ * Methods.
+ */
+ BUILDER_INTERFACE_METHODS,
+
+ /**
+ * Methods.
+ */
+ IMPL_METHODS,
+
+ /**
+ * Attributes.
+ */
+ ATTRIBUTE,
+
+ /**
+ * Imports.
+ */
+ IMPORT
+ }
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String GETTER_METHOD_FILE_NAME = "TempGetterMethodDataStore";
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String BUILDER_METHOD_FILE_NAME = "TempBuilderMethodDataStore";
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String BUILDER_INTERFACE_METHOD_FILE_NAME = "TempBuilderInterfaceMethodDataStore";
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String IMPL_METHOD_FILE_NAME = "TempImplMethodDataStore";
+
+ /**
+ * File name string for Temp files of attributes.
+ */
+ private static final String ATTRIBUTE_FILE_NAME = "TempAttributeDataStore";
+
+ /**
+ * File name string for Temp files of imports.
+ */
+ private static final String IMPORT_FILE_NAME = "TempImportDataStore";
+
+ /**
+ * File extension of Temp files.
+ */
+ private static final String FILE_EXTENSION = ".tmp";
+
+ /**
+ * Directory for generating Temp files.
+ */
+ private static final String GEN_DIR = "target/";
+
+ /**
+ * Buffer size.
+ */
+ private static final int BUFFER_SIZE = 8 * 1024;
+
+ /**
+ * Default constructor.
+ */
+ private TempDataStore() {
+ }
+
+ /**
+ * Writes specific info to a Temp file.
+ *
+ * @param data data to be stored
+ * @param type type of Temp data store
+ * @param className class name
+ * @throws IOException when fails to create a Temp data file.
+ */
+ public static void setTempData(String data, TempDataStoreType type, String className) throws IOException {
+
+ String fileName = "";
+ if (type.equals(TempDataStoreType.ATTRIBUTE)) {
+ fileName = ATTRIBUTE_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.GETTER_METHODS)) {
+ fileName = GETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_INTERFACE_METHODS)) {
+ fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_METHODS)) {
+ fileName = BUILDER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.IMPL_METHODS)) {
+ fileName = IMPL_METHOD_FILE_NAME;
+ } else {
+ fileName = IMPORT_FILE_NAME;
+ }
+
+ File dir = new File(GEN_DIR + className + File.separator);
+ dir.mkdirs();
+ try {
+ OutputStream file = new FileOutputStream(GEN_DIR + className + File.separator + fileName + FILE_EXTENSION);
+ OutputStream buffer = new BufferedOutputStream(file, BUFFER_SIZE);
+
+ ObjectOutput output = new ObjectOutputStream(buffer);
+ try {
+ output.writeObject(data);
+ } finally {
+ output.close();
+ }
+ } catch (IOException ex) {
+ throw new IOException("failed to serialize data");
+ }
+ }
+
+ /**
+ * Get the Temp data.
+ *
+ * @param type type of Temp data store
+ * @param className name of the class.
+ * @return list of attribute info.
+ * @throws IOException when fails to read from the file.
+ * @throws ClassNotFoundException when class is missing.
+ * @throws FileNotFoundException when file is missing.
+ */
+ public static List<String> getTempData(TempDataStoreType type, String className)
+ throws IOException, FileNotFoundException, ClassNotFoundException {
+
+ String fileName = "";
+ if (type.equals(TempDataStoreType.ATTRIBUTE)) {
+ fileName = ATTRIBUTE_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.GETTER_METHODS)) {
+ fileName = GETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_INTERFACE_METHODS)) {
+ fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_METHODS)) {
+ fileName = BUILDER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.IMPL_METHODS)) {
+ fileName = IMPL_METHOD_FILE_NAME;
+ } else {
+ fileName = IMPORT_FILE_NAME;
+ }
+ try {
+ InputStream file = new FileInputStream(GEN_DIR + className + File.separator + fileName + FILE_EXTENSION);
+ InputStream buffer = new BufferedInputStream(file);
+ ObjectInput input = new ObjectInputStream(buffer);
+ try {
+ String data = (String) input.readObject();
+ List<String> recoveredData = new ArrayList<>();
+ recoveredData.add(data);
+ return recoveredData;
+ } finally {
+ input.close();
+ file.close();
+ }
+ } catch (FileNotFoundException ex) {
+ throw new FileNotFoundException("No such file or directory.");
+ } catch (ClassNotFoundException ex) {
+ throw new ClassNotFoundException("failed to fetch the Temp data file.");
+ }
+ }
+}
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
index 1f8a159..bb94b35 100644
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
@@ -33,7 +33,6 @@
private YangFileScanner() {
}
-
/**
* Returns the list of java files.
*
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
index 8e97a7a..3357000 100644
--- a/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
@@ -69,10 +69,9 @@
public static void addPackageInfo(File path, String classInfo, String pack) throws IOException {
if (pack.contains(UtilConstants.YANG_GEN_DIR)) {
- String[] strArray = pack.split(UtilConstants.YANG_GEN_DIR + UtilConstants.SLASH);
- pack = strArray[1];
- }
-
+ String[] strArray = pack.split(UtilConstants.YANG_GEN_DIR);
+ pack = strArray[1];
+ }
try {
File packageInfo = new File(path + File.separator + "package-info.java");