From 4bf8b15d73cd9a1dbbc5c83d1caa4e6fa461fb1b Mon Sep 17 00:00:00 2001 From: Bharat saraswal Date: Thu, 25 Feb 2016 02:26:43 +0530 Subject: [PATCH] [ONOS-3908] YANG container translator. Change-Id: I4e239509df747238905ca0995f41019679093627 --- .../yangutils/datamodel/YangContainer.java | 13 +- .../yangutils/datamodel/YangModule.java | 8 +- .../translator/CachedFileHandle.java | 7 + .../translator/tojava/AttributeInfo.java | 6 +- .../tojava/CachedJavaFileHandle.java | 464 ++++-------------- .../translator/tojava/JavaCodeGenerator.java | 9 +- .../tojava/utils/AttributesJavaDataType.java | 114 +++++ .../tojava/utils/JavaCodeSnippetGen.java | 14 - .../tojava/utils/JavaFileGenerator.java | 453 +++++++++++++++++ .../tojava/utils/JavaIdentifierSyntax.java | 8 +- .../tojava/utils/MethodsGenerator.java | 10 +- .../utils/io/impl/FileSystemUtil.java | 1 - .../yangutils/utils/io/impl/JavaDocGen.java | 8 +- ...lizedDataStore.java => TempDataStore.java} | 89 ++-- .../utils/io/impl/YangFileScanner.java | 1 - .../yangutils/utils/io/impl/YangIoUtils.java | 7 +- .../tojava/CachedJavaFileHandleTest.java | 170 +++++++ .../tojava/utils/JavaCodeSnippetGenTest.java | 134 +++++ ...aStoreTest.java => TempDataStoreTest.java} | 37 +- 19 files changed, 1067 insertions(+), 486 deletions(-) create mode 100644 utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java create mode 100644 utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java rename utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/{SerializedDataStore.java => TempDataStore.java} (59%) create mode 100644 utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandleTest.java create mode 100644 utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java rename utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/{SerializedDataStoreTest.java => TempDataStoreTest.java} (75%) diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java index c38bbbce39..99baf4a7e5 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java @@ -26,6 +26,7 @@ import org.onosproject.yangutils.parser.ParsableDataType; 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 @@ public class YangContainer extends YangNode implements YangLeavesHolder, YangCom @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 @@ public class YangContainer extends YangNode implements YangLeavesHolder, YangCom @Override public void generateJavaCodeExit() throws IOException { - addLeavesAttributes(); - addLeafListAttributes(); getFileHandle().close(); return; } diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java index 836ad77c43..8eda617535 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java @@ -26,6 +26,7 @@ import org.onosproject.yangutils.translator.CachedFileHandle; 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 @@ public class YangModule extends YangNode 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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java index b73b8215e0..4d7e51b334 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java @@ -49,4 +49,11 @@ public interface CachedFileHandle { * @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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java index c61c96cfec..f2c1562d8a 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java @@ -19,6 +19,7 @@ package org.onosproject.yangutils.translator.tojava; 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 @@ public class AttributeInfo implements Serializable { * @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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java index ac917aa75b..c6fcea49bb 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java @@ -27,26 +27,18 @@ import java.util.TreeSet; 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"; @@ -57,12 +49,6 @@ public class CachedJavaFileHandle implements CachedFileHandle { */ 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. */ @@ -89,10 +75,15 @@ public class CachedJavaFileHandle implements CachedFileHandle { */ private List attributeList; + /** + * File generation directory path. + */ + private String filePath; + /** * Prevent invoking default constructor. */ - private CachedJavaFileHandle() { + public CachedJavaFileHandle() { setCachedAttributeList(new LinkedList()); } @@ -106,16 +97,9 @@ public class CachedJavaFileHandle implements CachedFileHandle { * @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 @@ public class CachedJavaFileHandle implements CachedFileHandle { return childsPkg; } - /** - * Set the java package. - * - * @param pcg the package to set - */ @Override public void setChildsPackage(String pcg) { childsPkg = pcg; @@ -251,13 +230,27 @@ public class CachedJavaFileHandle implements CachedFileHandle { 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 @@ public class CachedJavaFileHandle implements CachedFileHandle { 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 @@ public class CachedJavaFileHandle implements CachedFileHandle { 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 @@ public class CachedJavaFileHandle implements CachedFileHandle { if (getCachedAttributeList() != null) { if (getCachedAttributeList().size() == MAX_CACHABLE_ATTR) { - flushCacheAttrToSerFile(); + flushCacheAttrToSerFile(getYangName()); } getCachedAttributeList().add(newAttr); } else { @@ -361,89 +354,19 @@ public class CachedJavaFileHandle implements CachedFileHandle { 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 attributes = new LinkedList<>(); - List interfaceMethods = new LinkedList<>(); - List builderInterfaceMethods = new LinkedList<>(); - List builderClassMethods = new LinkedList<>(); - List implClassMethods = new LinkedList<>(); List 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 @@ public class CachedJavaFileHandle implements CachedFileHandle { } } - 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 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 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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java index 50b0d063ba..0c707478b0 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java @@ -42,21 +42,22 @@ public final class JavaCodeGenerator { 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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java new file mode 100644 index 0000000000..e2d27ac86f --- /dev/null +++ b/utils/yangutils/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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java index a470aefb41..e8bade3293 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java +++ b/utils/yangutils/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; @@ -49,17 +46,6 @@ public final class JavaCodeSnippetGen { return null; } - /** - * 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 sortImportOrder(SortedSet 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. * diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java new file mode 100644 index 0000000000..60d8c2a4d4 --- /dev/null +++ b/utils/yangutils/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 imports, + List attrList, String pkg) throws IOException { + + initiateFile(file, className, GeneratedFileType.INTERFACE, imports, pkg); + List 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 attrList) throws IOException { + + initiateFile(file, className, GeneratedFileType.BUILDER_INTERFACE, null, pkg); + List 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 imports, String pkg, + List attrList) throws IOException { + + initiateFile(file, className, GeneratedFileType.BUILDER_CLASS, imports, pkg); + List 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 attrList) + throws IOException { + + initiateFile(file, className, GeneratedFileType.IMPL, null, pkg); + List 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 attrList, + GeneratedFileType genFileType) throws IOException { + List 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 getMethodStrings(TempDataStoreType dataStoreType, GeneratedFileType genFileType, + String className, File file, List attrList) { + + List 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 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 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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java index cd26056a8f..58005b1da4 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java @@ -50,7 +50,7 @@ public final class JavaIdentifierSyntax { pkg = pkg + UtilConstants.PERIOD; pkg = pkg + getYangRevisionStr(revision); - return pkg; + return pkg.toLowerCase(); } /** @@ -126,11 +126,11 @@ public final class JavaIdentifierSyntax { * 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/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java index 23b4afb93c..8fdaf5fcd1 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java @@ -109,6 +109,7 @@ public final class MethodsGenerator { * @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 @@ public final class MethodsGenerator { 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 @@ public final class MethodsGenerator { 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 @@ public final class MethodsGenerator { } 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/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java index 58dfb69c96..8a537f5948 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java @@ -54,7 +54,6 @@ public final class FileSystemUtil { return false; } - /** * Create a package structure with package info java file if not present. * diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java index 19a130ee65..4be5037023 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java @@ -170,8 +170,8 @@ public final class JavaDocGen { * @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 @@ public final class JavaDocGen { * @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/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java similarity index 59% rename from utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java rename to utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java index 9ceb50feb4..63cba9773c 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java @@ -18,6 +18,7 @@ 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; @@ -32,19 +33,19 @@ import java.util.ArrayList; import java.util.List; /** - * Provides storage for serialized data while traversing data model tree for code generation. + * Provides storage for Temp data while traversing data model tree for code generation. */ -public final class SerializedDataStore { +public final class TempDataStore { /** * Data Store types. */ - public static enum SerializedDataStoreType { + public static enum TempDataStoreType { /** * Methods. */ - INTERFACE_METHODS, + GETTER_METHODS, /** * Methods. @@ -73,42 +74,42 @@ public final class SerializedDataStore { } /** - * File name string for serialized files of methods. + * File name string for Temp files of methods. */ - private static final String INTERFACE_METHOD_FILE_NAME = "SerializedInterfaceMethodDataStore"; + private static final String GETTER_METHOD_FILE_NAME = "TempGetterMethodDataStore"; /** - * File name string for serialized files of methods. + * File name string for Temp files of methods. */ - private static final String BUILDER_METHOD_FILE_NAME = "SerializedBuilderMethodDataStore"; + private static final String BUILDER_METHOD_FILE_NAME = "TempBuilderMethodDataStore"; /** - * File name string for serialized files of methods. + * File name string for Temp files of methods. */ - private static final String BUILDER_INTERFACE_METHOD_FILE_NAME = "SerializedBuilderInterfaceMethodDataStore"; + private static final String BUILDER_INTERFACE_METHOD_FILE_NAME = "TempBuilderInterfaceMethodDataStore"; /** - * File name string for serialized files of methods. + * File name string for Temp files of methods. */ - private static final String IMPL_METHOD_FILE_NAME = "SerializedImplMethodDataStore"; + private static final String IMPL_METHOD_FILE_NAME = "TempImplMethodDataStore"; /** - * File name string for serialized files of attributes. + * File name string for Temp files of attributes. */ - private static final String ATTRIBUTE_FILE_NAME = "SerializedAttributeDataStore"; + private static final String ATTRIBUTE_FILE_NAME = "TempAttributeDataStore"; /** - * File name string for serialized files of imports. + * File name string for Temp files of imports. */ - private static final String IMPORT_FILE_NAME = "SerializedImportDataStore"; + private static final String IMPORT_FILE_NAME = "TempImportDataStore"; /** - * File extension of serialized files. + * File extension of Temp files. */ - private static final String SERIALIZE_FILE_EXTENSION = ".ser"; + private static final String FILE_EXTENSION = ".tmp"; /** - * Directory for generating Serialized files. + * Directory for generating Temp files. */ private static final String GEN_DIR = "target/"; @@ -120,35 +121,38 @@ public final class SerializedDataStore { /** * Default constructor. */ - private SerializedDataStore() { + private TempDataStore() { } /** - * Writes specific info to a serialized file. + * Writes specific info to a Temp file. * * @param data data to be stored - * @param type type of serialized data store - * @throws IOException when fails to create a serialized data file. + * @param type type of Temp data store + * @param className class name + * @throws IOException when fails to create a Temp data file. */ - public static void setSerializeData(String data, SerializedDataStoreType type) throws IOException { + public static void setTempData(String data, TempDataStoreType type, String className) throws IOException { String fileName = ""; - if (type.equals(SerializedDataStoreType.ATTRIBUTE)) { + if (type.equals(TempDataStoreType.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)) { + } 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(SerializedDataStoreType.BUILDER_METHODS)) { + } else if (type.equals(TempDataStoreType.BUILDER_METHODS)) { fileName = BUILDER_METHOD_FILE_NAME; - } else if (type.equals(SerializedDataStoreType.IMPL_METHODS)) { + } 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 + fileName + SERIALIZE_FILE_EXTENSION); + OutputStream file = new FileOutputStream(GEN_DIR + className + File.separator + fileName + FILE_EXTENSION); OutputStream buffer = new BufferedOutputStream(file, BUFFER_SIZE); ObjectOutput output = new ObjectOutputStream(buffer); @@ -163,33 +167,34 @@ public final class SerializedDataStore { } /** - * Get the serialized data. + * Get the Temp data. * - * @param type type of serialized data store + * @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 getSerializeData(SerializedDataStoreType type) + public static List getTempData(TempDataStoreType type, String className) throws IOException, FileNotFoundException, ClassNotFoundException { String fileName = ""; - if (type.equals(SerializedDataStoreType.ATTRIBUTE)) { + if (type.equals(TempDataStoreType.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)) { + } 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(SerializedDataStoreType.BUILDER_METHODS)) { + } else if (type.equals(TempDataStoreType.BUILDER_METHODS)) { fileName = BUILDER_METHOD_FILE_NAME; - } else if (type.equals(SerializedDataStoreType.IMPL_METHODS)) { + } else if (type.equals(TempDataStoreType.IMPL_METHODS)) { fileName = IMPL_METHOD_FILE_NAME; } else { fileName = IMPORT_FILE_NAME; } try { - InputStream file = new FileInputStream(GEN_DIR + fileName + SERIALIZE_FILE_EXTENSION); + InputStream file = new FileInputStream(GEN_DIR + className + File.separator + fileName + FILE_EXTENSION); InputStream buffer = new BufferedInputStream(file); ObjectInput input = new ObjectInputStream(buffer); try { @@ -204,7 +209,7 @@ public final class SerializedDataStore { } catch (FileNotFoundException ex) { throw new FileNotFoundException("No such file or directory."); } catch (ClassNotFoundException ex) { - throw new ClassNotFoundException("failed to fetch the serialized data file."); + throw new ClassNotFoundException("failed to fetch the Temp data file."); } } } diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java index 1f8a159d3b..bb94b35a91 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java @@ -33,7 +33,6 @@ public final class YangFileScanner { private YangFileScanner() { } - /** * Returns the list of java files. * diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java index 8e97a7a267..33570003bb 100644 --- a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java +++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java @@ -69,10 +69,9 @@ public final class YangIoUtils { 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"); diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandleTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandleTest.java new file mode 100644 index 0000000000..9a62458a8e --- /dev/null +++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandleTest.java @@ -0,0 +1,170 @@ +/* + * 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; + +import java.io.File; +import java.io.IOException; + +import org.junit.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +import org.onosproject.yangutils.datamodel.YangDataTypes; +import org.onosproject.yangutils.datamodel.YangType; +import org.onosproject.yangutils.translator.CachedFileHandle; +import org.onosproject.yangutils.translator.GeneratedFileType; +import org.onosproject.yangutils.utils.UtilConstants; +import org.onosproject.yangutils.utils.io.impl.CopyrightHeader; +import org.onosproject.yangutils.utils.io.impl.FileSystemUtil; + +/** + * Unit test case for cached java file handle. + */ +public class CachedJavaFileHandleTest { + + private static final String DIR_PKG = "target/unit/cachedfile/"; + private static final String PKG = "org.onosproject.unittest"; + private static final String CHILD_PKG = "target/unit/cachedfile/child"; + private static final String YANG_NAME = "Test1"; + private static final GeneratedFileType GEN_TYPE = GeneratedFileType.ALL; + + /** + * Unit test case for add attribute info. + * + * @throws IOException when fails to add an attribute. + */ + @Test + public void testForAddAttributeInfo() throws IOException { + + AttributeInfo attr = getAttr(); + attr.setListAttr(false); + getFileHandle().addAttributeInfo(attr.getAttributeType(), attr.getAttributeName(), attr.isListAttr()); + } + + /** + * Unit test case for close of cached files. + * + * @throws IOException when fails to generate files. + */ + @Test + public void testForClose() throws IOException { + + CopyrightHeader.parseCopyrightHeader(); + + AttributeInfo attr = getAttr(); + attr.setListAttr(false); + CachedFileHandle handle = getFileHandle(); + handle.addAttributeInfo(attr.getAttributeType(), attr.getAttributeName(), attr.isListAttr()); + handle.close(); + + assertThat(true, is(getStubDir().exists())); + assertThat(true, is(getStubPkgInfo().exists())); + assertThat(true, is(getStubInterfaceFile().exists())); + assertThat(true, is(getStubBuilderFile().exists())); + } + + /** + * Unit test case for setting child's package. + * + * @throws IOException when fails to add child's package + */ + @Test + public void testForSetChildsPackage() throws IOException { + + AttributeInfo attr = getAttr(); + attr.setListAttr(false); + CachedFileHandle handle = getFileHandle(); + handle.addAttributeInfo(attr.getAttributeType(), attr.getAttributeName(), attr.isListAttr()); + + handle.setChildsPackage(CHILD_PKG); + } + + /** + * Returns attribute info. + * + * @return attribute info + */ + @SuppressWarnings("rawtypes") + private AttributeInfo getAttr() { + YangType type = new YangType(); + YangDataTypes dataType = YangDataTypes.STRING; + + type.setDataTypeName("string"); + type.setDataType(dataType); + + AttributeInfo attr = new AttributeInfo(); + + attr.setAttributeName("testAttr"); + attr.setAttributeType(type); + return attr; + } + + /** + * Returns cached java file handle. + * + * @return java file handle. + */ + private CachedFileHandle getFileHandle() throws IOException { + CopyrightHeader.parseCopyrightHeader(); + FileSystemUtil.createPackage(DIR_PKG + File.separator + PKG, YANG_NAME); + CachedFileHandle fileHandle = FileSystemUtil.createSourceFiles(PKG, YANG_NAME, GEN_TYPE); + fileHandle.setFilePath(DIR_PKG + PKG.replace(".", "/")); + + return fileHandle; + } + + /** + * Returns stub directory file object. + * + * @return stub directory file + */ + private File getStubDir() { + return new File(DIR_PKG); + } + + /** + * Returns stub package-info file object. + * + * @return stub package-info file + */ + private File getStubPkgInfo() { + return new File(DIR_PKG + PKG.replace(UtilConstants.PERIOD, UtilConstants.SLASH) + File.separator + + "package-info.java"); + } + + /** + * Returns stub interface file object. + * + * @return stub interface file + */ + private File getStubInterfaceFile() { + return new File(DIR_PKG + PKG.replace(UtilConstants.PERIOD, UtilConstants.SLASH) + File.separator + YANG_NAME + + ".java"); + } + + /** + * Returns stub builder file. + * + * @return stub builder file + */ + private File getStubBuilderFile() { + return new File(DIR_PKG + PKG.replace(UtilConstants.PERIOD, UtilConstants.SLASH) + File.separator + YANG_NAME + + "Builder.java"); + } + +} diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java new file mode 100644 index 0000000000..bf73689a96 --- /dev/null +++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java @@ -0,0 +1,134 @@ +/* + * 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.junit.Test; +import org.onosproject.yangutils.datamodel.YangDataTypes; +import org.onosproject.yangutils.datamodel.YangType; +import org.onosproject.yangutils.translator.GeneratedFileType; +import org.onosproject.yangutils.translator.tojava.GeneratedMethodTypes; +import org.onosproject.yangutils.translator.tojava.ImportInfo; +import org.onosproject.yangutils.utils.UtilConstants; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; + +/** + * Unit test cases for java code snippet generator. + */ +public class JavaCodeSnippetGenTest { + + private static final String PKG_INFO = "org.onosproject.unittest"; + private static final String CLASS_INFO = "JavaCodeSnippetGenTest"; + private static final GeneratedFileType FILE_GEN_TYPE = GeneratedFileType.INTERFACE; + private static final GeneratedMethodTypes METHOD_GEN_TYPE = GeneratedMethodTypes.GETTER; + private static final String YANG_NAME = "Test"; + private static final String STRING = "String"; + + /** + * Unit test case for import text. + */ + @Test + public void testForImportText() { + ImportInfo importInfo = new ImportInfo(); + importInfo.setPkgInfo(PKG_INFO); + importInfo.setClassInfo(CLASS_INFO); + + String imports = JavaCodeSnippetGen.getImportText(importInfo); + + assertThat(true, is(imports.equals(UtilConstants.IMPORT + PKG_INFO + UtilConstants.PERIOD + CLASS_INFO + + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE))); + } + + /** + * Unit test case for java class definition start. + */ + @Test + public void testForJavaClassDefStart() { + String classDef = JavaCodeSnippetGen.getJavaClassDefStart(FILE_GEN_TYPE, YANG_NAME); + assertThat(true, + is(classDef.equals(UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.INTERFACE + + UtilConstants.SPACE + YANG_NAME + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + + UtilConstants.NEW_LINE))); + } + + /** + * Unit test case for java attribute info. + */ + @SuppressWarnings("rawtypes") + @Test + public void testForJavaAttributeInfo() { + + String attributeWithType = JavaCodeSnippetGen.getJavaAttributeInfo(FILE_GEN_TYPE, YANG_NAME, getType()); + assertThat(true, is(attributeWithType.equals(UtilConstants.PRIVATE + UtilConstants.SPACE + + getType().getDataTypeName() + UtilConstants.SPACE + YANG_NAME + UtilConstants.SEMI_COLAN))); + + String attributeWithoutType = JavaCodeSnippetGen.getJavaAttributeInfo(FILE_GEN_TYPE, YANG_NAME, null); + assertThat(true, + is(attributeWithoutType.equals( + UtilConstants.PRIVATE + UtilConstants.SPACE + JavaIdentifierSyntax.getCaptialCase(YANG_NAME) + + UtilConstants.SPACE + YANG_NAME + UtilConstants.SEMI_COLAN))); + + } + + /** + * Unit test case for list attribute. + */ + @Test + public void testForListAttribute() { + String listAttribute = JavaCodeSnippetGen.getListAttribute(STRING); + assertThat(true, is(listAttribute.equals(UtilConstants.LIST + UtilConstants.DIAMOND_OPEN_BRACKET + STRING + + UtilConstants.DIAMOND_CLOSE_BRACKET))); + } + + /** + * Unit test case for java method info. + */ + @Test + public void testForJavaMethodInfo() { + + String method = JavaCodeSnippetGen.getJavaMethodInfo(FILE_GEN_TYPE, YANG_NAME, METHOD_GEN_TYPE, getType()); + assertThat(true, + is(method.equals(UtilConstants.FOUR_SPACE_INDENTATION + + JavaIdentifierSyntax.getCaptialCase(getType().getDataTypeName()) + UtilConstants.SPACE + + UtilConstants.GET_METHOD_PREFIX + JavaIdentifierSyntax.getCaptialCase(YANG_NAME) + + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + + UtilConstants.SEMI_COLAN))); + } + + /** + * Unit test case for java class definition close. + */ + @Test + public void testForJavaClassDefClose() { + String classDef = JavaCodeSnippetGen.getJavaClassDefClose(FILE_GEN_TYPE, YANG_NAME); + assertThat(true, is(classDef.equals(UtilConstants.CLOSE_CURLY_BRACKET))); + } + + /** + * Returns YANG type. + * + * @return type + */ + @SuppressWarnings("rawtypes") + private YangType getType() { + YangType type = new YangType(); + type.setDataTypeName(STRING); + type.setDataType(YangDataTypes.STRING); + return type; + } +} diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStoreTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/TempDataStoreTest.java similarity index 75% rename from utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStoreTest.java rename to utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/TempDataStoreTest.java index 154dcdd625..11e31c5d35 100644 --- a/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStoreTest.java +++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/utils/io/impl/TempDataStoreTest.java @@ -19,7 +19,7 @@ package org.onosproject.yangutils.utils.io.impl; import org.junit.Test; import org.junit.Rule; import org.junit.rules.ExpectedException; -import org.onosproject.yangutils.utils.io.impl.SerializedDataStore.SerializedDataStoreType; +import org.onosproject.yangutils.utils.io.impl.TempDataStore.TempDataStoreType; import java.io.FileNotFoundException; import java.io.IOException; @@ -36,11 +36,12 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertNotNull; /** - * Unit tests for the serialized data store for its contents. + * Unit tests for the Tempd data store for its contents. */ -public final class SerializedDataStoreTest { +public final class TempDataStoreTest { private final Logger log = getLogger(getClass()); + private static final String CLASS_NAME = "YANG"; @Rule public ExpectedException thrown = ExpectedException.none(); @@ -59,7 +60,7 @@ public final class SerializedDataStoreTest { public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { - Class[] classesToConstruct = {SerializedDataStore.class }; + Class[] classesToConstruct = {TempDataStore.class }; for (Class clazz : classesToConstruct) { Constructor constructor = clazz.getDeclaredConstructor(); constructor.setAccessible(true); @@ -74,12 +75,12 @@ public final class SerializedDataStoreTest { public void insertAttributeDataTest() throws IOException, ClassNotFoundException, FileNotFoundException { String attributeData = "attribute content lists this"; - SerializedDataStore.setSerializeData(attributeData, SerializedDataStoreType.ATTRIBUTE); - List attributeInfo = SerializedDataStore.getSerializeData(SerializedDataStoreType.ATTRIBUTE); + TempDataStore.setTempData(attributeData, TempDataStoreType.ATTRIBUTE, CLASS_NAME); + List attributeInfo = TempDataStore.getTempData(TempDataStoreType.ATTRIBUTE, CLASS_NAME); List expectedinfo = new LinkedList<>(); expectedinfo.add(attributeData); assertThat(true, is(attributeInfo.equals(expectedinfo))); - SerializedDataStoreType.valueOf(SerializedDataStoreType.ATTRIBUTE.toString()); + TempDataStoreType.valueOf(TempDataStoreType.ATTRIBUTE.toString()); } /** @@ -89,10 +90,8 @@ public final class SerializedDataStoreTest { public void insertBuilderInterfaceMethodsTest() throws IOException, ClassNotFoundException, FileNotFoundException { String builderInterfaceMethodsData = "builder interface methods content lists this"; - SerializedDataStore.setSerializeData(builderInterfaceMethodsData, - SerializedDataStoreType.BUILDER_INTERFACE_METHODS); - List attributeInfo = SerializedDataStore - .getSerializeData(SerializedDataStoreType.BUILDER_INTERFACE_METHODS); + TempDataStore.setTempData(builderInterfaceMethodsData, TempDataStoreType.BUILDER_INTERFACE_METHODS, CLASS_NAME); + List attributeInfo = TempDataStore.getTempData(TempDataStoreType.BUILDER_INTERFACE_METHODS, CLASS_NAME); List expectedinfo = new LinkedList<>(); expectedinfo.add(builderInterfaceMethodsData); assertThat(true, is(attributeInfo.equals(expectedinfo))); @@ -105,8 +104,8 @@ public final class SerializedDataStoreTest { public void insertBuilderMethodsTest() throws IOException, ClassNotFoundException, FileNotFoundException { String builderMethodsData = "builder methods content lists this"; - SerializedDataStore.setSerializeData(builderMethodsData, SerializedDataStoreType.BUILDER_METHODS); - List attributeInfo = SerializedDataStore.getSerializeData(SerializedDataStoreType.BUILDER_METHODS); + TempDataStore.setTempData(builderMethodsData, TempDataStoreType.BUILDER_METHODS, CLASS_NAME); + List attributeInfo = TempDataStore.getTempData(TempDataStoreType.BUILDER_METHODS, CLASS_NAME); List expectedinfo = new LinkedList<>(); expectedinfo.add(builderMethodsData); assertThat(true, is(attributeInfo.equals(expectedinfo))); @@ -119,8 +118,8 @@ public final class SerializedDataStoreTest { public void insertImplMethodsTest() throws IOException, ClassNotFoundException, FileNotFoundException { String implMethodsData = "impl methods content lists this"; - SerializedDataStore.setSerializeData(implMethodsData, SerializedDataStoreType.IMPL_METHODS); - List attributeInfo = SerializedDataStore.getSerializeData(SerializedDataStoreType.IMPL_METHODS); + TempDataStore.setTempData(implMethodsData, TempDataStoreType.IMPL_METHODS, CLASS_NAME); + List attributeInfo = TempDataStore.getTempData(TempDataStoreType.IMPL_METHODS, CLASS_NAME); List expectedinfo = new LinkedList<>(); expectedinfo.add(implMethodsData); assertThat(true, is(attributeInfo.equals(expectedinfo))); @@ -133,8 +132,8 @@ public final class SerializedDataStoreTest { public void insertImportTest() throws IOException, ClassNotFoundException, FileNotFoundException { String importData = "interface methods content lists this"; - SerializedDataStore.setSerializeData(importData, SerializedDataStoreType.IMPORT); - List attributeInfo = SerializedDataStore.getSerializeData(SerializedDataStoreType.IMPORT); + TempDataStore.setTempData(importData, TempDataStoreType.IMPORT, CLASS_NAME); + List attributeInfo = TempDataStore.getTempData(TempDataStoreType.IMPORT, CLASS_NAME); List expectedinfo = new LinkedList<>(); expectedinfo.add(importData); assertThat(true, is(attributeInfo.equals(expectedinfo))); @@ -147,8 +146,8 @@ public final class SerializedDataStoreTest { public void insertInterfaceMethodsTest() throws IOException, ClassNotFoundException, FileNotFoundException { String interfaceMethodsData = "interface methods content lists this"; - SerializedDataStore.setSerializeData(interfaceMethodsData, SerializedDataStoreType.INTERFACE_METHODS); - List attributeInfo = SerializedDataStore.getSerializeData(SerializedDataStoreType.INTERFACE_METHODS); + TempDataStore.setTempData(interfaceMethodsData, TempDataStoreType.GETTER_METHODS, CLASS_NAME); + List attributeInfo = TempDataStore.getTempData(TempDataStoreType.GETTER_METHODS, CLASS_NAME); List expectedinfo = new LinkedList<>(); expectedinfo.add(interfaceMethodsData); assertThat(true, is(attributeInfo.equals(expectedinfo)));