ST defect fixes and review comments fixes
Change-Id: Ib8c56a88c19cd9aa23918d0f9e37c89e74cb0d13
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java b/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
index 30d4978..e094602 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
@@ -340,9 +340,11 @@
/**
* Prepare the information for java code generation corresponding to YANG
* grouping info.
+ *
+ * @param codeGenDir code generation directory
*/
@Override
- public void generateJavaCodeEntry() {
+ public void generateJavaCodeEntry(String codeGenDir) {
// TODO Auto-generated method stub
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java b/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
index b9da3c2..c49074a 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
@@ -337,9 +337,11 @@
/**
* Generate the code corresponding to YANG case info.
+ *
+ * @param codeGenDir code generation directory
*/
@Override
- public void generateJavaCodeEntry() {
+ public void generateJavaCodeEntry(String codeGenDir) {
// TODO Auto-generated method stub
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java b/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
index 440ca57..e9d7085 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
@@ -140,22 +140,11 @@
super(YangNodeType.CHOICE_NODE);
}
- /*
- * (non-Javadoc)
- *
- * @see org.onosproject.yangutils.datamodel.YangNode#getName()
- */
@Override
public String getName() {
return name;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.onosproject.yangutils.datamodel.YangNode#setName(java.lang.String)
- */
@Override
public void setName(String name) {
this.name = name;
@@ -305,48 +294,24 @@
// TODO auto-generated method stub, to be implemented by parser
}
- /*
- * (non-Javadoc)
- *
- * @see org.onosproject.yangutils.datamodel.YangNode#getPackage()
- */
@Override
public String getPackage() {
// TODO Auto-generated method stub
return null;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.onosproject.yangutils.datamodel.YangNode#setPackage(java.lang.String)
- */
@Override
public void setPackage(String pkg) {
// TODO Auto-generated method stub
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.onosproject.yangutils.translator.CodeGenerator#generateJavaCodeEntry(
- * )
- */
@Override
- public void generateJavaCodeEntry() {
+ public void generateJavaCodeEntry(String codeGenDir) {
// TODO Auto-generated method stub
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.onosproject.yangutils.translator.CodeGenerator#generateJavaCodeExit()
- */
@Override
public void generateJavaCodeExit() {
// TODO Auto-generated method stub
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java b/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
index edd23b7..3a97571 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
@@ -16,18 +16,19 @@
package org.onosproject.yangutils.datamodel;
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
import org.onosproject.yangutils.parser.Parsable;
-import org.onosproject.yangutils.utils.YangConstructType;
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.YangConstructType;
import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
/*-
* Reference RFC 6020.
@@ -476,20 +477,24 @@
/**
* Generate the java code corresponding to YANG container.
*
- * @throws IOException when fails to generate the source files
+ * @param codeGenDir code generation directory
+ * @throws IOException when fails to generate the source files.
*/
@Override
- public void generateJavaCodeEntry() throws IOException {
+ public void generateJavaCodeEntry(String codeGenDir) throws IOException {
YangNode parent = getParent();
String contPkg = JavaIdentifierSyntax.getPackageFromParent(parent.getPackage(), parent.getName());
+
+ contPkg = JavaIdentifierSyntax.getCamelCase(contPkg).toLowerCase();
setPackage(contPkg);
CachedFileHandle handle = null;
try {
- FileSystemUtil.createPackage(UtilConstants.YANG_GEN_DIR + getPackage(), getName());
+ FileSystemUtil.createPackage(codeGenDir + getPackage(), parent.getName() + UtilConstants.CHILDREN);
handle = FileSystemUtil.createSourceFiles(getPackage(), getName(),
GeneratedFileType.GENERATE_INTERFACE_WITH_BUILDER);
- handle.setRelativeFilePath(UtilConstants.YANG_GEN_DIR + getPackage().replace(".", "/"));
+ handle.setRelativeFilePath(getPackage().replace(".", "/"));
+ handle.setCodeGenFilePath(codeGenDir);
} catch (IOException e) {
throw new IOException("Failed to create the source files.");
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java b/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
index 9d87ee4..7574817 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
@@ -299,9 +299,11 @@
/**
* Generate the code for YANG grouping.
+ *
+ * @param codeGenDir code generated directory.
*/
@Override
- public void generateJavaCodeEntry() {
+ public void generateJavaCodeEntry(String codeGenDir) {
// TODO Auto-generated method stub
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangList.java b/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
index 4903034..9f0fabd 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
@@ -622,9 +622,11 @@
/**
* Populate the cached handle with information about the list attributes to
* generate java code.
+ *
+ * @param codeGenDir code generated directory
*/
@Override
- public void generateJavaCodeEntry() {
+ public void generateJavaCodeEntry(String codeGenDir) {
// TODO Auto-generated method stub
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
index 95bee5f..69b0376 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
@@ -15,21 +15,21 @@
*/
package org.onosproject.yangutils.datamodel;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
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.YangConstructType;
import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
-
/*-
* Reference:RFC 6020.
* The "module" statement defines the module's name,
@@ -211,7 +211,7 @@
/**
* Get name of the module.
*
- * @return module name.
+ * @return module name
*/
@Override
public String getName() {
@@ -221,7 +221,7 @@
/**
* Set module name.
*
- * @param moduleName module name.
+ * @param moduleName module name
*/
@Override
public void setName(String moduleName) {
@@ -231,7 +231,7 @@
/**
* Get the contact details of the module owner.
*
- * @return the contact details of YANG owner.
+ * @return the contact details of YANG owner
*/
public String getContact() {
return contact;
@@ -240,7 +240,7 @@
/**
* Set the contact details of the module owner.
*
- * @param contact the contact details of YANG owner.
+ * @param contact the contact details of YANG owner
*/
public void setContact(String contact) {
this.contact = contact;
@@ -249,7 +249,7 @@
/**
* Get the description of module.
*
- * @return the description of YANG module.
+ * @return the description of YANG module
*/
@Override
public String getDescription() {
@@ -259,7 +259,7 @@
/**
* Set the description of module.
*
- * @param description set the description of YANG module.
+ * @param description set the description of YANG module
*/
@Override
public void setDescription(String description) {
@@ -269,7 +269,7 @@
/**
* Get the list of imported modules.
*
- * @return the list of imported modules.
+ * @return the list of imported modules
*/
public List<YangImport> getImportList() {
return importList;
@@ -278,7 +278,7 @@
/**
* prevent setting the import list from outside.
*
- * @param importList the import list to set.
+ * @param importList the import list to set
*/
private void setImportList(List<YangImport> importList) {
this.importList = importList;
@@ -287,7 +287,7 @@
/**
* Add the imported module information to the import list.
*
- * @param importedModule module being imported.
+ * @param importedModule module being imported
*/
public void addImportedInfo(YangImport importedModule) {
@@ -303,7 +303,7 @@
/**
* Get the list of included sub modules.
*
- * @return the included list of sub modules.
+ * @return the included list of sub modules
*/
public List<YangInclude> getIncludeList() {
return includeList;
@@ -312,7 +312,7 @@
/**
* Set the list of included sub modules.
*
- * @param includeList the included list to set.
+ * @param includeList the included list to set
*/
private void setIncludeList(List<YangInclude> includeList) {
this.includeList = includeList;
@@ -321,7 +321,7 @@
/**
* Add the included sub module information to the include list.
*
- * @param includeModule submodule being included.
+ * @param includeModule submodule being included
*/
public void addIncludedInfo(YangInclude includeModule) {
@@ -336,7 +336,7 @@
/**
* Get the list of leaves in module.
*
- * @return the list of leaves.
+ * @return the list of leaves
*/
@Override
public List<YangLeaf> getListOfLeaf() {
@@ -346,7 +346,7 @@
/**
* Set the list of leaf in module.
*
- * @param leafsList the list of leaf to set.
+ * @param leafsList the list of leaf to set
*/
private void setListOfLeaf(List<YangLeaf> leafsList) {
listOfLeaf = leafsList;
@@ -355,7 +355,7 @@
/**
* Add a leaf in module.
*
- * @param leaf the leaf to be added.
+ * @param leaf the leaf to be added
*/
@Override
public void addLeaf(YangLeaf leaf) {
@@ -369,7 +369,7 @@
/**
* Get the list of leaf-list from module.
*
- * @return the list of leaf-list.
+ * @return the list of leaf-list
*/
@Override
public List<YangLeafList> getListOfLeafList() {
@@ -379,7 +379,7 @@
/**
* Set the list of leaf-list in module.
*
- * @param listOfLeafList the list of leaf-list to set.
+ * @param listOfLeafList the list of leaf-list to set
*/
private void setListOfLeafList(List<YangLeafList> listOfLeafList) {
this.listOfLeafList = listOfLeafList;
@@ -388,7 +388,7 @@
/**
* Add a leaf-list in module.
*
- * @param leafList the leaf-list to be added.
+ * @param leafList the leaf-list to be added
*/
@Override
public void addLeafList(YangLeafList leafList) {
@@ -402,7 +402,7 @@
/**
* Get the name space of module elements.
*
- * @return the nameSpace.
+ * @return the nameSpace
*/
public YangNameSpace getNameSpace() {
return nameSpace;
@@ -411,7 +411,7 @@
/**
* Set the name space of module elements.
*
- * @param nameSpace the nameSpace to set.
+ * @param nameSpace the nameSpace to set
*/
public void setNameSpace(YangNameSpace nameSpace) {
this.nameSpace = nameSpace;
@@ -420,7 +420,7 @@
/**
* Get the modules organization.
*
- * @return the organization.
+ * @return the organization
*/
public String getOrganization() {
return organization;
@@ -429,7 +429,7 @@
/**
* Set the modules organization.
*
- * @param org the organization to set.
+ * @param org the organization to set
*/
public void setOrganization(String org) {
organization = org;
@@ -447,7 +447,7 @@
/**
* Set the prefix.
*
- * @param prefix the prefix to set.
+ * @param prefix the prefix to set
*/
public void setPrefix(String prefix) {
this.prefix = prefix;
@@ -456,7 +456,7 @@
/**
* Get the textual reference.
*
- * @return the reference.
+ * @return the reference
*/
@Override
public String getReference() {
@@ -466,7 +466,7 @@
/**
* Set the textual reference.
*
- * @param reference the reference to set.
+ * @param reference the reference to set
*/
@Override
public void setReference(String reference) {
@@ -476,7 +476,7 @@
/**
* Get the revision.
*
- * @return the revision.
+ * @return the revision
*/
public YangRevision getRevision() {
return revision;
@@ -485,7 +485,7 @@
/**
* Set the revision.
*
- * @param revision the revision to set.
+ * @param revision the revision to set
*/
public void setRevision(YangRevision revision) {
this.revision = revision;
@@ -494,7 +494,7 @@
/**
* Get the version.
*
- * @return the version.
+ * @return the version
*/
public byte getVersion() {
return version;
@@ -503,7 +503,7 @@
/**
* Set the version.
*
- * @param version the version to set.
+ * @param version the version to set
*/
public void setVersion(byte version) {
this.version = version;
@@ -558,7 +558,7 @@
/**
* Get the list of nested reference's which required resolution.
*
- * @return list of nested reference's which required resolution.
+ * @return list of nested reference's which required resolution
*/
public List<YangNode> getNestedReferenceResoulutionList() {
return nestedReferenceResoulutionList;
@@ -568,7 +568,7 @@
* Set list of nested reference's which requires resolution.
*
* @param nestedReferenceResoulutionList list of nested reference's which
- * requires resolution.
+ * requires resolution
*/
private void setNestedReferenceResoulutionList(List<YangNode> nestedReferenceResoulutionList) {
this.nestedReferenceResoulutionList = nestedReferenceResoulutionList;
@@ -577,7 +577,7 @@
/**
* Set list of nested reference's which requires resolution.
*
- * @param nestedReference nested reference which requires resolution.
+ * @param nestedReference nested reference which requires resolution
*/
public void addToNestedReferenceResoulutionList(YangNode nestedReference) {
if (getNestedReferenceResoulutionList() == null) {
@@ -589,7 +589,7 @@
/**
* Returns the type of the parsed data.
*
- * @return returns MODULE_DATA.
+ * @return returns MODULE_DATA
*/
@Override
public YangConstructType getYangConstructType() {
@@ -625,18 +625,21 @@
/**
* Generates java code for module.
*
- * @throws IOException when fails to generate the source files.
+ * @param codeGenDir code generation directory
+ * @throws IOException when fails to generate the source files
*/
@Override
- public void generateJavaCodeEntry() throws IOException {
+ public void generateJavaCodeEntry(String codeGenDir) throws IOException {
String modPkg = JavaIdentifierSyntax.getRootPackage(getVersion(), getNameSpace().getUri(),
getRevision().getRevDate());
+ modPkg = JavaIdentifierSyntax.getCamelCase(modPkg);
CachedFileHandle handle = null;
try {
- FileSystemUtil.createPackage(UtilConstants.YANG_GEN_DIR + modPkg, getName());
+ FileSystemUtil.createPackage(codeGenDir + modPkg, getName());
handle = FileSystemUtil.createSourceFiles(modPkg, getName(),
GeneratedFileType.GENERATE_INTERFACE_WITH_BUILDER);
+ handle.setCodeGenFilePath(codeGenDir);
} catch (IOException e) {
throw new IOException("Failed to create the source files.");
}
@@ -680,8 +683,8 @@
/**
* Add a type to resolve the nested references.
*
- * @param node grouping or typedef node which needs to be resolved.
- * @throws DataModelException data model exception.
+ * @param node grouping or typedef node which needs to be resolved
+ * @throws DataModelException data model exception
*/
public static void addToResolveList(YangNode node) throws DataModelException {
/* get the module node to add maintain the list of nested reference */
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java b/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
index f2e9119..971f512 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
@@ -470,9 +470,11 @@
/**
* Generates java code for sub-module.
+ *
+ * @param codeGenDir code generation directory.
*/
@Override
- public void generateJavaCodeEntry() {
+ public void generateJavaCodeEntry(String codeGenDir) {
// TODO Auto-generated method stub
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangType.java b/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
index 85db895..dd3e232 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
@@ -47,7 +47,7 @@
/**
* Maintains the data type information.
*
- * @param <T> YANG data type info.
+ * @param <T> YANG data type info
*/
public class YangType<T> implements Parsable {
@@ -57,6 +57,11 @@
private String dataTypeName;
/**
+ * Java package in which the Java type is defined.
+ */
+ private String javaPackage;
+
+ /**
* YANG data type.
*/
private YangDataTypes dataType;
@@ -93,6 +98,24 @@
}
/**
+ * Get the Java package where the type is defined.
+ *
+ * @return Java package where the type is defined
+ */
+ public String getJavaPackage() {
+ return javaPackage;
+ }
+
+ /**
+ * Set Java package where the type is defined.
+ *
+ * @param javaPackage Java package where the type is defined
+ */
+ public void setJavaPackage(String javaPackage) {
+ this.javaPackage = javaPackage;
+ }
+
+ /**
* Get the type of data.
*
* @return the data type
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java b/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
index b1feb31..c8381d0 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
@@ -15,10 +15,16 @@
*/
package org.onosproject.yangutils.datamodel;
+import java.io.IOException;
+
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
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.YangConstructType;
+import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
/*-
* Reference RFC 6020.
@@ -91,6 +97,11 @@
private String pkg;
/**
+ * Cached Java File Handle.
+ */
+ private CachedFileHandle fileHandle;
+
+ /**
* Create a typedef node.
*/
public YangTypeDef() {
@@ -298,20 +309,60 @@
/**
* Generate java code snippet corresponding to YANG typedef.
+ *
+ * @param codeGenDir code generation directory
+ * @throws IOException when fails to generate files for typedef
*/
@Override
- public void generateJavaCodeEntry() {
- // TODO Auto-generated method stub
+ public void generateJavaCodeEntry(String codeGenDir) throws IOException {
+ YangNode parent = getParent();
+ String typeDefPkg = JavaIdentifierSyntax.getPackageFromParent(parent.getPackage(), parent.getName());
+
+ typeDefPkg = JavaIdentifierSyntax.getCamelCase(typeDefPkg).toLowerCase();
+ setPackage(typeDefPkg);
+
+ CachedFileHandle handle = null;
+ try {
+ FileSystemUtil.createPackage(codeGenDir + getPackage(), parent.getName() + UtilConstants.CHILDREN);
+ handle = FileSystemUtil.createSourceFiles(getPackage(), getName(),
+ GeneratedFileType.GENERATE_TYPEDEF_CLASS);
+ handle.setRelativeFilePath(getPackage().replace(".", "/"));
+ handle.setCodeGenFilePath(codeGenDir);
+ } catch (IOException e) {
+ throw new IOException("Failed to create the source files.");
+ }
+ setFileHandle(handle);
+ addAttributeInfo();
+ addAttributeInParent();
+ }
+
+ /**
+ * Adds current node attribute to parent file.
+ */
+ private void addAttributeInParent() {
+ if (getParent() != null) {
+ getParent().getFileHandle().addAttributeInfo(null, getName(), false);
+ }
+ }
+
+ /**
+ * Adds attribute to file handle.
+ */
+ private void addAttributeInfo() {
+ getFileHandle().addAttributeInfo(getDerivedType().getDataTypeExtendedInfo().getBaseType(),
+ JavaIdentifierSyntax.getCamelCase(getName()), false);
}
/**
* Free resource used for code generation of YANG typedef.
+ *
+ * @throws IOException when fails to generate files
*/
@Override
- public void generateJavaCodeExit() {
- // TODO Auto-generated method stub
-
+ public void generateJavaCodeExit() throws IOException {
+ getFileHandle().close();
+ return;
}
/**
@@ -342,18 +393,16 @@
*/
@Override
public CachedFileHandle getFileHandle() {
- // TODO Auto-generated method stub
- return null;
+ return fileHandle;
}
/**
* Set the file handle to be used used for code generation.
*
- * @param fileHandle cached file handle
+ * @param handle cached file handle
*/
@Override
- public void setFileHandle(CachedFileHandle fileHandle) {
- // TODO Auto-generated method stub
-
+ public void setFileHandle(CachedFileHandle handle) {
+ fileHandle = handle;
}
}
diff --git a/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java b/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
index 5e6bee4..9086f9a 100644
--- a/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
+++ b/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
@@ -213,54 +213,36 @@
// TODO auto-generated method stub, to be implemented by parser
}
- /* (non-Javadoc)
- * @see org.onosproject.yangutils.datamodel.YangNode#getName()
- */
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
- /* (non-Javadoc)
- * @see org.onosproject.yangutils.datamodel.YangNode#setName(java.lang.String)
- */
@Override
public void setName(String name) {
// TODO Auto-generated method stub
}
- /* (non-Javadoc)
- * @see org.onosproject.yangutils.translator.CodeGenerator#generateJavaCodeEntry()
- */
@Override
- public void generateJavaCodeEntry() {
+ public void generateJavaCodeEntry(String codeGenDir) {
// TODO Auto-generated method stub
}
- /* (non-Javadoc)
- * @see org.onosproject.yangutils.translator.CodeGenerator#generateJavaCodeExit()
- */
@Override
public void generateJavaCodeExit() {
// TODO Auto-generated method stub
}
- /* (non-Javadoc)
- * @see org.onosproject.yangutils.datamodel.YangNode#getPackage()
- */
@Override
public String getPackage() {
// TODO Auto-generated method stub
return null;
}
- /* (non-Javadoc)
- * @see org.onosproject.yangutils.datamodel.YangNode#setPackage(java.lang.String)
- */
@Override
public void setPackage(String pkg) {
// TODO Auto-generated method stub
diff --git a/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java b/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
index 5ee4f5d..6771421 100644
--- a/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
+++ b/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
@@ -43,7 +43,7 @@
/**
* ONOS YANG utility maven plugin. Goal of plugin is yang2java Execution phase
- * in generate-sources requiresDependencyResolution at compile time
+ * in generate-sources requiresDependencyResolution at compile time.
*/
@Mojo(name = "yang2java", defaultPhase = LifecyclePhase.GENERATE_SOURCES,
requiresDependencyResolution = ResolutionScope.COMPILE, requiresProject = true)
@@ -56,6 +56,12 @@
private String yangFilesDir;
/**
+ * Base directory for project.
+ */
+ @Parameter(property = "basedir", defaultValue = "${basedir}")
+ private String baseDir;
+
+ /**
* Output directory.
*/
@Parameter(property = "project.build.outputDirectory", required = true, defaultValue = "target/classes")
@@ -74,13 +80,13 @@
private BuildContext context;
private YangUtilsParser yangUtilsParser = new YangUtilsParserManager();
- private String baseDir;
private String searchDir;
+ private String codeGenDir;
/**
* Set current project.
*
- * @param curProject maven project.
+ * @param curProject maven project
*/
public void setCurrentProject(final MavenProject curProject) {
project = curProject;
@@ -92,7 +98,6 @@
try {
CopyrightHeader.parseCopyrightHeader();
- baseDir = project.getBasedir().toString();
/**
* For deleting the generated code in previous build.
@@ -100,6 +105,7 @@
YangIoUtils.clean(baseDir);
searchDir = baseDir + File.separator + yangFilesDir;
+ codeGenDir = baseDir + File.separator + UtilConstants.YANG_GEN_DIR;
List<String> yangFiles = YangFileScanner.getYangFiles(searchDir);
Iterator<String> yangFileIterator = yangFiles.iterator();
@@ -107,7 +113,7 @@
String yangFile = yangFileIterator.next();
try {
YangNode yangNode = yangUtilsParser.getDataModel(yangFile);
- JavaCodeGenerator.generateJavaCode(yangNode);
+ JavaCodeGenerator.generateJavaCode(yangNode, codeGenDir);
} catch (ParserException e) {
String logInfo = "Error in file: " + e.getFileName();
if (e.getLineNumber() != 0) {
diff --git a/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java b/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java
index 4c2f808..75350d5 100644
--- a/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java
+++ b/src/main/java/org/onosproject/yangutils/translator/CachedFileHandle.java
@@ -16,9 +16,11 @@
package org.onosproject.yangutils.translator;
+import java.io.FileNotFoundException;
import java.io.IOException;
import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.translator.tojava.utils.TempDataStoreTypes;
/**
* Cached java file handle, which supports the addition of member attributes and
@@ -56,4 +58,43 @@
* @return directory package path for code generation
*/
String getRelativeFilePath();
+
+ /**
+ * Gets base directory package path for code generation.
+ *
+ * @return directory package path for code generation
+ */
+ String getCodeGenFilePath();
+
+ /**
+ * Sets base directory package path for code generation.
+ *
+ * @param path base directory path
+ */
+ void setCodeGenFilePath(String path);
+
+ /**
+ * Writes specific info to a Temp file.
+ *
+ * @param data data to be stored
+ * @param type type of Temp data store
+ * @param className class name
+ * @param genDir generated directory
+ * @throws IOException when fails to create a Temp data file
+ */
+ void setTempData(String data, TempDataStoreTypes type, String className, String genDir) throws IOException;
+
+ /**
+ * Get the Temp data.
+ *
+ * @param type type of Temp data store
+ * @param className name of the class
+ * @param genDir generated directory
+ * @return temp data
+ * @throws IOException when fails to read from the file
+ * @throws ClassNotFoundException when class is missing
+ * @throws FileNotFoundException when file is missing
+ */
+ String getTempData(TempDataStoreTypes type, String className, String genDir)
+ throws IOException, FileNotFoundException, ClassNotFoundException;
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/CodeGenerator.java b/src/main/java/org/onosproject/yangutils/translator/CodeGenerator.java
index 82e15a6..ed0d027 100644
--- a/src/main/java/org/onosproject/yangutils/translator/CodeGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/CodeGenerator.java
@@ -26,9 +26,10 @@
/**
* Traverse the schema of application and generate corresponding code.
*
+ * @param codeGenDir code generation directory
* @throws IOException when fails to translate the data model tree
*/
- void generateJavaCodeEntry() throws IOException;
+ void generateJavaCodeEntry(String codeGenDir) throws IOException;
/**
* Traverse the schema of application and generate corresponding code.
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 9cb1c28..794fb4c 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/AttributeInfo.java
@@ -41,7 +41,7 @@
/**
* If the added attribute has to be accessed in a fully qualified manner.
*/
- private boolean isQualifiedName;
+ private boolean isQualifiedName = false;
/**
* The class info will be used to set the attribute type and package info
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 40c5b0e..5e2cbe3 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/CachedJavaFileHandle.java
@@ -16,21 +16,26 @@
package org.onosproject.yangutils.translator.tojava;
+import java.io.BufferedReader;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
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.JavaFileGenerator;
import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
+import org.onosproject.yangutils.translator.tojava.utils.TempDataStoreTypes;
import org.onosproject.yangutils.utils.UtilConstants;
+import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
/**
* Maintain the information about the java file to be generated.
@@ -40,6 +45,17 @@
private static final int MAX_CACHABLE_ATTR = 64;
private static final String JAVA_FILE_EXTENSION = ".java";
private static final String TEMP_FILE_EXTENSION = ".tmp";
+ private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
+ private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
+ private static final String GETTER_METHOD_IMPL_FILE_NAME = "GetterMethodImpl";
+ private static final String SETTER_METHOD_IMPL_FILE_NAME = "SetterMethodImpl";
+ private static final String CONSTRUCTOR_FILE_NAME = "Constructor";
+ private static final String ATTRIBUTE_FILE_NAME = "Attributes";
+ private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
+ private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
+ private static final String EQUALS_METHOD_FILE_NAME = "Equals";
+ private static final String TYPE_DEF_FILE_NAME = "TypeDef";
+ private static final String TEMP_FOLDER_NAME_SUFIX = "-Temp";
/**
* The type(s) of java source file(s) to be generated when the cached file
@@ -69,9 +85,9 @@
private String relativeFilePath;
/**
- * Typedef Info.
+ * File generation base directory path.
*/
- private YangTypeDef typedefInfo;
+ private String codeGenDirFilePath;
/**
* Prevent invoking default constructor.
@@ -185,33 +201,34 @@
attributeList = attrList;
}
- /**
- * Set the package relative path.
- *
- * @param path package relative path
- */
@Override
public void setRelativeFilePath(String path) {
relativeFilePath = path;
}
- /**
- * Get the package relative path.
- *
- * @return package relative path
- */
@Override
public String getRelativeFilePath() {
return relativeFilePath;
}
+ @Override
+ public String getCodeGenFilePath() {
+ return codeGenDirFilePath;
+ }
+
+ @Override
+ public void setCodeGenFilePath(String path) {
+ codeGenDirFilePath = path;
+ }
+
/**
* Flush the cached attribute list to the corresponding temporary file.
*/
private void flushCacheAttrToTempFile() {
for (AttributeInfo attr : getCachedAttributeList()) {
- JavaFileGenerator.parseAttributeInfo(attr, getGeneratedFileTypes(), getYangName());
+ JavaFileGenerator.parseAttributeInfo(attr, getGeneratedFileTypes(), getYangName(), getCodeGenFilePath() +
+ getRelativeFilePath().replace(UtilConstants.PERIOD, UtilConstants.SLASH), this);
}
/*
@@ -220,14 +237,6 @@
getCachedAttributeList().clear();
}
- /**
- * Add a new attribute to the file(s).
- *
- * @param attrType data type of the added attribute
- * @param name name of the attribute
- * @param isListAttr if the current added attribute needs to be maintained
- * in a list
- */
@Override
public void addAttributeInfo(YangType<?> attrType, String name, boolean isListAttr) {
/* YANG name is mapped to java name */
@@ -256,16 +265,29 @@
} else {
importInfo.setClassInfo(JavaIdentifierSyntax.getCaptialCase(name));
-
importInfo.setPkgInfo(getRelativeFilePath().replace('/', '.')
- + "." + getYangName());
+ + "." + getYangName().toLowerCase());
isImport = true;
}
newAttr.setQualifiedName(false);
if (isImport) {
- boolean isNewImport = addImportInfo(importInfo);
- if (!isNewImport) {
+ addImportInfo(importInfo);
+ }
+
+ if (isListAttr) {
+ ImportInfo listImportInfo = new ImportInfo();
+ listImportInfo.setPkgInfo(UtilConstants.COLLECTION_IMPORTS);
+ listImportInfo.setClassInfo(UtilConstants.LIST);
+ addImportInfo(listImportInfo);
+ }
+
+ /**
+ * If two classes with different packages have same class info for import than use qualified name.
+ */
+ for (ImportInfo imports : getImportSet()) {
+ if (imports.getClassInfo().equals(importInfo.getClassInfo())
+ && !imports.getPkgInfo().equals(importInfo.getPkgInfo())) {
newAttr.setQualifiedName(true);
}
}
@@ -280,9 +302,6 @@
getCachedAttributeList().add(newAttr);
}
- /**
- * Flushes the cached contents to the target file, frees used resources.
- */
@Override
public void close() throws IOException {
@@ -298,17 +317,18 @@
* JavaCodeSnippetGen.getFileHeaderComment
*/
- List<String> imports = new LinkedList<>();
+ List<String> imports = new ArrayList<>();
String importString;
- for (ImportInfo importInfo : getImportSet()) {
- importString = "";
+ for (ImportInfo importInfo : new ArrayList<ImportInfo>(getImportSet())) {
+ importString = UtilConstants.IMPORT;
if (importInfo.getPkgInfo() != null) {
importString = importString + importInfo.getPkgInfo() + ".";
}
- importString = importString + importInfo.getClassInfo();
+ importString = importString + importInfo.getClassInfo() + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE;
imports.add(importString);
}
+ java.util.Collections.sort(imports);
/**
* Start generation of files.
@@ -320,25 +340,28 @@
* Create interface file.
*/
String interfaceFileName = className;
- File interfaceFile = JavaFileGenerator.getFileObject(path, interfaceFileName, JAVA_FILE_EXTENSION);
+ File interfaceFile = JavaFileGenerator.getFileObject(path, interfaceFileName, JAVA_FILE_EXTENSION, this);
interfaceFile = JavaFileGenerator.generateInterfaceFile(interfaceFile, className, imports,
- getCachedAttributeList(), path.replace('/', '.'));
-
+ getCachedAttributeList(), path.replace('/', '.'), this);
/**
* Create temp builder interface file.
*/
String builderInterfaceFileName = className + UtilConstants.BUILDER + UtilConstants.INTERFACE;
File builderInterfaceFile = JavaFileGenerator.getFileObject(path, builderInterfaceFileName,
- TEMP_FILE_EXTENSION);
+ TEMP_FILE_EXTENSION, this);
builderInterfaceFile = JavaFileGenerator.generateBuilderInterfaceFile(builderInterfaceFile, className,
- path.replace('/', '.'), getCachedAttributeList());
-
+ path.replace('/', '.'), getCachedAttributeList(), this);
/**
* Append builder interface file to interface file and close it.
*/
JavaFileGenerator.appendFileContents(builderInterfaceFile, interfaceFile);
JavaFileGenerator.insert(interfaceFile,
JavaFileGenerator.closeFile(GeneratedFileType.INTERFACE_MASK, interfaceFileName));
+ /**
+ * Close file handle for interface files.
+ */
+ JavaFileGenerator.closeFileHandles(builderInterfaceFile);
+ JavaFileGenerator.closeFileHandles(interfaceFile);
/**
* Remove temp files.
@@ -346,6 +369,10 @@
JavaFileGenerator.clean(builderInterfaceFile);
}
+ imports.add(UtilConstants.MORE_OBJECT_IMPORT);
+ imports.add(UtilConstants.JAVA_UTIL_OBJECTS_IMPORT);
+ java.util.Collections.sort(imports);
+
if ((fileType & GeneratedFileType.BUILDER_CLASS_MASK) != 0
|| fileType == GeneratedFileType.GENERATE_INTERFACE_WITH_BUILDER) {
@@ -353,19 +380,17 @@
* Create builder class file.
*/
String builderFileName = className + UtilConstants.BUILDER;
- File builderFile = JavaFileGenerator.getFileObject(path, builderFileName, JAVA_FILE_EXTENSION);
+ File builderFile = JavaFileGenerator.getFileObject(path, builderFileName, JAVA_FILE_EXTENSION, this);
builderFile = JavaFileGenerator.generateBuilderClassFile(builderFile, className, imports,
- path.replace('/', '.'), getCachedAttributeList());
-
+ path.replace('/', '.'), getCachedAttributeList(), this);
/**
* Create temp impl class file.
*/
String implFileName = className + UtilConstants.IMPL;
- File implTempFile = JavaFileGenerator.getFileObject(path, implFileName, TEMP_FILE_EXTENSION);
+ File implTempFile = JavaFileGenerator.getFileObject(path, implFileName, TEMP_FILE_EXTENSION, this);
implTempFile = JavaFileGenerator.generateImplClassFile(implTempFile, className,
- path.replace('/', '.'), getCachedAttributeList());
-
+ path.replace('/', '.'), getCachedAttributeList(), this);
/**
* Append impl class to builder class and close it.
*/
@@ -374,17 +399,210 @@
JavaFileGenerator.closeFile(GeneratedFileType.BUILDER_CLASS_MASK, builderFileName));
/**
+ * Close file handle for classes files.
+ */
+ JavaFileGenerator.closeFileHandles(implTempFile);
+ JavaFileGenerator.closeFileHandles(builderFile);
+
+ /**
* Remove temp files.
*/
JavaFileGenerator.clean(implTempFile);
}
+
+ if ((fileType & GeneratedFileType.GENERATE_TYPEDEF_CLASS) != 0) {
+
+ /**
+ * Create builder class file.
+ */
+ String typeDefFileName = className;
+ File typeDefFile = JavaFileGenerator.getFileObject(path, typeDefFileName, JAVA_FILE_EXTENSION, this);
+ typeDefFile = JavaFileGenerator.generateTypeDefClassFile(typeDefFile, className, imports,
+ path.replace('/', '.'), getCachedAttributeList(), this);
+ JavaFileGenerator.insert(typeDefFile,
+ JavaFileGenerator.closeFile(GeneratedFileType.GENERATE_TYPEDEF_CLASS, typeDefFileName));
+
+ /**
+ * Close file handle for classes files.
+ */
+ JavaFileGenerator.closeFileHandles(typeDefFile);
+ }
+
+ closeTempDataFileHandles(className, getCodeGenFilePath() + getRelativeFilePath());
+ JavaFileGenerator
+ .cleanTempFiles(new File(getCodeGenFilePath() + getRelativeFilePath() + File.separator + className
+ + TEMP_FOLDER_NAME_SUFIX));
}
- public YangTypeDef getTypedefInfo() {
- return typedefInfo;
+ @Override
+ public void setTempData(String data, TempDataStoreTypes type, String className, String genDir)
+ throws IOException {
+
+ String fileName = "";
+ if (type.equals(TempDataStoreTypes.ATTRIBUTE)) {
+ fileName = ATTRIBUTE_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.GETTER_METHODS)) {
+ fileName = GETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.GETTER_METHODS_IMPL)) {
+ fileName = GETTER_METHOD_IMPL_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.SETTER_METHODS)) {
+ fileName = SETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.SETTER_METHODS_IMPL)) {
+ fileName = SETTER_METHOD_IMPL_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.TYPE_DEF)) {
+ fileName = TYPE_DEF_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.TO_STRING)) {
+ fileName = TO_STRING_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.HASH_CODE)) {
+ fileName = HASH_CODE_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.EQUALS)) {
+ fileName = EQUALS_METHOD_FILE_NAME;
+ } else {
+ fileName = CONSTRUCTOR_FILE_NAME;
+ }
+
+ String path = genDir.replace(UtilConstants.PERIOD, UtilConstants.SLASH)
+ + File.separator + className
+ + TEMP_FOLDER_NAME_SUFIX + File.separator;
+ File dir = new File(path);
+ if (!dir.exists()) {
+ dir.mkdirs();
+ }
+ File file = new File(path + fileName + TEMP_FILE_EXTENSION);
+ try {
+ if (!file.exists()) {
+ file.createNewFile();
+ JavaFileGenerator.insert(file, data);
+ } else {
+ JavaFileGenerator.insert(file, data);
+ }
+ } catch (IOException ex) {
+ throw new IOException("failed to write in temp file.");
+ }
}
- public void setTypedefInfo(YangTypeDef typedefInfo) {
- this.typedefInfo = typedefInfo;
+ @Override
+ public String getTempData(TempDataStoreTypes type, String className, String genDir)
+ throws IOException, FileNotFoundException, ClassNotFoundException {
+
+ String fileName = "";
+ if (type.equals(TempDataStoreTypes.ATTRIBUTE)) {
+ fileName = ATTRIBUTE_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.GETTER_METHODS)) {
+ fileName = GETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.GETTER_METHODS_IMPL)) {
+ fileName = GETTER_METHOD_IMPL_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.SETTER_METHODS)) {
+ fileName = SETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.SETTER_METHODS_IMPL)) {
+ fileName = SETTER_METHOD_IMPL_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.TYPE_DEF)) {
+ fileName = TYPE_DEF_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.TO_STRING)) {
+ fileName = TO_STRING_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.HASH_CODE)) {
+ fileName = HASH_CODE_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreTypes.EQUALS)) {
+ fileName = EQUALS_METHOD_FILE_NAME;
+ } else {
+ fileName = CONSTRUCTOR_FILE_NAME;
+ }
+
+ String path = genDir.replace(UtilConstants.PERIOD, UtilConstants.SLASH)
+ + File.separator + className + TEMP_FOLDER_NAME_SUFIX + File.separator;
+
+ try {
+ return readFile(path + fileName + TEMP_FILE_EXTENSION);
+
+ } catch (FileNotFoundException e) {
+ throw new FileNotFoundException("No such file or directory.");
+ }
+ }
+
+ /**
+ * Reads file and convert it to string.
+ *
+ * @param toAppend file to be converted
+ * @return string of file
+ * @throws IOException when fails to convert to string
+ */
+ private static String readFile(String toAppend) throws IOException {
+ BufferedReader bufferReader = new BufferedReader(new FileReader(toAppend));
+ try {
+ StringBuilder stringBuilder = new StringBuilder();
+ String line = bufferReader.readLine();
+
+ while (line != null) {
+ stringBuilder.append(line);
+ stringBuilder.append("\n");
+ line = bufferReader.readLine();
+ }
+ return stringBuilder.toString();
+ } finally {
+ bufferReader.close();
+ }
+ }
+
+ /**
+ * Closes the temp file handles.
+ *
+ * @param className class name
+ * @param genDir generated directory
+ * @throws IOException when failes to close file handle
+ */
+ private void closeTempDataFileHandles(String className, String genDir)
+ throws IOException {
+
+ String path = genDir.replace(UtilConstants.PERIOD, UtilConstants.SLASH) + File.separator + className
+ + TEMP_FOLDER_NAME_SUFIX + File.separator;
+
+ String fileName = "";
+ fileName = ATTRIBUTE_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = GETTER_METHOD_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = GETTER_METHOD_IMPL_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = SETTER_METHOD_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = SETTER_METHOD_IMPL_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = TYPE_DEF_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = TO_STRING_METHOD_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = HASH_CODE_METHOD_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = EQUALS_METHOD_FILE_NAME;
+ closeTempFile(fileName, path);
+
+ fileName = CONSTRUCTOR_FILE_NAME;
+ closeTempFile(fileName, path);
+ }
+
+ /**
+ * Closes the specific temp file.
+ *
+ * @param fileName temp file name
+ * @param path path
+ * @throws IOException when failed to close file handle
+ */
+ private void closeTempFile(String fileName, String path) throws IOException {
+ File file = new File(path + fileName + TEMP_FILE_EXTENSION);
+ try {
+ if (!file.exists()) {
+ FileSystemUtil.updateFileHandle(file, null, true);
+ }
+ } catch (IOException ex) {
+ throw new IOException("failed to close the temp file handle.");
+ }
}
}
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 308020b..40e4f1e 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java
@@ -35,16 +35,16 @@
* Generate Java code files corresponding to the YANG schema.
*
* @param rootNode root node of the data model tree
- * @throws IOException when fails to generate java code file the current
- * node
+ * @param codeGenDir code generation directory
+ * @throws IOException when fails to generate java code file the current node
*/
- public static void generateJavaCode(YangNode rootNode) throws IOException {
+ public static void generateJavaCode(YangNode rootNode, String codeGenDir) throws IOException {
YangNode curNode = rootNode;
TraversalType curTraversal = TraversalType.ROOT;
while (!(curNode == null)) {
if (curTraversal != TraversalType.PARENT) {
- curNode.generateJavaCodeEntry();
+ curNode.generateJavaCodeEntry(codeGenDir);
}
if (curTraversal != TraversalType.PARENT && curNode.getChild() != null) {
curTraversal = TraversalType.CHILD;
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
index 70869b2..138b7d4 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/AttributesJavaDataType.java
@@ -79,7 +79,7 @@
} else if (type.equals(YangDataTypes.INSTANCE_IDENTIFIER)) {
//TODO:INSTANCE_IDENTIFIER
} else if (type.equals(YangDataTypes.DERIVED)) {
- //TODO:DERIVED
+ return yangType.getDataTypeName();
}
return null;
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
index 41a3117..58a0896 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
@@ -56,6 +56,9 @@
} else if ((genFileTypes & GeneratedFileType.BUILDER_INTERFACE_MASK) != 0) {
return getBuilderInterfaceDefinition(yangName);
+ } else if ((genFileTypes & GeneratedFileType.GENERATE_TYPEDEF_CLASS) != 0) {
+
+ return getTypeDefClassDefinition(yangName);
}
return null;
}
@@ -94,7 +97,7 @@
return UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.CLASS + UtilConstants.SPACE + yangName
+ UtilConstants.BUILDER + UtilConstants.SPACE + UtilConstants.IMPLEMENTS + UtilConstants.SPACE
- + yangName + UtilConstants.PERIOD + UtilConstants.BUILDER + UtilConstants.SPACE
+ + yangName + UtilConstants.PERIOD + yangName + UtilConstants.BUILDER + UtilConstants.SPACE
+ UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE;
}
@@ -108,8 +111,22 @@
return UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.FINAL + UtilConstants.SPACE
+ UtilConstants.CLASS + UtilConstants.SPACE + yangName + UtilConstants.IMPL + UtilConstants.SPACE
- + UtilConstants.IMPLEMENTS + UtilConstants.SPACE + yangName + UtilConstants.OPEN_CURLY_BRACKET
+ + UtilConstants.IMPLEMENTS + UtilConstants.SPACE + yangName + UtilConstants.SPACE
+ + UtilConstants.OPEN_CURLY_BRACKET
+ UtilConstants.SPACE + UtilConstants.NEW_LINE;
}
+ /**
+ * Returns typeDef file class definition.
+ *
+ * @param yangName file name
+ * @return definition
+ */
+ private static String getTypeDefClassDefinition(String yangName) {
+
+ return UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.FINAL + UtilConstants.SPACE
+ + UtilConstants.CLASS + UtilConstants.SPACE + yangName + UtilConstants.SPACE
+ + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.SPACE + UtilConstants.NEW_LINE;
+ }
+
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
index 4d6a475..4d8180e 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
@@ -78,25 +78,37 @@
* @param javaAttributeTypePkg Package of the attribute type
* @param javaAttributeType java attribute type
* @param javaAttributeName name of the attribute
+ * @param isList is list attribute
* @return the textual java code for attribute definition in class
*/
public static String getJavaAttributeDefination(String javaAttributeTypePkg, String javaAttributeType,
- String javaAttributeName) {
+ String javaAttributeName, boolean isList) {
String attributeDefination = UtilConstants.PRIVATE
+ UtilConstants.SPACE;
- if (javaAttributeTypePkg != null) {
+ if (!isList) {
+ if (javaAttributeTypePkg != null) {
+ attributeDefination = attributeDefination
+ + javaAttributeTypePkg + ".";
+ }
+
attributeDefination = attributeDefination
- + javaAttributeTypePkg + ".";
+ + javaAttributeType
+ + UtilConstants.SPACE
+ + javaAttributeName
+ + UtilConstants.SEMI_COLAN;
+ } else {
+ attributeDefination = attributeDefination + UtilConstants.LIST + UtilConstants.DIAMOND_OPEN_BRACKET;
+ if (javaAttributeTypePkg != null) {
+ attributeDefination = attributeDefination
+ + javaAttributeTypePkg + ".";
+ }
+
+ attributeDefination = attributeDefination
+ + javaAttributeType + UtilConstants.DIAMOND_CLOSE_BRACKET + UtilConstants.SPACE
+ + javaAttributeName + UtilConstants.SEMI_COLAN;
}
-
- attributeDefination = attributeDefination
- + javaAttributeType
- + UtilConstants.SPACE
- + javaAttributeName
- + UtilConstants.SEMI_COLAN;
-
return attributeDefination;
}
@@ -126,6 +138,9 @@
} else if ((genFileTypes & GeneratedFileType.BUILDER_CLASS_MASK) != 0) {
return UtilConstants.CLOSE_CURLY_BRACKET;
+ } else if ((genFileTypes & GeneratedFileType.GENERATE_TYPEDEF_CLASS) != 0) {
+
+ return UtilConstants.CLOSE_CURLY_BRACKET;
}
return null;
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
index ff275ae..0ae81f7 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
@@ -16,26 +16,28 @@
package org.onosproject.yangutils.translator.tojava.utils;
+import static org.onosproject.yangutils.translator.GeneratedFileType.BUILDER_CLASS_MASK;
+import static org.onosproject.yangutils.translator.GeneratedFileType.BUILDER_INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.GeneratedFileType.GENERATE_TYPEDEF_CLASS;
+import static org.onosproject.yangutils.translator.GeneratedFileType.IMPL_CLASS_MASK;
+import static org.onosproject.yangutils.translator.GeneratedFileType.INTERFACE_MASK;
+import static org.slf4j.LoggerFactory.getLogger;
+
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.io.FileUtils;
+import org.onosproject.yangutils.translator.CachedFileHandle;
import org.onosproject.yangutils.translator.tojava.AttributeInfo;
import org.onosproject.yangutils.utils.UtilConstants;
import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
-import org.onosproject.yangutils.utils.io.impl.TempDataStore;
-import org.onosproject.yangutils.utils.io.impl.TempDataStore.TempDataStoreType;
import org.slf4j.Logger;
-import static org.onosproject.yangutils.translator.GeneratedFileType.BUILDER_CLASS_MASK;
-import static org.onosproject.yangutils.translator.GeneratedFileType.BUILDER_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.GeneratedFileType.IMPL_CLASS_MASK;
-import static org.onosproject.yangutils.translator.GeneratedFileType.INTERFACE_MASK;
-import static org.slf4j.LoggerFactory.getLogger;
-
/**
* Generates java file.
*/
@@ -55,10 +57,11 @@
* @param fileName file name
* @param filePath file package path
* @param extension file extension
+ * @param handle cached file handle
* @return file object
*/
- public static File getFileObject(String filePath, String fileName, String extension) {
- return new File(UtilConstants.YANG_GEN_DIR + filePath + File.separator + fileName + extension);
+ public static File getFileObject(String filePath, String fileName, String extension, CachedFileHandle handle) {
+ return new File(handle.getCodeGenFilePath() + filePath + File.separator + fileName + extension);
}
/**
@@ -69,17 +72,18 @@
* @param imports imports for the file
* @param attrList attribute info
* @param pkg generated file package
+ * @param handle cached file handle
* @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 {
-
+ List<AttributeInfo> attrList, String pkg, CachedFileHandle handle) throws IOException {
+ String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
initiateFile(file, className, INTERFACE_MASK, imports, pkg);
- List<String> methods;
+ List<String> methods = new ArrayList<>();
try {
- methods = TempDataStore.getTempData(TempDataStoreType.GETTER_METHODS, className);
+ methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS, className, path));
} catch (ClassNotFoundException | IOException e) {
log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
throw new IOException("Fail to read data from temp file.");
@@ -101,17 +105,19 @@
* @param className class name
* @param pkg generated file package
* @param attrList attribute info
+ * @param handle cached file handle
* @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 {
-
+ List<AttributeInfo> attrList, CachedFileHandle handle) throws IOException {
+ String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
initiateFile(file, className, BUILDER_INTERFACE_MASK, null, pkg);
- List<String> methods;
+ List<String> methods = new ArrayList<>();
+
try {
- methods = TempDataStore.getTempData(TempDataStoreType.BUILDER_INTERFACE_METHODS,
- className + UtilConstants.BUILDER + UtilConstants.INTERFACE);
+ methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS, className, path));
+ methods.add(handle.getTempData(TempDataStoreTypes.SETTER_METHODS, className, path));
} catch (ClassNotFoundException | IOException e) {
log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
throw new IOException("Fail to read data from temp file.");
@@ -126,7 +132,7 @@
* Add getters and setters in builder interface.
*/
for (String method : methods) {
- appendMethod(file, UtilConstants.FOUR_SPACE_INDENTATION + method + UtilConstants.NEW_LINE);
+ appendMethod(file, UtilConstants.FOUR_SPACE_INDENTATION + method);
}
insert(file, UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE);
@@ -141,20 +147,21 @@
* @param imports imports for the file
* @param pkg generated file package
* @param attrList attribute info
+ * @param handle cached file handle
* @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 {
-
+ List<AttributeInfo> attrList, CachedFileHandle handle) throws IOException {
+ String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
initiateFile(file, className, BUILDER_CLASS_MASK, imports, pkg);
/**
* Add attribute strings.
*/
- List<String> attributes;
+ List<String> attributes = new ArrayList<>();
try {
- attributes = TempDataStore.getTempData(TempDataStoreType.ATTRIBUTE, className);
+ attributes.add(handle.getTempData(TempDataStoreTypes.ATTRIBUTE, className, path));
} catch (ClassNotFoundException | IOException e) {
log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
throw new IOException("Fail to read data from temp file.");
@@ -165,11 +172,11 @@
for (String attribute : attributes) {
insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
}
- insert(file, UtilConstants.NEW_LINE);
- List<String> methods;
+ List<String> methods = new ArrayList<>();
try {
- methods = TempDataStore.getTempData(TempDataStoreType.BUILDER_METHODS, className + UtilConstants.BUILDER);
+ methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS_IMPL, className, path));
+ methods.add(handle.getTempData(TempDataStoreTypes.SETTER_METHODS_IMPL, className, path));
} catch (ClassNotFoundException | IOException e) {
log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
throw new IOException("Fail to read data from temp file.");
@@ -179,7 +186,8 @@
* Add default constructor and build method impl.
*/
methods.add(UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
- + MethodsGenerator.getDefaultConstructorString(BUILDER_CLASS_MASK, className));
+ + MethodsGenerator.getDefaultConstructorString(className + UtilConstants.BUILDER,
+ UtilConstants.PUBLIC));
methods.add(MethodsGenerator.getBuildString(className));
/**
@@ -198,17 +206,19 @@
* @param className class name
* @param pkg generated file package
* @param attrList attribute's info
+ * @param handle cached file handle
* @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 {
+ public static File generateImplClassFile(File file, String className, String pkg, List<AttributeInfo> attrList,
+ CachedFileHandle handle)
+ throws IOException {
+ String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
+ initiateFile(file, className, IMPL_CLASS_MASK, null, path);
- initiateFile(file, className, IMPL_CLASS_MASK, null, pkg);
-
- List<String> attributes;
+ List<String> attributes = new ArrayList<>();
try {
- attributes = TempDataStore.getTempData(TempDataStoreType.ATTRIBUTE, className);
+ attributes.add(handle.getTempData(TempDataStoreTypes.ATTRIBUTE, className, path));
} catch (ClassNotFoundException | IOException e) {
log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
throw new IOException("Fail to read data from temp file.");
@@ -220,24 +230,34 @@
for (String attribute : attributes) {
insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
}
- insert(file, UtilConstants.NEW_LINE);
- List<String> methods;
+ List<String> methods = new ArrayList<>();
try {
- methods = TempDataStore.getTempData(TempDataStoreType.IMPL_METHODS, className + UtilConstants.IMPL);
+
+ methods.add(handle.getTempData(TempDataStoreTypes.GETTER_METHODS_IMPL, className, path));
+
+ methods.add(getConstructorString(className)
+ + handle.getTempData(TempDataStoreTypes.CONSTRUCTOR, className, path)
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET);
+
+ methods.add(MethodsGenerator.getHashCodeMethodClose(MethodsGenerator.getHashCodeMethodOpen()
+ + handle.getTempData(TempDataStoreTypes.HASH_CODE, className, path).replace(UtilConstants.NEW_LINE,
+ "")));
+
+ methods.add(MethodsGenerator
+ .getEqualsMethodClose(MethodsGenerator.getEqualsMethodOpen(className + UtilConstants.IMPL)
+ + handle.getTempData(TempDataStoreTypes.EQUALS, className, path)));
+
+ methods.add(MethodsGenerator.getToStringMethodOpen()
+ + handle.getTempData(TempDataStoreTypes.TO_STRING, className, path)
+ + MethodsGenerator.getToStringMethodClose());
+
} catch (ClassNotFoundException | IOException e) {
log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
throw new IOException("Fail to read data from temp file.");
}
/**
- * Add default constructor and constructor methods.
- */
- methods.add(UtilConstants.JAVA_DOC_FIRST_LINE
- + MethodsGenerator.getDefaultConstructorString(IMPL_CLASS_MASK, className));
- methods.add(MethodsGenerator.getConstructorString(className));
-
- /**
* Add methods in impl class.
*/
for (String method : methods) {
@@ -249,6 +269,58 @@
}
/**
+ * Generate class file for type def.
+ *
+ * @param file generated file
+ * @param className file name
+ * @param imports imports for file
+ * @param pkg package path
+ * @param cachedAttributeList attribute list
+ * @param handle cached file handle
+ * @return type def class file
+ * @throws IOException when fails to generate class file
+ */
+ public static File generateTypeDefClassFile(File file, String className, List<String> imports,
+ String pkg, List<AttributeInfo> cachedAttributeList, CachedFileHandle handle) throws IOException {
+ String path = handle.getCodeGenFilePath() + pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH);
+ initiateFile(file, className, GENERATE_TYPEDEF_CLASS, imports, pkg);
+
+ List<String> typeDef = new ArrayList<>();
+ try {
+ typeDef.add(handle.getTempData(TempDataStoreTypes.TYPE_DEF, className, path));
+ } catch (ClassNotFoundException | IOException e) {
+ log.info("There is no attribute info of " + className + " YANG file in the temporary files.");
+ throw new IOException("Fail to read data from temp file.");
+ }
+
+ /**
+ * Add attributes to the file.
+ */
+ for (String attribute : typeDef) {
+ insert(file, UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + attribute);
+ }
+
+ return file;
+ }
+
+ /**
+ * Returns constructor string for impl class.
+ *
+ * @param yangName class name
+ * @return constructor string
+ */
+ private static String getConstructorString(String yangName) {
+
+ String builderAttribute = yangName.substring(0, 1).toLowerCase() + yangName.substring(1);
+ String javadoc = MethodsGenerator.getConstructorString(yangName);
+ String constructor = UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + yangName + UtilConstants.IMPL + UtilConstants.OPEN_PARENTHESIS + yangName + UtilConstants.BUILDER
+ + UtilConstants.SPACE + builderAttribute + UtilConstants.OBJECT + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE;
+ return javadoc + constructor;
+ }
+
+ /**
* Initiate generation of file based on generated file type.
*
* @param file generated file
@@ -288,7 +360,6 @@
*
* @param file file in which method needs to be appended
* @param method method which needs to be appended
- * @exception IOException file operation exceptions
*/
private static void appendMethod(File file, String method) throws IOException {
insert(file, method);
@@ -309,17 +380,30 @@
* Parses attribute info and fetch specific data and creates serialized
* files of it.
*
- * @param attr attribute info
+ * @param attr attribute info.
* @param genFileType generated file type
* @param className class name
+ * @param path file path
+ * @param handle cached file handle
*/
- public static void parseAttributeInfo(AttributeInfo attr, int genFileType, String className) {
+ public static void parseAttributeInfo(AttributeInfo attr, int genFileType, String className, String path,
+ CachedFileHandle handle) {
String attrString = "";
- String builderInterfaceMethodString = "";
- String builderClassMethodString = "";
- String implClassMethodString = "";
+
String getterString = "";
+ String getterImplString = "";
+
+ String setterString = "";
+ String setterImplString = "";
+
+ String constructorString = "";
+ String typeDefString = "";
+
+ String toString = "";
+ String hashCodeString = "";
+ String equalsString = "";
+
className = JavaIdentifierSyntax.getCaptialCase(className);
try {
@@ -327,33 +411,124 @@
* Get the attribute definition and save attributes to temporary
* file.
*/
- attrString = JavaCodeSnippetGen.getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
- attr.getImportInfo().getClassInfo(),
- attr.getAttributeName());
- TempDataStore.setTempData(attrString, TempDataStore.TempDataStoreType.ATTRIBUTE, className);
+
+ boolean isList = attr.isListAttr();
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ if (attr.isQualifiedName()) {
+ attrString = JavaCodeSnippetGen.getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
+ attr.getImportInfo().getClassInfo(),
+ attributeName, attr.isListAttr());
+ } else {
+ attrString = JavaCodeSnippetGen.getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(),
+ attributeName, attr.isListAttr());
+ }
+ handle.setTempData(attrString + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION,
+ TempDataStoreTypes.ATTRIBUTE, className,
+ path);
if ((genFileType & INTERFACE_MASK) != 0) {
getterString = MethodsGenerator.getGetterString(attr);
- TempDataStore.setTempData(getterString, TempDataStore.TempDataStoreType.GETTER_METHODS, className);
+ handle.setTempData(getterString + UtilConstants.NEW_LINE,
+ TempDataStoreTypes.GETTER_METHODS,
+ className,
+ path);
+
}
if ((genFileType & BUILDER_INTERFACE_MASK) != 0) {
- builderInterfaceMethodString = MethodsGenerator.parseBuilderInterfaceMethodString(attr, className);
- TempDataStore.setTempData(builderInterfaceMethodString,
- TempDataStore.TempDataStoreType.BUILDER_INTERFACE_METHODS,
- className + UtilConstants.BUILDER + UtilConstants.INTERFACE);
+ setterString = MethodsGenerator.getSetterString(attr, className);
+ handle.setTempData(setterString + UtilConstants.NEW_LINE,
+ TempDataStoreTypes.SETTER_METHODS,
+ className,
+ path);
}
if ((genFileType & BUILDER_CLASS_MASK) != 0) {
- builderClassMethodString = MethodsGenerator.parseBuilderMethodString(attr, className);
- TempDataStore.setTempData(builderClassMethodString, TempDataStore.TempDataStoreType.BUILDER_METHODS,
- className + UtilConstants.BUILDER);
+ getterImplString = MethodsGenerator.getGetterForClass(attr);
+ handle.setTempData(
+ MethodsGenerator.getOverRideString() + getterImplString + UtilConstants.NEW_LINE,
+ TempDataStoreTypes.GETTER_METHODS_IMPL, className,
+ path);
+ setterImplString = MethodsGenerator.getSetterForClass(attr, className);
+ handle.setTempData(
+ MethodsGenerator.getOverRideString() + setterImplString + UtilConstants.NEW_LINE,
+ TempDataStoreTypes.SETTER_METHODS_IMPL, className,
+ path);
}
if ((genFileType & IMPL_CLASS_MASK) != 0) {
- implClassMethodString = MethodsGenerator.parseImplMethodString(attr);
- TempDataStore.setTempData(implClassMethodString, TempDataStore.TempDataStoreType.IMPL_METHODS,
- className + UtilConstants.IMPL);
+ constructorString = MethodsGenerator.getConstructor(className, attr);
+ handle.setTempData(constructorString, TempDataStoreTypes.CONSTRUCTOR, className,
+ path);
+
+ hashCodeString = MethodsGenerator.getHashCodeMethod(attr);
+ handle.setTempData(hashCodeString + UtilConstants.NEW_LINE,
+ TempDataStoreTypes.HASH_CODE,
+ className,
+ path);
+ equalsString = MethodsGenerator.getEqualsMethod(attr);
+ handle.setTempData(equalsString + UtilConstants.NEW_LINE,
+ TempDataStoreTypes.EQUALS,
+ className,
+ path);
+
+ toString = MethodsGenerator.getToStringMethod(attr);
+ handle.setTempData(toString + UtilConstants.NEW_LINE,
+ TempDataStoreTypes.TO_STRING,
+ className,
+ path);
+
+ }
+
+ if ((genFileType & GENERATE_TYPEDEF_CLASS) != 0) {
+
+ if (attr.isQualifiedName()) {
+ typeDefString = JavaCodeSnippetGen.getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(),
+ attr.getImportInfo().getClassInfo(),
+ attributeName, attr.isListAttr()) + UtilConstants.NEW_LINE;
+ } else {
+ typeDefString = JavaCodeSnippetGen.getJavaAttributeDefination(null,
+ attr.getImportInfo().getClassInfo(),
+ attributeName, attr.isListAttr()) + UtilConstants.NEW_LINE;
+ }
+
+ typeDefString = typeDefString + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.JAVA_DOC_FIRST_LINE;
+
+ typeDefString = typeDefString
+ + MethodsGenerator.getDefaultConstructorString(className, UtilConstants.PRIVATE)
+ + UtilConstants.NEW_LINE;
+
+ typeDefString = typeDefString
+ + JavaDocGen.getJavaDoc(JavaDocType.TYPE_DEF_CONSTRUCTOR, className, isList)
+ + MethodsGenerator.getTypeDefConstructor(attr, className)
+ + UtilConstants.NEW_LINE;
+
+ typeDefString = typeDefString + JavaDocGen.getJavaDoc(JavaDocType.OF, className, isList)
+ + MethodsGenerator.getOfMethod(className, attr) + UtilConstants.NEW_LINE;
+
+ typeDefString = typeDefString + JavaDocGen.getJavaDoc(JavaDocType.GETTER, className, isList)
+ + MethodsGenerator.getGetterForClass(attr) + UtilConstants.NEW_LINE;
+
+ typeDefString = typeDefString + JavaDocGen.getJavaDoc(JavaDocType.TYPE_DEF_SETTER, className, isList)
+ + MethodsGenerator.getSetterForTypeDefClass(attr)
+ + UtilConstants.NEW_LINE;
+
+ hashCodeString = hashCodeString + MethodsGenerator.getHashCodeMethodOpen()
+ + MethodsGenerator.getHashCodeMethod(attr).replace(UtilConstants.NEW_LINE, "");
+ hashCodeString = MethodsGenerator.getHashCodeMethodClose(hashCodeString) + UtilConstants.NEW_LINE;
+
+ equalsString = equalsString + MethodsGenerator.getEqualsMethodOpen(className) + UtilConstants.NEW_LINE
+ + MethodsGenerator.getEqualsMethod(attr);
+ equalsString = MethodsGenerator.getEqualsMethodClose(equalsString) + UtilConstants.NEW_LINE;
+
+ toString = toString + MethodsGenerator.getToStringMethodOpen()
+ + MethodsGenerator.getToStringMethod(attr) + UtilConstants.NEW_LINE
+ + MethodsGenerator.getToStringMethodClose()
+ + UtilConstants.NEW_LINE;
+ typeDefString = typeDefString + hashCodeString + equalsString + toString;
+ handle.setTempData(typeDefString, TempDataStoreTypes.TYPE_DEF, className,
+ path);
}
} catch (IOException e) {
log.info("Failed to set data for " + attr.getAttributeName() + " in temp data files.");
@@ -368,18 +543,34 @@
* @param fileName generated file name
* @param type generated file type
* @param pkg generated file package
- * @param importsList list of java imports
+ * @param importsList list of java imports.
* @throws IOException when fails to append contents
*/
private static void appendContents(File file, String fileName, int type, List<String> importsList,
String pkg) throws IOException {
+ if (pkg.contains(UtilConstants.YANG_GEN_DIR)) {
+ String[] strArray = pkg.split(UtilConstants.YANG_GEN_DIR);
+ pkg = strArray[1].replace(UtilConstants.SLASH, UtilConstants.PERIOD);
+ }
+
if ((type & IMPL_CLASS_MASK) != 0) {
write(file, fileName, type, JavaDocType.IMPL_CLASS);
} else if ((type & BUILDER_INTERFACE_MASK) != 0) {
write(file, fileName, type, JavaDocType.BUILDER_INTERFACE);
+ } else if ((type & GENERATE_TYPEDEF_CLASS) != 0) {
+ insert(file, CopyrightHeader.getCopyrightHeader());
+ insert(file, "package" + UtilConstants.SPACE + pkg + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE);
+ if (importsList != null) {
+ insert(file, UtilConstants.NEW_LINE);
+ for (String imports : importsList) {
+ insert(file, imports);
+ }
+ insert(file, UtilConstants.NEW_LINE);
+ }
+ write(file, fileName, type, JavaDocType.IMPL_CLASS);
} else {
if ((type & INTERFACE_MASK) != 0) {
@@ -420,7 +611,7 @@
private static void write(File file, String fileName, int genType, JavaDocGen.JavaDocType javaDocType)
throws IOException {
- insert(file, JavaDocGen.getJavaDoc(javaDocType, fileName));
+ insert(file, JavaDocGen.getJavaDoc(javaDocType, fileName, false));
insert(file, JavaCodeSnippetGen.getJavaClassDefStart(genType, fileName));
}
@@ -433,13 +624,27 @@
*/
public static void insert(File file, String data) throws IOException {
try {
- FileSystemUtil.insertStringInFile(file, data);
+ FileSystemUtil.updateFileHandle(file, data, false);
} catch (IOException e) {
throw new IOException("Failed to insert in " + file + "file");
}
}
/**
+ * Closes the files handle for generate files.
+ *
+ * @param file generate files
+ * @throws IOException when failed to close the file handle
+ */
+ public static void closeFileHandles(File file) throws IOException {
+ try {
+ FileSystemUtil.updateFileHandle(file, null, true);
+ } catch (IOException e) {
+ throw new IOException("Failed to close file handle for " + file + "file");
+ }
+ }
+
+ /**
* Removes temp files.
*
* @param file file to be removed
@@ -449,4 +654,14 @@
file.delete();
}
}
+
+ /**
+ * Removes temp files.
+ *
+ * @param tempDir temp directory
+ * @throws IOException when fails to delete the directory
+ */
+ public static void cleanTempFiles(File tempDir) throws IOException {
+ FileUtils.deleteDirectory(tempDir);
+ }
}
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 dd543ca..2f79931 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
@@ -31,7 +31,6 @@
private static final int INDEX_ZERO = 0;
private static final int INDEX_ONE = 1;
private static final int INDEX_TWO = 2;
- private static final int INDEX_THREE = 3;
/**
* Default constructor.
@@ -100,9 +99,7 @@
String[] revisionArr = date.split(UtilConstants.HYPHEN);
String rev = "rev";
- String year = revisionArr[INDEX_ZERO];
- char[] yearBytes = year.toCharArray();
- rev = rev + yearBytes[INDEX_TWO] + yearBytes[INDEX_THREE];
+ rev = rev + revisionArr[INDEX_ZERO];
if ((Integer.parseInt(revisionArr[INDEX_ONE]) <= MAX_MONTHS)
&& Integer.parseInt(revisionArr[INDEX_TWO]) <= MAX_DAYS) {
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 e2e6211..6ca6829 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
@@ -19,6 +19,7 @@
import org.onosproject.yangutils.translator.tojava.AttributeInfo;
import org.onosproject.yangutils.utils.UtilConstants;
import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
+import org.onosproject.yangutils.utils.io.impl.YangIoUtils;
/**
* Generated methods for generated files based on the file type.
@@ -32,45 +33,6 @@
}
/**
- * Returns the methods strings for builder class.
- *
- * @param attr attribute info
- * @param className java class name
- * @return method string for builder class
- */
- static String parseBuilderMethodString(AttributeInfo attr, String className) {
- String attrQuaifiedType = "";
- if (attr.getImportInfo().getPkgInfo() != null) {
- attrQuaifiedType = attr.getImportInfo().getPkgInfo() + ".";
- }
- attrQuaifiedType = attrQuaifiedType + attr.getImportInfo().getClassInfo();
-
- String overrideString = UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
- + UtilConstants.OVERRIDE + UtilConstants.NEW_LINE;
- String getterString = getGetterForClass(attr.getAttributeName(), attrQuaifiedType);
- String setterString = getSetterForClass(attr.getAttributeName(), attrQuaifiedType, className);
- return overrideString + getterString + UtilConstants.NEW_LINE + overrideString + setterString;
- }
-
- /**
- * Returns the methods strings for builder class.
- *
- * @param attr attribute info
- * @return method string for builder class
- */
- static String parseImplMethodString(AttributeInfo attr) {
-
- String attrQuaifiedType = "";
- if (attr.getImportInfo().getPkgInfo() != null) {
- attrQuaifiedType = attr.getImportInfo().getPkgInfo() + ".";
- }
- attrQuaifiedType = attrQuaifiedType + attr.getImportInfo().getClassInfo();
-
- return UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.OVERRIDE
- + UtilConstants.NEW_LINE + getGetterForClass(attr.getAttributeName(), attrQuaifiedType);
- }
-
- /**
* Returns the methods strings for builder interface.
*
* @param attr attribute info
@@ -90,7 +52,7 @@
*/
public static String parseBuilderInterfaceBuildMethodString(String name) {
- return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.BUILD, name)
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.BUILD, name, false)
+ getBuildForInterface(name);
}
@@ -103,14 +65,17 @@
public static String getGetterString(AttributeInfo attr) {
String returnType = "";
- if (attr.getImportInfo().getPkgInfo() != null) {
+ boolean isList = attr.isListAttr();
+ if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
returnType = attr.getImportInfo().getPkgInfo() + ".";
}
returnType = returnType + attr.getImportInfo().getClassInfo();
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
- return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.GETTER, attr.getAttributeName())
- + getGetterForInterface(attr.getAttributeName(), returnType)
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.GETTER, attributeName, isList) +
+
+ getGetterForInterface(attributeName, returnType, attr.isListAttr())
+ UtilConstants.NEW_LINE;
}
@@ -121,17 +86,20 @@
* @param className java class name
* @return setter string
*/
- private static String getSetterString(AttributeInfo attr, String className) {
+ public static String getSetterString(AttributeInfo attr, String className) {
String attrType = "";
- if (attr.getImportInfo().getPkgInfo() != null) {
+ boolean isList = attr.isListAttr();
+ if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
attrType = attr.getImportInfo().getPkgInfo() + ".";
}
attrType = attrType + attr.getImportInfo().getClassInfo();
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
- return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.SETTER, attr.getAttributeName())
- + getSetterForInterface(attr.getAttributeName(), attrType, className);
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.SETTER, attributeName, isList)
+ + getSetterForInterface(attributeName, attrType, className, attr.isListAttr())
+ + UtilConstants.NEW_LINE;
}
/**
@@ -142,21 +110,75 @@
*/
public static String getConstructorString(String name) {
- return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.CONSTRUCTOR, name)
- + getConstructor(name);
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.CONSTRUCTOR, name, false);
}
/**
* Returns default constructor method string.
*
- * @param type generated file type
* @param name class name
+ * @param modifierType modifier type
* @return default constructor string
*/
- public static String getDefaultConstructorString(int type, String name) {
+ public static String getDefaultConstructorString(String name, String modifierType) {
- return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR, name)
- + getDefaultConstructor(name + UtilConstants.BUILDER);
+ return JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR, name, false)
+ + getDefaultConstructor(name, modifierType);
+ }
+
+ /**
+ * Returns default constructor method string.
+ *
+ * @param attr attribute info
+ * @param className class name
+ * @return default constructor string
+ */
+ public static String getTypeDefConstructor(AttributeInfo attr, String className) {
+
+ String attrQuaifiedType = "";
+ if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
+ attrQuaifiedType = attr.getImportInfo().getPkgInfo() + ".";
+ }
+ attrQuaifiedType = attrQuaifiedType + attr.getImportInfo().getClassInfo();
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+
+ if (!attr.isListAttr()) {
+ return getTypeDefConstructorString(attrQuaifiedType, attributeName, className);
+ }
+ String listAttr = getListString() + attrQuaifiedType + UtilConstants.DIAMOND_CLOSE_BRACKET;
+ return getTypeDefConstructorString(listAttr, attributeName, className);
+ }
+
+ /**
+ * Returns type def's constructor for attribute.
+ *
+ * @param type data type
+ * @param name attribute name
+ * @param className class name
+ * @return setter for type def's attribute
+ */
+ private static String getTypeDefConstructorString(String type, String name, String className) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + className + UtilConstants.OPEN_PARENTHESIS
+ + type + UtilConstants.SPACE + "value" + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE
+ + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.THIS
+ + UtilConstants.PERIOD + name + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.SPACE
+ + "value" + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * Returns check not null string.
+ *
+ * @param name attribute name
+ * @return check not null string
+ */
+ public static String getCheckNotNull(String name) {
+ return UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.CHECK_NOT_NULL_STRING
+ + UtilConstants.OPEN_PARENTHESIS + name + UtilConstants.COMMA + UtilConstants.SPACE + name
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE;
}
/**
@@ -174,56 +196,171 @@
/**
* Returns the getter method strings for class file.
*
- * @param attrName name of the attribute
- * @param attrType return type of attribute
+ * @param attr attribute info
* @return getter method for class
*/
- private static String getGetterForClass(String attrName, String attrType) {
+ public static String getGetterForClass(AttributeInfo attr) {
+
+ String attrQuaifiedType = "";
+ if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
+ attrQuaifiedType = attr.getImportInfo().getPkgInfo() + ".";
+ }
+ attrQuaifiedType = attrQuaifiedType + attr.getImportInfo().getClassInfo();
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+
+ if (!attr.isListAttr()) {
+ return getGetter(attrQuaifiedType, attributeName);
+ }
+ String listAttr = getListString() + attrQuaifiedType + UtilConstants.DIAMOND_CLOSE_BRACKET;
+ return getGetter(listAttr, attributeName);
+ }
+
+ /**
+ * Returns getter for attribute.
+ *
+ * @param type return type
+ * @param name attribute name
+ * @return getter for attribute
+ */
+ private static String getGetter(String type, String name) {
return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
- + attrType + UtilConstants.SPACE + UtilConstants.GET_METHOD_PREFIX
- + JavaIdentifierSyntax.getCaptialCase(attrName) + UtilConstants.OPEN_PARENTHESIS
+ + type + UtilConstants.SPACE + UtilConstants.GET_METHOD_PREFIX
+ + JavaIdentifierSyntax.getCaptialCase(name) + UtilConstants.OPEN_PARENTHESIS
+ UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET
+ UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.RETURN
- + UtilConstants.SPACE + attrName + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE
+ + UtilConstants.SPACE + name + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE
+ UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET;
}
/**
* Returns the setter method strings for class file.
*
- * @param attrName name of the attribute
- * @param attrType return type of attribute
+ * @param attr attribute info
* @param className name of the class
* @return setter method for class
*/
- private static String getSetterForClass(String attrName, String attrType, String className) {
+ public static String getSetterForClass(AttributeInfo attr, String className) {
+
+ String attrQuaifiedType = "";
+ if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
+ attrQuaifiedType = attr.getImportInfo().getPkgInfo() + ".";
+ }
+ attrQuaifiedType = attrQuaifiedType + attr.getImportInfo().getClassInfo();
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ if (!attr.isListAttr()) {
+ return getSetter(className, attributeName, attrQuaifiedType);
+ }
+ String listAttr = getListString() + attrQuaifiedType + UtilConstants.DIAMOND_CLOSE_BRACKET;
+ return getSetter(className, attributeName, listAttr);
+ }
+
+ /**
+ * Returns setter for attribute.
+ *
+ * @param className class name
+ * @param name attribute name
+ * @param type return type
+ * @return setter for attribute
+ */
+ private static String getSetter(String className, String name, String type) {
return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ className + UtilConstants.BUILDER + UtilConstants.SPACE + UtilConstants.SET_METHOD_PREFIX
- + JavaIdentifierSyntax.getCaptialCase(attrName) + UtilConstants.OPEN_PARENTHESIS
- + attrType + UtilConstants.SPACE + attrName + UtilConstants.CLOSE_PARENTHESIS
+ + JavaIdentifierSyntax.getCaptialCase(name) + UtilConstants.OPEN_PARENTHESIS
+ + type + UtilConstants.SPACE + name + UtilConstants.CLOSE_PARENTHESIS
+ UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE
+ UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.THIS + UtilConstants.PERIOD
- + attrName + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.SPACE + attrName
- + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION
+ + name + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.SPACE
+ + name + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION
+ UtilConstants.RETURN + UtilConstants.SPACE + UtilConstants.THIS + UtilConstants.SEMI_COLAN
+ UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET;
}
/**
+ * Returns the setter method strings for class file.
+ *
+ * @param attr attribute info
+ * @return setter method for class
+ */
+ public static String getSetterForTypeDefClass(AttributeInfo attr) {
+
+ String attrQuaifiedType = "";
+ if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
+ attrQuaifiedType = attr.getImportInfo().getPkgInfo() + ".";
+ }
+ attrQuaifiedType = attrQuaifiedType + attr.getImportInfo().getClassInfo();
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+
+ if (!attr.isListAttr()) {
+ return getTypeDefSetter(attrQuaifiedType, attributeName);
+ }
+ String listAttr = getListString() + attrQuaifiedType + UtilConstants.DIAMOND_CLOSE_BRACKET;
+ return getTypeDefSetter(listAttr, attributeName);
+ }
+
+ /**
+ * Returns type def's setter for attribute.
+ *
+ * @param type data type
+ * @param name attribute name
+ * @return setter for type def's attribute
+ */
+ private static String getTypeDefSetter(String type, String name) {
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + UtilConstants.VOID + UtilConstants.SPACE + UtilConstants.SET_METHOD_PREFIX
+ + JavaIdentifierSyntax.getCaptialCase(name) + UtilConstants.OPEN_PARENTHESIS
+ + type + UtilConstants.SPACE + "value" + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE
+ + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.THIS + UtilConstants.PERIOD
+ + name + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.SPACE
+ + "value" + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * Returns override string.
+ *
+ * @return override string
+ */
+ public static String getOverRideString() {
+ return UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.OVERRIDE + UtilConstants.NEW_LINE;
+ }
+
+ /**
* Returns the getter method strings for interface file.
*
* @param yangName name of the attribute
* @param returnType return type of attribute
+ * @param isList is list attribute
* @return getter method for interface
*/
- private static String getGetterForInterface(String yangName, String returnType) {
+ public static String getGetterForInterface(String yangName, String returnType, boolean isList) {
+
+ if (!isList) {
+ return getGetterInterfaceString(returnType, yangName);
+ }
+ String listAttr = getListString() + returnType + UtilConstants.DIAMOND_CLOSE_BRACKET;
+ return getGetterInterfaceString(listAttr, yangName);
+ }
+
+ /**
+ * Returns getter for attribute in interface.
+ *
+ * @param returnType return type
+ * @param yangName attribute name
+ * @return getter for interface
+ */
+ private static String getGetterInterfaceString(String returnType, String yangName) {
+
return UtilConstants.FOUR_SPACE_INDENTATION + returnType
+ UtilConstants.SPACE + UtilConstants.GET_METHOD_PREFIX
+ JavaIdentifierSyntax.getCaptialCase(yangName)
+ UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS
+ UtilConstants.SEMI_COLAN;
+
}
/**
@@ -232,9 +369,28 @@
* @param attrName name of the attribute
* @param attrType return type of attribute
* @param className name of the java class being generated
+ * @param isList is list attribute
* @return setter method for interface
*/
- private static String getSetterForInterface(String attrName, String attrType, String className) {
+ public static String getSetterForInterface(String attrName, String attrType, String className, boolean isList) {
+
+ if (!isList) {
+ return getSetterInterfaceString(className, attrName, attrType);
+ }
+ String listAttr = getListString() + attrType + UtilConstants.DIAMOND_CLOSE_BRACKET;
+ return getSetterInterfaceString(className, attrName, listAttr);
+ }
+
+ /**
+ * Returns setter string for interface.
+ *
+ * @param className class name
+ * @param attrName attribute name
+ * @param attrType attribute type
+ * @return setter string
+ */
+ private static String getSetterInterfaceString(String className, String attrName, String attrType) {
+
return UtilConstants.FOUR_SPACE_INDENTATION + className + UtilConstants.BUILDER
+ UtilConstants.SPACE + UtilConstants.SET_METHOD_PREFIX
+ JavaIdentifierSyntax.getCaptialCase(attrName) + UtilConstants.OPEN_PARENTHESIS
@@ -243,48 +399,47 @@
}
/**
+ * Returns list string.
+ *
+ * @return list string
+ */
+ private static String getListString() {
+ return UtilConstants.LIST + UtilConstants.DIAMOND_OPEN_BRACKET;
+ }
+
+ /**
* Returns the build method strings for interface file.
*
* @param yangName name of the interface
* @return build method for interface
*/
- private static String getBuildForInterface(String yangName) {
+ public static String getBuildForInterface(String yangName) {
return UtilConstants.FOUR_SPACE_INDENTATION + yangName + UtilConstants.SPACE + UtilConstants.BUILD
- + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN;
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE;
}
/**
* Returns the constructor strings for class file.
*
* @param yangName name of the class
+ * @param attr attribute info
* @return constructor for class
*/
- private static String getConstructor(String yangName) {
+ public static String getConstructor(String yangName, AttributeInfo attr) {
- String builderAttribute = yangName.substring(0, 1).toLowerCase() + yangName.substring(1);
- String constructor = UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
- + yangName + UtilConstants.IMPL + UtilConstants.OPEN_PARENTHESIS + yangName + UtilConstants.BUILDER
- + UtilConstants.SPACE + builderAttribute + UtilConstants.OBJECT + UtilConstants.CLOSE_PARENTHESIS
- + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE;
+ String builderAttribute = JavaIdentifierSyntax.getLowerCase(yangName);
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ String constructor = UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.THIS
+ + UtilConstants.PERIOD + JavaIdentifierSyntax.getCamelCase(attributeName)
+ + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.SPACE + builderAttribute
+ + UtilConstants.OBJECT + UtilConstants.PERIOD + UtilConstants.GET_METHOD_PREFIX
+ + JavaIdentifierSyntax.getCaptialCase(JavaIdentifierSyntax.getCamelCase(attributeName))
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE;
- // TODO: need to get the partial constructor from constructor temp file.
- // if (getAttrInfo() != null) {
- // for (AttributeInfo attribute : getAttrInfo()) {
- // attribute.setAttributeName(JavaIdentifierSyntax.getCamelCase(attribute.getAttributeName()));
- // constructor = constructor + UtilConstants.TWELVE_SPACE_INDENTATION + UtilConstants.THIS
- // + UtilConstants.PERIOD + attribute.getAttributeName() + UtilConstants.SPACE
- // + UtilConstants.EQUAL + UtilConstants.SPACE + builderAttribute + UtilConstants.OBJECT
- // + UtilConstants.PERIOD + UtilConstants.GET_METHOD_PREFIX
- // + JavaIdentifierSyntax.getCaptialCase(attribute.getAttributeName())
- // + UtilConstants.OPEN_PARENTHESIS
- // + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN
- // + UtilConstants.NEW_LINE;
- // }
- // getAttrInfo().clear();
- // }
-
- return constructor + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET;
+ return constructor;
}
/**
@@ -293,10 +448,10 @@
* @param yangName class name
* @return build method string for class
*/
- private static String getBuild(String yangName) {
+ public static String getBuild(String yangName) {
- return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE + yangName
- + UtilConstants.SPACE + UtilConstants.BUILD + UtilConstants.OPEN_PARENTHESIS
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + yangName + UtilConstants.SPACE + UtilConstants.BUILD + UtilConstants.OPEN_PARENTHESIS
+ UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET
+ UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.RETURN
+ UtilConstants.SPACE + UtilConstants.NEW + UtilConstants.SPACE + yangName + UtilConstants.IMPL
@@ -309,14 +464,205 @@
* Returns the Default constructor strings for class file.
*
* @param name name of the class
+ * @param modifierType modifier type for default constructor
* @return Default constructor for class
*/
- private static String getDefaultConstructor(String name) {
+ private static String getDefaultConstructor(String name, String modifierType) {
- return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE + name
+ return UtilConstants.FOUR_SPACE_INDENTATION + modifierType + UtilConstants.SPACE + name
+ UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE
+ UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE;
}
+ /**
+ * Returns to string method open strings.
+ *
+ * @return to string method open string
+ */
+ public static String getToStringMethodOpen() {
+
+ return getOverRideString() + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + UtilConstants.STRING + UtilConstants.SPACE + "to" + UtilConstants.STRING
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE
+ + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION
+ + UtilConstants.RETURN + " MoreObjects.toStringHelper(getClass())" + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Returns to string methods close string.
+ *
+ * @return to string method close string
+ */
+ public static String getToStringMethodClose() {
+ return UtilConstants.TWELVE_SPACE_INDENTATION + ".to" + UtilConstants.STRING
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * To string method for class.
+ *
+ * @param attr attribute info
+ * @return to string method
+ */
+ public static String getToStringMethod(AttributeInfo attr) {
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ return UtilConstants.TWELVE_SPACE_INDENTATION + UtilConstants.PERIOD + UtilConstants.ADD_STRING
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.QUOTES
+ + attributeName + UtilConstants.QUOTES + UtilConstants.COMMA + UtilConstants.SPACE + attributeName
+ + UtilConstants.CLOSE_PARENTHESIS;
+
+ }
+
+ /**
+ * Returns to hash code method open strings.
+ *
+ * @return to hash code method open string
+ */
+ public static String getHashCodeMethodOpen() {
+
+ return getOverRideString() + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + UtilConstants.INT + UtilConstants.SPACE + UtilConstants.HASH_CODE_STRING
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE
+ + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION
+ + UtilConstants.RETURN + " Objects.hash" + UtilConstants.OPEN_PARENTHESIS;
+ }
+
+ /**
+ * Returns to hash code methods close string.
+ *
+ * @param hashcodeString hash code string
+ * @return to hash code method close string
+ */
+ public static String getHashCodeMethodClose(String hashcodeString) {
+ hashcodeString = YangIoUtils.trimAtLast(hashcodeString, UtilConstants.COMMA);
+ hashcodeString = YangIoUtils.trimAtLast(hashcodeString, UtilConstants.SPACE);
+ hashcodeString = YangIoUtils.partString(hashcodeString);
+ return hashcodeString + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * Hash code method for class.
+ *
+ * @param attr attribute info
+ * @return hash code method
+ */
+ public static String getHashCodeMethod(AttributeInfo attr) {
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ return attributeName
+ + UtilConstants.COMMA + UtilConstants.SPACE;
+
+ }
+
+ /**
+ * Returns to equals method open strings.
+ *
+ * @param className class name
+ * @return to equals method open string
+ */
+ public static String getEqualsMethodOpen(String className) {
+
+ return getOverRideString() + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE
+ + UtilConstants.BOOLEAN + UtilConstants.SPACE + UtilConstants.EQUALS_STRING
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.OBJECT_STRING + UtilConstants.SPACE + "obj"
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET
+ + UtilConstants.NEW_LINE + getEqualsMethodsCommonIfCondition()
+ + getEqualsMethodsSpecificIfCondition(className);
+ }
+
+ /**
+ * Returns equal methods if condition string.
+ *
+ * @return if condition string
+ */
+ private static String getEqualsMethodsCommonIfCondition() {
+ return UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.IF + UtilConstants.SPACE
+ + UtilConstants.OPEN_PARENTHESIS + UtilConstants.THIS
+ + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.EQUAL + UtilConstants.SPACE + "obj"
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET
+ + UtilConstants.NEW_LINE + UtilConstants.TWELVE_SPACE_INDENTATION + UtilConstants.RETURN
+ + UtilConstants.SPACE + UtilConstants.TRUE + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE
+ + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Returns if condition for specific class object in equals method.
+ *
+ * @param className class name
+ * @return if condition string
+ */
+ private static String getEqualsMethodsSpecificIfCondition(String className) {
+ return UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.IF + UtilConstants.SPACE
+ + UtilConstants.OPEN_PARENTHESIS + "obj" + UtilConstants.INSTANCE_OF + className
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET
+ + UtilConstants.NEW_LINE + UtilConstants.TWELVE_SPACE_INDENTATION + className + UtilConstants.SPACE
+ + "other " + UtilConstants.EQUAL + UtilConstants.SPACE + UtilConstants.OPEN_PARENTHESIS + className
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE + "obj" + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE + UtilConstants.TWELVE_SPACE_INDENTATION + UtilConstants.RETURN
+ + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Returns to equals methods close string.
+ *
+ * @param equalMethodString equal method string
+ * @return to equals method close string
+ */
+ public static String getEqualsMethodClose(String equalMethodString) {
+ equalMethodString = YangIoUtils.trimAtLast(equalMethodString, UtilConstants.AND);
+ equalMethodString = YangIoUtils.trimAtLast(equalMethodString, UtilConstants.AND);
+ equalMethodString = YangIoUtils.trimAtLast(equalMethodString, UtilConstants.SPACE);
+ equalMethodString = YangIoUtils.trimAtLast(equalMethodString, UtilConstants.NEW_LINE) + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE;
+ return equalMethodString + UtilConstants.EIGHT_SPACE_INDENTATION
+ + UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE
+ + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.RETURN + UtilConstants.SPACE
+ + UtilConstants.FALSE + UtilConstants.SEMI_COLAN
+ + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.CLOSE_CURLY_BRACKET;
+ }
+
+ /**
+ * Equals method for class.
+ *
+ * @param attr attribute info
+ * @return equals method
+ */
+ public static String getEqualsMethod(AttributeInfo attr) {
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ return UtilConstants.SIXTEEN_SPACE_INDENTATION + UtilConstants.SPACE + UtilConstants.OBJECT_STRING + "s"
+ + UtilConstants.PERIOD + UtilConstants.EQUALS_STRING + UtilConstants.OPEN_PARENTHESIS + attributeName
+ + UtilConstants.COMMA + UtilConstants.SPACE + "other." + attributeName + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SPACE + UtilConstants.AND + UtilConstants.AND;
+
+ }
+
+ /**
+ * Returns of method string for class.
+ *
+ * @param name class name
+ * @param attr attribute info
+ * @return of method string
+ */
+ public static String getOfMethod(String name, AttributeInfo attr) {
+
+ String attrQuaifiedType = "";
+ if (attr.isQualifiedName() && (attr.getImportInfo().getPkgInfo() != null)) {
+ attrQuaifiedType = attr.getImportInfo().getPkgInfo() + ".";
+ }
+ attrQuaifiedType = attrQuaifiedType + attr.getImportInfo().getClassInfo();
+
+ return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.STATIC
+ + UtilConstants.SPACE + name + UtilConstants.SPACE + UtilConstants.OF + UtilConstants.OPEN_PARENTHESIS
+ + attrQuaifiedType + UtilConstants.SPACE + UtilConstants.VALUE + UtilConstants.CLOSE_PARENTHESIS
+ + UtilConstants.SPACE + UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE
+ + UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.RETURN + UtilConstants.SPACE + UtilConstants.NEW
+ + UtilConstants.SPACE + name + UtilConstants.OPEN_PARENTHESIS + UtilConstants.VALUE
+ + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLAN + UtilConstants.NEW_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE;
+ }
+
}
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempDataStoreTypes.java b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempDataStoreTypes.java
new file mode 100644
index 0000000..0344672
--- /dev/null
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TempDataStoreTypes.java
@@ -0,0 +1,73 @@
+/*
+ * 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;
+
+/**
+ * Data Store types.
+ */
+public enum TempDataStoreTypes {
+
+ /**
+ * Getter methods for interfaces.
+ */
+ GETTER_METHODS,
+
+ /**
+ * Getter methods impl for classes.
+ */
+ GETTER_METHODS_IMPL,
+
+ /**
+ * Setter methods for interfaces.
+ */
+ SETTER_METHODS,
+
+ /**
+ * Setter methods impl for classes.
+ */
+ SETTER_METHODS_IMPL,
+
+ /**
+ * Constructor for impl class.
+ */
+ CONSTRUCTOR,
+
+ /**
+ * Attributes.
+ */
+ ATTRIBUTE,
+
+ /**
+ * TypeDef.
+ */
+ TYPE_DEF,
+
+ /**
+ * ToString method.
+ */
+ TO_STRING,
+
+ /**
+ * HashCode method.
+ */
+ HASH_CODE,
+
+ /**
+ * Equals method.
+ */
+ EQUALS
+}
diff --git a/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
index 63c1fe7..821f2b3 100644
--- a/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ b/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
@@ -256,6 +256,7 @@
public static final String BUILD = "build";
public static final String OBJECT = "Object";
public static final String OVERRIDE = "@Override";
+ public static final String CHILDREN = "'s children";
/**
* For collections.
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 7181a62..271d698 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
@@ -104,7 +104,7 @@
*/
public static void appendFileContents(File toAppend, File srcFile) throws IOException {
- insertStringInFile(srcFile, UtilConstants.NEW_LINE + readAppendFile(toAppend.toString()));
+ updateFileHandle(srcFile, UtilConstants.NEW_LINE + readAppendFile(toAppend.toString()), false);
return;
}
@@ -133,18 +133,23 @@
}
/**
- * Insert content to the generated file.
+ * Update the generated file handle.
*
* @param inputFile input file
* @param contentTobeAdded content to be appended to the file
+ * @param isClose when close of file is called.
* @throws IOException when fails to append content to the file
*/
- public static void insertStringInFile(File inputFile, String contentTobeAdded) throws IOException {
+ public static void updateFileHandle(File inputFile, String contentTobeAdded, boolean isClose) throws IOException {
FileWriter fileWriter = new FileWriter(inputFile, true);
PrintWriter outputPrintWriter = new PrintWriter(fileWriter);
- outputPrintWriter.write(contentTobeAdded);
- outputPrintWriter.flush();
- outputPrintWriter.close();
-
+ if (!isClose) {
+ outputPrintWriter.write(contentTobeAdded);
+ outputPrintWriter.flush();
+ outputPrintWriter.close();
+ } else {
+ fileWriter.flush();
+ fileWriter.close();
+ }
}
}
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 c2f170c..72bedf9 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
@@ -71,6 +71,21 @@
SETTER,
/**
+ * For type def's setters.
+ */
+ TYPE_DEF_SETTER,
+
+ /**
+ * For type def's constructor.
+ */
+ TYPE_DEF_CONSTRUCTOR,
+
+ /**
+ * For of method.
+ */
+ OF,
+
+ /**
* For default constructor.
*/
DEFAULT_CONSTRUCTOR,
@@ -91,10 +106,11 @@
*
* @param type java doc type
* @param name name of the YangNode
- * @return javadocs
+ * @param isList is list attribute
+ * @return javadocs.
*/
- public static String getJavaDoc(JavaDocType type, String name) {
- name = JavaIdentifierSyntax.getCamelCase(name);
+ public static String getJavaDoc(JavaDocType type, String name, boolean isList) {
+ name = JavaIdentifierSyntax.getLowerCase(JavaIdentifierSyntax.getCamelCase(name));
String javaDoc = "";
if (type.equals(JavaDocType.IMPL_CLASS)) {
javaDoc = generateForImplClass(name);
@@ -107,9 +123,15 @@
} else if (type.equals(JavaDocType.PACKAGE_INFO)) {
javaDoc = generateForPackage(name);
} else if (type.equals(JavaDocType.GETTER)) {
- javaDoc = generateForGetters(name);
+ javaDoc = generateForGetters(name, isList);
+ } else if (type.equals(JavaDocType.TYPE_DEF_SETTER)) {
+ javaDoc = generateForTypeDefSetter(name);
+ } else if (type.equals(JavaDocType.TYPE_DEF_CONSTRUCTOR)) {
+ javaDoc = generateForTypeDefConstructor(name);
} else if (type.equals(JavaDocType.SETTER)) {
- javaDoc = generateForSetters(name);
+ javaDoc = generateForSetters(name, isList);
+ } else if (type.equals(JavaDocType.OF)) {
+ javaDoc = generateForOf(name);
} else if (type.equals(JavaDocType.DEFAULT_CONSTRUCTOR)) {
javaDoc = generateForDefaultConstructors();
} else if (type.equals(JavaDocType.BUILD)) {
@@ -124,32 +146,96 @@
* Generate javaDocs for getter method.
*
* @param attribute attribute
+ * @param isList is list attribute
* @return javaDocs
*/
- private static String generateForGetters(String attribute) {
- return UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
+ private static String generateForGetters(String attribute, boolean isList) {
+ String getter = UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.JAVA_DOC_FIRST_LINE
+ UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_GETTERS + attribute
+ UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
- + UtilConstants.NEW_LINE_ESTRIC + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_RETURN
- + attribute + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.NEW_LINE_ESTRIC + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_RETURN;
+ if (isList) {
+ attribute = UtilConstants.LIST.toLowerCase() + UtilConstants.SPACE + UtilConstants.OF + UtilConstants.SPACE
+ + attribute;
+ }
+
+ getter = getter + attribute + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ UtilConstants.JAVA_DOC_END_LINE;
+ return getter;
}
/**
* Generates javaDocs for setter method.
*
* @param attribute attribute
+ * @param isList is list attribute
* @return javaDocs
*/
- private static String generateForSetters(String attribute) {
- return UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
+ private static String generateForSetters(String attribute, boolean isList) {
+ String setter = UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.JAVA_DOC_FIRST_LINE
+ UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_SETTERS + attribute
+ UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ UtilConstants.NEW_LINE_ESTRIC + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_PARAM
- + attribute + UtilConstants.SPACE + attribute + UtilConstants.NEW_LINE
+ + attribute + UtilConstants.SPACE;
+ if (isList) {
+ attribute = UtilConstants.LIST.toLowerCase() + UtilConstants.SPACE + UtilConstants.OF + UtilConstants.SPACE
+ + attribute;
+ }
+
+ setter = setter + attribute + UtilConstants.NEW_LINE
+ UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_RETURN + UtilConstants.BUILDER_OBJECT
+ attribute + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ UtilConstants.JAVA_DOC_END_LINE;
+ return setter;
+ }
+
+ /**
+ * Generates javaDocs for of method.
+ *
+ * @param attribute attribute
+ * @return javaDocs
+ */
+ private static String generateForOf(String attribute) {
+ return UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_OF + attribute
+ + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.NEW_LINE_ESTRIC + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_PARAM
+ + UtilConstants.VALUE + UtilConstants.SPACE + UtilConstants.VALUE + UtilConstants.NEW_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_RETURN + UtilConstants.OBJECT
+ + UtilConstants.SPACE + UtilConstants.OF + UtilConstants.SPACE + attribute + UtilConstants.NEW_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_END_LINE;
+ }
+
+ /**
+ * Generates javaDocs for typedef setter method.
+ *
+ * @param attribute attribute
+ * @return javaDocs
+ */
+ private static String generateForTypeDefSetter(String attribute) {
+ return (UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_SETTERS_COMMON + attribute
+ + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.NEW_LINE_ESTRIC + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_PARAM
+ + UtilConstants.VALUE + UtilConstants.SPACE + UtilConstants.VALUE + UtilConstants.NEW_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_END_LINE);
+ }
+
+ /**
+ * Generates javaDocs for typedef constructor.
+ *
+ * @param attribute attribute
+ * @return javaDocs
+ */
+ private static String generateForTypeDefConstructor(String attribute) {
+ return (UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_FIRST_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_CONSTRUCTOR + attribute
+ + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION
+ + UtilConstants.NEW_LINE_ESTRIC + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_PARAM
+ + UtilConstants.VALUE + UtilConstants.SPACE + UtilConstants.VALUE + UtilConstants.NEW_LINE
+ + UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.JAVA_DOC_END_LINE);
}
/**
@@ -170,8 +256,8 @@
* @return javaDocs
*/
private static String generateForBuilderClass(String className) {
- return UtilConstants.JAVA_DOC_FIRST_LINE + UtilConstants.BUILDER_CLASS_JAVA_DOC + className
- + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_END_LINE;
+ 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;
}
/**
@@ -181,8 +267,8 @@
* @return javaDocs
*/
private static String generateForInterface(String interfaceName) {
- return UtilConstants.JAVA_DOC_FIRST_LINE + UtilConstants.INTERFACE_JAVA_DOC + interfaceName
- + UtilConstants.PERIOD + UtilConstants.NEW_LINE + UtilConstants.JAVA_DOC_END_LINE;
+ return UtilConstants.NEW_LINE + 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/YangFileScanner.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
index 98e0444..7af3d77 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
@@ -38,7 +38,7 @@
*
* @param root specified directory
* @return list of java files
- * @throws NullPointerException when no files are there
+ * @throws NullPointerException when no files are there.
* @throws IOException when files get deleted while performing the
* operations
*/
@@ -67,9 +67,8 @@
* @return list of required files
* @throws IOException when files get deleted while performing the
* operations
- * @throws NullPointerException null pointer access
*/
- public static List<String> getFiles(String root, String extension) throws NullPointerException, IOException {
+ public static List<String> getFiles(String root, String extension) throws NullPointerException, IOException {
List<String> store = new LinkedList<>();
Stack<String> stack = new Stack<>();
stack.push(root);
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 a0aba1f..d410cfb 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
@@ -16,6 +16,8 @@
package org.onosproject.yangutils.utils.io.impl;
+import static org.slf4j.LoggerFactory.getLogger;
+
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
@@ -29,8 +31,6 @@
import org.slf4j.Logger;
import org.sonatype.plexus.build.incremental.BuildContext;
-import static org.slf4j.LoggerFactory.getLogger;
-
/**
* Provides common utility functionalities for code generation.
*/
@@ -80,7 +80,7 @@
fileWriter = new FileWriter(packageInfo);
bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(CopyrightHeader.getCopyrightHeader());
- bufferedWriter.write(JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.PACKAGE_INFO, classInfo));
+ bufferedWriter.write(JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.PACKAGE_INFO, classInfo, false));
bufferedWriter.write(UtilConstants.PACKAGE + UtilConstants.SPACE + pack + UtilConstants.SEMI_COLAN);
bufferedWriter.close();
} catch (IOException e) {
@@ -127,4 +127,38 @@
log.info("Source directory added to compilation root: " + source);
}
+ /**
+ * Removes extra char from the string.
+ *
+ * @param valueString string to be trimmed
+ * @param removealStirng extra chars
+ * @return new string
+ */
+ public static String trimAtLast(String valueString, String removealStirng) {
+ StringBuilder stringBuilder = new StringBuilder(valueString);
+ int index = valueString.lastIndexOf(removealStirng);
+ stringBuilder.deleteCharAt(index);
+ return stringBuilder.toString();
+ }
+
+ /**
+ * Returns new parted string.
+ *
+ * @param partString string to be parted
+ * @return parted string
+ */
+ public static String partString(String partString) {
+ String[] strArray = partString.split(UtilConstants.COMMA);
+ String newString = "";
+ for (int i = 0; i < strArray.length; i++) {
+ if (i % 4 != 0) {
+ newString = newString + strArray[i] + UtilConstants.COMMA;
+ } else {
+ newString = newString + UtilConstants.NEW_LINE + UtilConstants.TWELVE_SPACE_INDENTATION + strArray[i]
+ + UtilConstants.COMMA;
+ }
+ }
+ return trimAtLast(newString, UtilConstants.COMMA);
+ }
+
}