[ONOS-3908] YANG container translator.
Change-Id: I4e239509df747238905ca0995f41019679093627
diff --git a/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java b/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java
new file mode 100644
index 0000000..63cba97
--- /dev/null
+++ b/src/main/java/org/onosproject/yangutils/utils/io/impl/TempDataStore.java
@@ -0,0 +1,215 @@
+/*
+ * 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.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+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.ArrayList;
+import java.util.List;
+
+/**
+ * Provides storage for Temp data while traversing data model tree for code generation.
+ */
+public final class TempDataStore {
+
+ /**
+ * Data Store types.
+ */
+ public static enum TempDataStoreType {
+
+ /**
+ * Methods.
+ */
+ GETTER_METHODS,
+
+ /**
+ * Methods.
+ */
+ BUILDER_METHODS,
+
+ /**
+ * Methods.
+ */
+ BUILDER_INTERFACE_METHODS,
+
+ /**
+ * Methods.
+ */
+ IMPL_METHODS,
+
+ /**
+ * Attributes.
+ */
+ ATTRIBUTE,
+
+ /**
+ * Imports.
+ */
+ IMPORT
+ }
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String GETTER_METHOD_FILE_NAME = "TempGetterMethodDataStore";
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String BUILDER_METHOD_FILE_NAME = "TempBuilderMethodDataStore";
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String BUILDER_INTERFACE_METHOD_FILE_NAME = "TempBuilderInterfaceMethodDataStore";
+
+ /**
+ * File name string for Temp files of methods.
+ */
+ private static final String IMPL_METHOD_FILE_NAME = "TempImplMethodDataStore";
+
+ /**
+ * File name string for Temp files of attributes.
+ */
+ private static final String ATTRIBUTE_FILE_NAME = "TempAttributeDataStore";
+
+ /**
+ * File name string for Temp files of imports.
+ */
+ private static final String IMPORT_FILE_NAME = "TempImportDataStore";
+
+ /**
+ * File extension of Temp files.
+ */
+ private static final String FILE_EXTENSION = ".tmp";
+
+ /**
+ * Directory for generating Temp files.
+ */
+ private static final String GEN_DIR = "target/";
+
+ /**
+ * Buffer size.
+ */
+ private static final int BUFFER_SIZE = 8 * 1024;
+
+ /**
+ * Default constructor.
+ */
+ private TempDataStore() {
+ }
+
+ /**
+ * Writes specific info to a Temp file.
+ *
+ * @param data data to be stored
+ * @param type type of Temp data store
+ * @param className class name
+ * @throws IOException when fails to create a Temp data file.
+ */
+ public static void setTempData(String data, TempDataStoreType type, String className) throws IOException {
+
+ String fileName = "";
+ if (type.equals(TempDataStoreType.ATTRIBUTE)) {
+ fileName = ATTRIBUTE_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.GETTER_METHODS)) {
+ fileName = GETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_INTERFACE_METHODS)) {
+ fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_METHODS)) {
+ fileName = BUILDER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.IMPL_METHODS)) {
+ fileName = IMPL_METHOD_FILE_NAME;
+ } else {
+ fileName = IMPORT_FILE_NAME;
+ }
+
+ File dir = new File(GEN_DIR + className + File.separator);
+ dir.mkdirs();
+ try {
+ OutputStream file = new FileOutputStream(GEN_DIR + className + File.separator + fileName + 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 Temp data.
+ *
+ * @param type type of Temp data store
+ * @param className name of the class.
+ * @return list of attribute info.
+ * @throws IOException when fails to read from the file.
+ * @throws ClassNotFoundException when class is missing.
+ * @throws FileNotFoundException when file is missing.
+ */
+ public static List<String> getTempData(TempDataStoreType type, String className)
+ throws IOException, FileNotFoundException, ClassNotFoundException {
+
+ String fileName = "";
+ if (type.equals(TempDataStoreType.ATTRIBUTE)) {
+ fileName = ATTRIBUTE_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.GETTER_METHODS)) {
+ fileName = GETTER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_INTERFACE_METHODS)) {
+ fileName = BUILDER_INTERFACE_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.BUILDER_METHODS)) {
+ fileName = BUILDER_METHOD_FILE_NAME;
+ } else if (type.equals(TempDataStoreType.IMPL_METHODS)) {
+ fileName = IMPL_METHOD_FILE_NAME;
+ } else {
+ fileName = IMPORT_FILE_NAME;
+ }
+ try {
+ InputStream file = new FileInputStream(GEN_DIR + className + File.separator + fileName + FILE_EXTENSION);
+ InputStream buffer = new BufferedInputStream(file);
+ ObjectInput input = new ObjectInputStream(buffer);
+ try {
+ String data = (String) input.readObject();
+ List<String> recoveredData = new ArrayList<>();
+ recoveredData.add(data);
+ return recoveredData;
+ } finally {
+ input.close();
+ file.close();
+ }
+ } catch (FileNotFoundException ex) {
+ throw new FileNotFoundException("No such file or directory.");
+ } catch (ClassNotFoundException ex) {
+ throw new ClassNotFoundException("failed to fetch the Temp data file.");
+ }
+ }
+}