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

Change-Id: If1a8a991ffafa14b51211f97c435176ee1bf856f
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java
new file mode 100644
index 0000000..d33e1fe
--- /dev/null
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/utils/io/impl/SerializedDataStore.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.utils.io.impl;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+/**
+ * Provides storage for serialized data while traversing data model tree for code generation.
+ */
+public final class SerializedDataStore {
+
+    /**
+     * Data Store types.
+     */
+    public static enum SerializedDataStoreType {
+
+        /**
+         * Methods.
+         */
+        INTERFACE_METHODS,
+
+        /**
+         * Methods.
+         */
+        BUILDER_METHODS,
+
+        /**
+         * Methods.
+         */
+        BUILDER_INTERFACE_METHODS,
+
+        /**
+         * Methods.
+         */
+        IMPL_METHODS,
+
+        /**
+         * Attributes.
+         */
+        ATTRIBUTE,
+
+        /**
+         * Imports.
+         */
+        IMPORT
+    }
+
+    /**
+     * File name string for serialized files of methods.
+     */
+    private static final String INTERFACE_METHOD_FILE_NAME = "SerializedInterfaceMethodDataStore";
+
+    /**
+     * File name string for serialized files of methods.
+     */
+    private static final String BUILDER_METHOD_FILE_NAME = "SerializedBuilderMethodDataStore";
+
+    /**
+     * File name string for serialized files of methods.
+     */
+    private static final String BUILDER_INTERFACE_METHOD_FILE_NAME = "SerializedBuilderInterfaceMethodDataStore";
+
+    /**
+     * File name string for serialized files of methods.
+     */
+    private static final String IMPL_METHOD_FILE_NAME = "SerializedImplMethodDataStore";
+
+    /**
+     * File name string for serialized files of attributes.
+     */
+    private static final String ATTRIBUTE_FILE_NAME = "SerializedAttributeDataStore";
+
+    /**
+     * File name string for serialized files of imports.
+     */
+    private static final String IMPORT_FILE_NAME = "SerializedImportDataStore";
+
+    /**
+     * File extension of serialized files.
+     */
+    private static final String SERIALIZE_FILE_EXTENSION = ".ser";
+
+    /**
+     * Buffer size.
+     */
+    private static final int BUFFER_SIZE = 8 * 1024;
+
+    /**
+     * Default constructor.
+     */
+    private SerializedDataStore() {
+    }
+
+    /**
+     * Writes specific info to a serialized file.
+     *
+     * @param data data to be stored
+     * @param type type of serialized data store
+     * @throws IOException when fails to create a serialized data file.
+     */
+    public static void setSerializeData(String data, SerializedDataStoreType type) throws IOException {
+
+        String fileName = "";
+        if (type.equals(SerializedDataStoreType.ATTRIBUTE)) {
+            fileName = ATTRIBUTE_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.INTERFACE_METHODS)) {
+            fileName = INTERFACE_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.BUILDER_INTERFACE_METHODS)) {
+            fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.BUILDER_METHODS)) {
+            fileName = BUILDER_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.IMPL_METHODS)) {
+            fileName = IMPL_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.IMPORT)) {
+            fileName = IMPORT_FILE_NAME;
+        } else {
+            throw new IOException("Unresolved file type.");
+        }
+
+        try {
+            OutputStream file = new FileOutputStream(fileName + SERIALIZE_FILE_EXTENSION);
+            OutputStream buffer = new BufferedOutputStream(file, BUFFER_SIZE);
+
+            ObjectOutput output = new ObjectOutputStream(buffer);
+            try {
+                output.writeObject(data);
+            } finally {
+                output.close();
+            }
+        } catch (IOException ex) {
+            throw new IOException("failed to serialize data");
+        }
+    }
+
+    /**
+     * Get the serialized data.
+     *
+     * @param type type of serialized data store
+     * @return list of attribute info.
+     * @throws IOException when fails to read from the file.
+     * @throws ClassNotFoundException when file is missing.
+     */
+    @SuppressWarnings("unchecked")
+    public static List<String> getSerializeData(SerializedDataStoreType type)
+            throws IOException, ClassNotFoundException {
+
+        String fileName = "";
+        if (type.equals(SerializedDataStoreType.ATTRIBUTE)) {
+            fileName = ATTRIBUTE_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.INTERFACE_METHODS)) {
+            fileName = INTERFACE_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.BUILDER_INTERFACE_METHODS)) {
+            fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.BUILDER_METHODS)) {
+            fileName = BUILDER_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.IMPL_METHODS)) {
+            fileName = IMPL_METHOD_FILE_NAME;
+        } else if (type.equals(SerializedDataStoreType.IMPORT)) {
+            fileName = IMPORT_FILE_NAME;
+        } else {
+            throw new IOException("Unresolved file type.");
+        }
+
+        try {
+            InputStream file = new FileInputStream(fileName + SERIALIZE_FILE_EXTENSION);
+            InputStream buffer = new BufferedInputStream(file);
+            ObjectInput input = new ObjectInputStream(buffer);
+            try {
+                List<String> recoveredData = (List<String>) input.readObject();
+                return recoveredData;
+            } finally {
+                input.close();
+            }
+        } catch (ClassNotFoundException ex) {
+            throw new ClassNotFoundException("failed to fetch the serialized data file.");
+        }
+    }
+}