[ONOS-3906],[ONOS-3910] Implementation of YANG module and leaf/leaf-list translator.

Change-Id: If1a8a991ffafa14b51211f97c435176ee1bf856f
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
new file mode 100644
index 0000000..f7e3556
--- /dev/null
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.utils.io.impl;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import org.onosproject.yangutils.translator.CachedFileHandle;
+import org.onosproject.yangutils.translator.GeneratedFileType;
+import org.onosproject.yangutils.translator.tojava.CachedJavaFileHandle;
+import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
+import org.onosproject.yangutils.utils.UtilConstants;
+
+/**
+ * Utility to handle file system operations.
+ */
+public final class FileSystemUtil {
+    /**
+     * Hiding constructor of a utility class.
+     */
+    private FileSystemUtil() {
+    }
+
+    /**
+     * Check if the package directory structure created.
+     *
+     * @param pkg Package to check if it is created.
+     * @return existence status of package.
+     */
+    public static boolean doesPackageExist(File pkg) {
+        if (pkg.exists()) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Create a package structure with package info java file if not present.
+     *
+     * @param pkg java package string
+     * @param pkgInfo description of package
+     * @throws IOException any IO exception
+     */
+    public static void createPackage(String pkg, String pkgInfo) throws IOException {
+        if (!doesPackageExist(new File(pkg))) {
+            try {
+                File pack = YangIoUtils
+                        .createDirectories(pkg.replace(UtilConstants.PERIOD, UtilConstants.SLASH));
+                YangIoUtils.addPackageInfo(pack, pkgInfo, pkg);
+            } catch (IOException e) {
+                throw new IOException("failed to create package-info file");
+            }
+        }
+    }
+
+    /**
+     * Create a java source file in the specified package.
+     *
+     * @param pkg java package under which the interface file needs to be created.
+     * @param yangName YANG name of the node for which java file needs to be created.
+     * @param types types of files to be created.
+     * @throws IOException when fails to create interface file.
+     * @return the cached java file handle, which can be used to further add methods.
+     */
+    public static CachedFileHandle createSourceFiles(String pkg, String yangName, GeneratedFileType types)
+            throws IOException {
+        //if (!doesPackageExist(new File(pkg))) {
+        //    throw new IOException("package does not exist.");
+        //}
+        yangName = JavaIdentifierSyntax.getCamelCase(yangName);
+        CachedFileHandle handler = new CachedJavaFileHandle(pkg, yangName, types);
+
+        return handler;
+    }
+
+    /**
+     * Read the contents from source file and append its contents to append
+     * file.
+     *
+     * @param toAppend destination file in which the contents of source file is
+     *            appended.
+     * @param srcFile source file from which data is read and added to to append
+     *            file.
+     * @throws IOException any IO errors.
+     */
+    public static void appendFileContents(File toAppend, File srcFile) throws IOException {
+
+        insertStringInFile(srcFile, UtilConstants.NEW_LINE + readAppendFile(toAppend.toString()));
+        //TODO: read the contents from src file and append its contents to append file.
+        return;
+    }
+
+    /**
+     * 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 readAppendFile(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(UtilConstants.FOUR_SPACE_INDENTATION + line);
+                stringBuilder.append("\n");
+                line = bufferReader.readLine();
+            }
+            return stringBuilder.toString();
+        } finally {
+            bufferReader.close();
+        }
+    }
+
+    /**
+     * Insert content to the generated file.
+     *
+     * @param inputFile input file
+     * @param contentTobeAdded content to be appended to the file.
+     * @throws IOException when fails to append content to the file.
+     */
+    public static void insertStringInFile(File inputFile, String contentTobeAdded) throws IOException {
+        FileWriter fileWriter = new FileWriter(inputFile, true);
+        PrintWriter outputPrintWriter = new PrintWriter(fileWriter);
+        outputPrintWriter.write(contentTobeAdded);
+        outputPrintWriter.flush();
+        outputPrintWriter.close();
+
+    }
+}