multiFileYangTranslator

Change-Id: I2adfef3acaec4bd74ba2c487404d2c655b800988
diff --git a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
index 1f138ea..7a7c96a 100644
--- a/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
+++ b/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
@@ -17,27 +17,31 @@
 package org.onosproject.yangutils.translator.tojava.javamodel;
 
 import java.io.IOException;
-import org.onosproject.yangutils.datamodel.HasRpcNotification;
+
+import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
 import org.onosproject.yangutils.datamodel.YangInput;
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangOutput;
 import org.onosproject.yangutils.datamodel.YangRpc;
 import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
-import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
+import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
 import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
 import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
 import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
+import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
 import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
 
-import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getCurNodeAsAttributeInParent;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_RPC_INTERFACE;
+import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInParent;
 import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode;
 import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.updatePackageInfo;
 
 /**
  * Represents rpc information extended to support java code generation.
  */
-public class YangJavaRpc extends YangRpc implements JavaCodeGenerator, HasJavaFileInfo {
+public class YangJavaRpc
+        extends YangRpc
+        implements JavaCodeGenerator, JavaCodeGeneratorInfo {
 
     /**
      * Contains the information of the java file being generated.
@@ -45,35 +49,57 @@
     private JavaFileInfo javaFileInfo;
 
     /**
+     * Temproary file for code generation.
+     */
+    private TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles;
+
+    /**
      * Creates an instance of YANG java rpc.
      */
     public YangJavaRpc() {
         super();
         setJavaFileInfo(new JavaFileInfo());
+        getJavaFileInfo().setGeneratedFileTypes(GENERATE_RPC_INTERFACE);
+        try {
+            setTempJavaCodeFragmentFiles(new TempJavaCodeFragmentFiles(getJavaFileInfo()));
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to create temporary RPC file handle");
+        }
     }
 
     /**
      * Prepares the information for java code generation corresponding to YANG
-     * rpc info.
+     * RPC info.
      *
      * @param yangPlugin YANG plugin config
      * @throws IOException IO operations fails
      */
     @Override
-    public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
+    public void generateCodeEntry(YangPluginConfig yangPlugin)
+            throws IOException {
 
-        if (!(this instanceof YangNode)) {
+        if (!(this instanceof JavaCodeGeneratorInfo)) {
             // TODO:throw exception
         }
 
         // Add package information for rpc and create corresponding folder.
-        updatePackageInfo(this, yangPlugin);
+        updatePackageInfo((JavaCodeGeneratorInfo) this, yangPlugin);
 
+    }
+
+    /**
+     * Creates a java file using the YANG RPC info.
+     *
+     * @throws IOException IO operations fails
+     */
+    @Override
+    public void generateCodeExit()
+            throws IOException {
         // Get the parent module/sub-module.
         YangNode parent = getParentNodeInGenCode((YangNode) this);
 
         // Parent should be holder of rpc or notification.
-        if (!(parent instanceof HasRpcNotification)) {
+        if (!(parent instanceof RpcNotificationContainer)) {
             throw new TranslatorException("parent node of rpc can only be module or sub-module");
         }
 
@@ -89,35 +115,26 @@
         YangNode yangNode = this.getChild();
         while (yangNode != null) {
             if (yangNode instanceof YangInput) {
-                javaAttributeInfoOfInput = getCurNodeAsAttributeInParent(parent, false, yangNode.getName());
+                javaAttributeInfoOfInput = getCurNodeAsAttributeInParent(yangNode, this, false);
             } else if (yangNode instanceof YangOutput) {
-                javaAttributeInfoOfOutput = getCurNodeAsAttributeInParent(parent, false, yangNode.getName());
+                javaAttributeInfoOfOutput = getCurNodeAsAttributeInParent(yangNode, this, false);
             } else {
                 // TODO throw exception
             }
             yangNode = yangNode.getNextSibling();
         }
 
-        if (!(parent instanceof HasTempJavaCodeFragmentFiles)) {
+        if (!(parent instanceof TempJavaCodeFragmentFilesContainer)) {
             throw new TranslatorException("missing parent temp file handle");
         }
 
         /*
          * Add the rpc information to the parent's service temp file.
          */
-        ((HasTempJavaCodeFragmentFiles) parent)
-                .getTempJavaCodeFragmentFiles()
+        ((TempJavaCodeFragmentFilesContainer) parent)
+                .getTempJavaCodeFragmentFiles().getServiceTempFiles()
                 .addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfoOfInput, javaAttributeInfoOfOutput,
                         ((YangNode) this).getName());
-    }
-
-    /**
-     * Creates a java file using the YANG rpc info.
-     *
-     * @throws IOException IO operations fails
-     */
-    @Override
-    public void generateCodeExit() throws IOException {
         // No file will be generated during RPC exit.
     }
 
@@ -144,5 +161,15 @@
     public void setJavaFileInfo(JavaFileInfo javaInfo) {
         javaFileInfo = javaInfo;
     }
+
+    @Override
+    public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+        return tempJavaCodeFragmentFiles;
+    }
+
+    @Override
+    public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+        tempJavaCodeFragmentFiles = fileHandle;
+    }
 }