YANG Translator optimization
Change-Id: Ie6a6b9d371a4fc5fd973cf56d6f3c7b44a3146ba
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
new file mode 100644
index 0000000..5ff4e79
--- /dev/null
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
@@ -0,0 +1,874 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.translator.tojava;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.onosproject.yangutils.datamodel.YangLeaf;
+import org.onosproject.yangutils.datamodel.YangLeafList;
+import org.onosproject.yangutils.datamodel.YangLeavesHolder;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator;
+import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
+import org.onosproject.yangutils.utils.UtilConstants;
+import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
+
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
+import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoOfLeaf;
+import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getCurNodeAsAttributeInParent;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefination;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructor;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
+import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
+
+/**
+ * Provides implementation of java code fragments temporary implementations.
+ */
+public class TempJavaCodeFragmentFiles {
+
+ /**
+ * The variable which guides the types of temporary files generated using
+ * the temporary generated file types mask.
+ */
+ private int generatedTempFiles;
+
+ /**
+ * Absolute path where the target java file needs to be generated.
+ */
+ private String absoluteDirPath;
+
+ /**
+ * Name of java file that needs to be generated.
+ */
+ private String generatedJavaClassName;
+
+ /**
+ * File type extension for temporary classes.
+ */
+ private static final String TEMP_FILE_EXTENSION = ".tmp";
+
+ /**
+ * Folder suffix for temporary files folder.
+ */
+ private static final String TEMP_FOLDER_NAME_SUFIX = "-Temp";
+
+ /**
+ * File name for getter method.
+ */
+ private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
+
+ /**
+ * File name for getter method implementation.
+ */
+ private static final String GETTER_METHOD_IMPL_FILE_NAME = "GetterMethodImpl";
+
+ /**
+ * File name for setter method.
+ */
+ private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
+
+ /**
+ * File name for setter method implementation.
+ */
+ private static final String SETTER_METHOD_IMPL_FILE_NAME = "SetterMethodImpl";
+
+ /**
+ * File name for constructor.
+ */
+ private static final String CONSTRUCTOR_FILE_NAME = "Constructor";
+
+ /**
+ * File name for attributes.
+ */
+ private static final String ATTRIBUTE_FILE_NAME = "Attributes";
+
+ /**
+ * File name for to string method.
+ */
+ private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
+
+ /**
+ * File name for hash code method.
+ */
+ private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
+
+ /**
+ * File name for equals method.
+ */
+ private static final String EQUALS_METHOD_FILE_NAME = "Equals";
+
+ /**
+ * Temporary file handle for attribute.
+ */
+ private File attributesTempFileHandle;
+
+ /**
+ * Temporary file handle for getter of interface.
+ */
+ private File getterInterfaceTempFileHandle;
+
+ /**
+ * Temporary file handle for getter of class.
+ */
+ private File getterImplTempFileHandle;
+
+ /**
+ * Temporary file handle for setter of interface.
+ */
+ private File setterInterfaceTempFileHandle;
+
+ /**
+ * Temporary file handle for setter of class.
+ */
+ private File setterImplTempFileHandle;
+
+ /**
+ * Temporary file handle for constructor of class.
+ */
+ private File constructorImplTempFileHandle;
+
+ /**
+ * Temporary file handle for hash code method of class.
+ */
+ private File hashCodeImplTempFileHandle;
+
+ /**
+ * Temporary file handle for equals method of class.
+ */
+ private File equalsImplTempFileHandle;
+
+ /**
+ * Temporary file handle for to string method of class.
+ */
+ private File toStringImplTempFileHandle;
+
+ /**
+ * Construct an object of temporary java code fragment.
+ *
+ * @param genFileType file generation type
+ * @param genDir file generation directory
+ * @param className class name
+ * @throws IOException when fails to create new file handle
+ */
+ public TempJavaCodeFragmentFiles(int genFileType, String genDir, String className) throws IOException {
+
+ generatedTempFiles = 0;
+ absoluteDirPath = genDir;
+ generatedJavaClassName = className;
+
+ /**
+ * Initialize getter when generation file type matches to interface
+ * mask.
+ */
+ if ((genFileType & INTERFACE_MASK) != 0) {
+ generatedTempFiles |= GETTER_FOR_INTERFACE_MASK;
+ }
+
+ /**
+ * Initialize getter and setter when generation file type matches to
+ * builder interface mask.
+ */
+ if ((genFileType & BUILDER_INTERFACE_MASK) != 0) {
+ generatedTempFiles |= GETTER_FOR_INTERFACE_MASK;
+ generatedTempFiles |= SETTER_FOR_INTERFACE_MASK;
+ }
+
+ /**
+ * Initialize getterImpl, setterImpl and attributes when generation file
+ * type matches to builder class mask.
+ */
+ if ((genFileType & BUILDER_CLASS_MASK) != 0) {
+ generatedTempFiles |= ATTRIBUTES_MASK;
+ generatedTempFiles |= GETTER_FOR_CLASS_MASK;
+ generatedTempFiles |= SETTER_FOR_CLASS_MASK;
+ }
+
+ /**
+ * Initialize getterImpl, attributes, constructor, hash code, equals and
+ * to strings when generation file type matches to impl class mask.
+ */
+ if ((genFileType & IMPL_CLASS_MASK) != 0) {
+ generatedTempFiles |= ATTRIBUTES_MASK;
+ generatedTempFiles |= GETTER_FOR_CLASS_MASK;
+ generatedTempFiles |= CONSTRUCTOR_IMPL_MASK;
+ generatedTempFiles |= HASH_CODE_IMPL_MASK;
+ generatedTempFiles |= EQUALS_IMPL_MASK;
+ generatedTempFiles |= TO_STRING_IMPL_MASK;
+ }
+
+ if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
+ setAttributesTempFileHandle(getTemporaryFileHandle(ATTRIBUTE_FILE_NAME));
+ }
+
+ if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
+ setGetterInterfaceTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_FILE_NAME));
+ }
+
+ if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
+ setSetterInterfaceTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_FILE_NAME));
+ }
+
+ if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
+ setGetterImplTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME));
+ }
+
+ if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
+ setSetterImplTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME));
+ }
+
+ if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
+ setConstructorImplTempFileHandle(getTemporaryFileHandle(CONSTRUCTOR_FILE_NAME));
+ }
+
+ if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
+ setHashCodeImplTempFileHandle(getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME));
+ }
+
+ if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
+ setEqualsImplTempFileHandle(getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME));
+ }
+ if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
+ setToStringImplTempFileHandle(getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME));
+ }
+
+ }
+
+ /**
+ * Returns attribute's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getAttributesTempFileHandle() {
+
+ return attributesTempFileHandle;
+ }
+
+ /**
+ * Sets attribute's temporary file handle.
+ *
+ * @param attributeForClass file handle for attribute
+ */
+ public void setAttributesTempFileHandle(File attributeForClass) {
+
+ attributesTempFileHandle = attributeForClass;
+ }
+
+ /**
+ * Returns getter methods's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getGetterInterfaceTempFileHandle() {
+
+ return getterInterfaceTempFileHandle;
+ }
+
+ /**
+ * Sets to getter method's temporary file handle.
+ *
+ * @param getterForInterface file handle for to getter method
+ */
+ public void setGetterInterfaceTempFileHandle(File getterForInterface) {
+
+ getterInterfaceTempFileHandle = getterForInterface;
+ }
+
+ /**
+ * Returns getter method's impl's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getGetterImplTempFileHandle() {
+
+ return getterImplTempFileHandle;
+ }
+
+ /**
+ * Sets to getter method's impl's temporary file handle.
+ *
+ * @param getterImpl file handle for to getter method's impl
+ */
+ public void setGetterImplTempFileHandle(File getterImpl) {
+
+ getterImplTempFileHandle = getterImpl;
+ }
+
+ /**
+ * Returns setter method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getSetterInterfaceTempFileHandle() {
+
+ return setterInterfaceTempFileHandle;
+ }
+
+ /**
+ * Sets to setter method's temporary file handle.
+ *
+ * @param setterForInterface file handle for to setter method
+ */
+ public void setSetterInterfaceTempFileHandle(File setterForInterface) {
+
+ setterInterfaceTempFileHandle = setterForInterface;
+ }
+
+ /**
+ * Returns setter method's impl's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getSetterImplTempFileHandle() {
+
+ return setterImplTempFileHandle;
+ }
+
+ /**
+ * Sets to setter method's impl's temporary file handle.
+ *
+ * @param setterImpl file handle for to setter method's implementation class
+ */
+ public void setSetterImplTempFileHandle(File setterImpl) {
+
+ setterImplTempFileHandle = setterImpl;
+ }
+
+ /**
+ * Returns constructor's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getConstructorImplTempFileHandle() {
+
+ return constructorImplTempFileHandle;
+ }
+
+ /**
+ * Sets to constructor's temporary file handle.
+ *
+ * @param constructor file handle for to constructor
+ */
+ public void setConstructorImplTempFileHandle(File constructor) {
+
+ constructorImplTempFileHandle = constructor;
+ }
+
+ /**
+ * Returns hash code method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getHashCodeImplTempFileHandle() {
+
+ return hashCodeImplTempFileHandle;
+ }
+
+ /**
+ * Sets hash code method's temporary file handle.
+ *
+ * @param hashCodeMethod file handle for hash code method
+ */
+ public void setHashCodeImplTempFileHandle(File hashCodeMethod) {
+
+ hashCodeImplTempFileHandle = hashCodeMethod;
+ }
+
+ /**
+ * Returns equals mehtod's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getEqualsImplTempFileHandle() {
+
+ return equalsImplTempFileHandle;
+ }
+
+ /**
+ * Sets equals method's temporary file handle.
+ *
+ * @param equalsMethod file handle for to equals method
+ */
+ public void setEqualsImplTempFileHandle(File equalsMethod) {
+
+ equalsImplTempFileHandle = equalsMethod;
+ }
+
+ /**
+ * Returns to string method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getToStringImplTempFileHandle() {
+
+ return toStringImplTempFileHandle;
+ }
+
+ /**
+ * Sets to string method's temporary file handle.
+ *
+ * @param toStringMethod file handle for to string method
+ */
+ public void setToStringImplTempFileHandle(File toStringMethod) {
+
+ toStringImplTempFileHandle = toStringMethod;
+ }
+
+ /**
+ * Adds attribute for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addAttribute(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getAttributesTempFileHandle(), parseAttribute(attr) + UtilConstants.FOUR_SPACE_INDENTATION);
+ }
+
+ /**
+ * Adds getter for interface.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addGetterForInterface(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getGetterInterfaceTempFileHandle(),
+ getGetterString(attr) + UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Adds getter method's impl for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addGetterImpl(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getGetterImplTempFileHandle(),
+ getOverRideString() + getGetterForClass(attr) + UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Adds setter for interface.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addSetterForInterface(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getSetterInterfaceTempFileHandle(),
+ getSetterString(attr, generatedJavaClassName) + UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Adds setter's implementation for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addSetterImpl(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getSetterImplTempFileHandle(),
+ getOverRideString() + getSetterForClass(attr, generatedJavaClassName) + UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Adds build method for interface.
+ *
+ * @return build method for interface
+ * @throws IOException when fails to append to temporary file
+ */
+ public String addBuildMethodForInterface() throws IOException {
+
+ return parseBuilderInterfaceBuildMethodString(generatedJavaClassName);
+ }
+
+ /**
+ * Adds build method's implementation for class.
+ *
+ * @return build method implementation for class
+ * @throws IOException when fails to append to temporary file
+ */
+ public String addBuildMethodImpl() throws IOException {
+
+ return getBuildString(generatedJavaClassName) + UtilConstants.NEW_LINE;
+ }
+
+ /**
+ * Adds constructor for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addConstructor(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getConstructorImplTempFileHandle(), getConstructor(generatedJavaClassName, attr));
+ }
+
+ /**
+ * Adds default constructor for class.
+ *
+ * @return default constructor for class
+ * @throws IOException when fails to append to file
+ */
+ public String addDefaultConstructor() throws IOException {
+
+ return UtilConstants.NEW_LINE + getDefaultConstructorString(generatedJavaClassName + UtilConstants.BUILDER,
+ UtilConstants.PUBLIC);
+ }
+
+ /**
+ * Adds hash code method for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addHashCodeMethod(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getHashCodeImplTempFileHandle(), getHashCodeMethod(attr) + UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Adds equals method for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addEqualsMethod(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getEqualsImplTempFileHandle(), getEqualsMethod(attr) + UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Adds ToString method for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ public void addToStringMethod(JavaAttributeInfo attr) throws IOException {
+
+ appendToFile(getToStringImplTempFileHandle(), getToStringMethod(attr) + UtilConstants.NEW_LINE);
+ }
+
+ /**
+ * Returns a temporary file handle for the specific file type.
+ *
+ * @param fileName file name
+ * @return temporary file handle
+ * @throws IOException when fails to create new file handle
+ */
+ private File getTemporaryFileHandle(String fileName) throws IOException {
+
+ String path = getTempDirPath();
+ File dir = new File(path);
+ if (!dir.exists()) {
+ dir.mkdirs();
+ }
+
+ File file = new File(path + fileName + TEMP_FILE_EXTENSION);
+ if (!file.exists()) {
+ file.createNewFile();
+ } else {
+ file.delete();
+ file.createNewFile();
+ }
+ return file;
+ }
+
+ /**
+ * Returns data from the temporary files.
+ *
+ * @param file temporary file handle
+ * @return stored data from temporary files
+ * @throws IOException when failed to get data from the given file
+ */
+ public String getTemporaryDataFromFileHandle(File file) throws IOException {
+
+ String path = getTempDirPath();
+ if (new File(path + file.getName()).exists()) {
+ return FileSystemUtil.readAppendFile(path + file.getName(), UtilConstants.EMPTY_STRING);
+ } else {
+ throw new IOException("Unable to get data from the given "
+ + file.getName() + " file for "
+ + generatedJavaClassName + UtilConstants.PERIOD);
+ }
+ }
+
+ /**
+ * Returns temporary directory path.
+ *
+ * @return directory path
+ */
+ private String getTempDirPath() {
+
+ return absoluteDirPath.replace(UtilConstants.PERIOD, UtilConstants.SLASH)
+ + File.separator + generatedJavaClassName + TEMP_FOLDER_NAME_SUFIX + File.separator;
+ }
+
+ /**
+ * Parse attribute to get the attribute string.
+ *
+ * @param attr attribute info
+ * @return attribute string
+ */
+ private String parseAttribute(JavaAttributeInfo attr) {
+
+ /*
+ * TODO: check if this utility needs to be called or move to the caller
+ */
+ String attributeName = JavaIdentifierSyntax.getLowerCase(attr.getAttributeName());
+ if (attr.isQualifiedName()) {
+ return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(), attr.getImportInfo().getClassInfo(),
+ attributeName, attr.isListAttr());
+ } else {
+ return getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(), attributeName,
+ attr.isListAttr());
+ }
+ }
+
+ /**
+ * Append content to temporary file.
+ *
+ * @param file temporary file
+ * @param data data to be appended
+ * @throws IOException when fails to append to file
+ */
+ private void appendToFile(File file, String data) throws IOException {
+
+ try {
+ JavaFileGenerator.insert(file, data);
+ } catch (IOException ex) {
+ throw new IOException("failed to write in temp file.");
+ }
+ }
+
+ /**
+ * Adds current node info as and attribute to the parent generated file.
+ *
+ * @param curNode current node which needs to be added as an attribute in
+ * the parent generated code
+ * @param isList is list construct
+ * @throws IOException IO operation exception
+ */
+ public void addCurNodeInfoInParentTempFile(YangNode curNode,
+ boolean isList) throws IOException {
+
+ YangNode parent = getParentNodeInGenCode(curNode);
+ if (!(parent instanceof JavaCodeGenerator)) {
+ throw new RuntimeException("missing parent node to contain current node info in generated file");
+ }
+ JavaAttributeInfo javaAttributeInfo = getCurNodeAsAttributeInParent(curNode,
+ parent, isList);
+
+ if (!(parent instanceof HasTempJavaCodeFragmentFiles)) {
+ throw new RuntimeException("missing parent temp file handle");
+ }
+ ((HasTempJavaCodeFragmentFiles) parent)
+ .getTempJavaCodeFragmentFiles()
+ .addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
+ }
+
+ /**
+ * Adds leaf attributes in generated files.
+ *
+ * @param listOfLeaves list of YANG leaf
+ * @param curNode current data model node
+ * @throws IOException IO operation fail
+ */
+ private void addLeavesInfoToTempFiles(List<YangLeaf> listOfLeaves,
+ YangNode curNode) throws IOException {
+
+ if (listOfLeaves != null) {
+ for (YangLeaf leaf : listOfLeaves) {
+ JavaAttributeInfo javaAttributeInfo = getAttributeInfoOfLeaf(curNode,
+ leaf.getDataType(),
+ leaf.getLeafName(), false);
+ addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
+ }
+ }
+ }
+
+ /**
+ * Adds leaf list's attributes in generated files.
+ *
+ * @param listOfLeafList list of YANG leaves
+ * @param curNode cached file handle
+ * @throws IOException IO operation fail
+ */
+ private void addLeafListInfoToTempFiles(List<YangLeafList> listOfLeafList,
+ YangNode curNode) throws IOException {
+
+ if (listOfLeafList != null) {
+
+ /*
+ * Check if the attribute is of type list, then the java.lang.list
+ * needs to be imported.
+ */
+ if (listOfLeafList.size() != 0) {
+ if (!(curNode instanceof HasJavaImportData)) {
+ throw new RuntimeException("missing import info in current data model node");
+
+ }
+ ((HasJavaImportData) curNode).getJavaImportData()
+ .setIfListImported(true);
+
+ }
+
+ for (YangLeafList leafList : listOfLeafList) {
+ JavaAttributeInfo javaAttributeInfo = getAttributeInfoOfLeaf(
+ curNode, leafList.getDataType(), leafList.getLeafName(),
+ true);
+ addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
+ }
+ }
+ }
+
+ /**
+ * Add all the leaves in the current data model node as part of the
+ * generated temporary file.
+ *
+ * @param curNode java file info of the generated file
+ * @throws IOException IO operation fail
+ */
+ public void addCurNodeLeavesInfoToTempFiles(YangNode curNode) throws IOException {
+
+ if (curNode instanceof YangLeavesHolder) {
+ YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
+ addLeavesInfoToTempFiles(leavesHolder.getListOfLeaf(), curNode);
+ addLeafListInfoToTempFiles(leavesHolder.getListOfLeafList(), curNode);
+ }
+ }
+
+ /**
+ * Add the new attribute info to the target generated temporary files.
+ *
+ * @param newAttrInfo the attribute info that needs to be added to temporary
+ * files
+ * @throws IOException IO operation fail
+ */
+ void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo)
+ throws IOException {
+
+ if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
+ addAttribute(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
+ addGetterForInterface(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
+ addSetterForInterface(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
+ addGetterImpl(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
+ addSetterImpl(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
+ addConstructor(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
+ addHashCodeMethod(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
+ addEqualsMethod(newAttrInfo);
+ }
+
+ if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
+ addToStringMethod(newAttrInfo);
+ }
+ return;
+ }
+
+ /**
+ * Removes all temporary file handles.
+ *
+ * @throws IOException when failed to delete the temporary files
+ */
+ public void close() throws IOException {
+
+ closeFile(GETTER_METHOD_FILE_NAME);
+ getTemporaryFileHandle(GETTER_METHOD_FILE_NAME).delete();
+
+ closeFile(GETTER_METHOD_IMPL_FILE_NAME);
+ getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME).delete();
+
+ closeFile(SETTER_METHOD_FILE_NAME);
+ getTemporaryFileHandle(SETTER_METHOD_FILE_NAME).delete();
+
+ closeFile(SETTER_METHOD_IMPL_FILE_NAME);
+ getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME).delete();
+
+ closeFile(CONSTRUCTOR_FILE_NAME);
+ getTemporaryFileHandle(CONSTRUCTOR_FILE_NAME).delete();
+
+ closeFile(ATTRIBUTE_FILE_NAME);
+ getTemporaryFileHandle(ATTRIBUTE_FILE_NAME).delete();
+
+ closeFile(HASH_CODE_METHOD_FILE_NAME);
+ getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME).delete();
+
+ closeFile(TO_STRING_METHOD_FILE_NAME);
+ getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME).delete();
+
+ closeFile(EQUALS_METHOD_FILE_NAME);
+ getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME).delete();
+
+ }
+
+ /**
+ * Closes the file handle for temporary file.
+ *
+ * @param fileName temporary file's name
+ * @throws IOException when failed to close the file handle
+ */
+ private void closeFile(String fileName) throws IOException {
+
+ FileSystemUtil.updateFileHandle(new File(fileName), null, true);
+ }
+}