[ONOS-4302] RPC translator implementation
Change-Id: I457f12a2b0edaadee5ff888e0297b40854d53096
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
index fe99500..ccb82c6 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumeration.java
@@ -17,7 +17,6 @@
package org.onosproject.yangutils.translator.tojava.javamodel;
import java.io.IOException;
-
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
@@ -27,7 +26,7 @@
import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfType;
+import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode;
/**
* Represents YANG java enumeration information extended to support java code generation.
@@ -101,7 +100,7 @@
* Sets the data of java imports to be included in generated file.
*
* @param javaImportData data of java imports to be included in generated
- * file
+ * file
*/
@Override
public void setJavaImportData(JavaImportData javaImportData) {
@@ -140,7 +139,7 @@
*/
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
- generateCodeOfType(this, yangPlugin, false);
+ generateCodeOfNode(this, yangPlugin);
}
/**
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java
index 96cbb47..14e2cdf 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInput.java
@@ -68,7 +68,7 @@
@Override
public JavaFileInfo getJavaFileInfo() {
if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node");
+ throw new TranslatorException("missing java info in java datamodel node");
}
return javaFileInfo;
}
@@ -97,7 +97,7 @@
* Sets the data of java imports to be included in generated file.
*
* @param javaImportData data of java imports to be included in generated
- * file
+ * file
*/
@Override
public void setJavaImportData(JavaImportData javaImportData) {
@@ -133,7 +133,7 @@
*/
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
- generateCodeOfNode(this, yangPlugin, false);
+ generateCodeOfNode(this, yangPlugin);
}
/**
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java
index 8895da2..7670b31 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModule.java
@@ -25,7 +25,7 @@
import org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils;
import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_MANAGER_WITH_RPC;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
/**
@@ -57,7 +57,7 @@
super();
setJavaFileInfo(new JavaFileInfo());
setJavaImportData(new JavaImportData());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_MANAGER_WITH_RPC);
}
/**
@@ -97,7 +97,7 @@
* Sets the data of java imports to be included in generated file.
*
* @param javaImportData data of java imports to be included in generated
- * file
+ * file
*/
@Override
public void setJavaImportData(JavaImportData javaImportData) {
@@ -141,6 +141,6 @@
*/
@Override
public void generateCodeExit() throws IOException {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_MANAGER_WITH_RPC, this);
}
}
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java
index 7508dd4..db29d57 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutput.java
@@ -68,7 +68,7 @@
@Override
public JavaFileInfo getJavaFileInfo() {
if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node");
+ throw new TranslatorException("missing java info in java datamodel node");
}
return javaFileInfo;
}
@@ -97,7 +97,7 @@
* Sets the data of java imports to be included in generated file.
*
* @param javaImportData data of java imports to be included in generated
- * file
+ * file
*/
@Override
public void setJavaImportData(JavaImportData javaImportData) {
@@ -133,7 +133,7 @@
*/
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
- generateCodeOfNode(this, yangPlugin, false);
+ generateCodeOfNode(this, yangPlugin);
}
/**
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
index a4ce6bb..1f138ea 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
@@ -17,40 +17,132 @@
package org.onosproject.yangutils.translator.tojava.javamodel;
import java.io.IOException;
+import org.onosproject.yangutils.datamodel.HasRpcNotification;
+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.JavaAttributeInfo;
import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
+import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.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 {
+public class YangJavaRpc extends YangRpc implements JavaCodeGenerator, HasJavaFileInfo {
/**
- * Creates an instance of java Rpc.
+ * Contains the information of the java file being generated.
+ */
+ private JavaFileInfo javaFileInfo;
+
+ /**
+ * Creates an instance of YANG java rpc.
*/
public YangJavaRpc() {
+ super();
+ setJavaFileInfo(new JavaFileInfo());
}
/**
* Prepares the information for java code generation corresponding to YANG
- * RPC info.
+ * rpc info.
*
* @param yangPlugin YANG plugin config
- * @throws IOException IO operation fail
+ * @throws IOException IO operations fails
*/
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
- // TODO
+
+ if (!(this instanceof YangNode)) {
+ // TODO:throw exception
+ }
+
+ // Add package information for rpc and create corresponding folder.
+ updatePackageInfo(this, yangPlugin);
+
+ // Get the parent module/sub-module.
+ YangNode parent = getParentNodeInGenCode((YangNode) this);
+
+ // Parent should be holder of rpc or notification.
+ if (!(parent instanceof HasRpcNotification)) {
+ throw new TranslatorException("parent node of rpc can only be module or sub-module");
+ }
+
+ /*
+ * Create attribute info for input and output of rpc and add it to the
+ * parent import list.
+ */
+
+ JavaAttributeInfo javaAttributeInfoOfInput = null;
+ JavaAttributeInfo javaAttributeInfoOfOutput = null;
+
+ // Get the child input and output node and obtain create java attribute info.
+ YangNode yangNode = this.getChild();
+ while (yangNode != null) {
+ if (yangNode instanceof YangInput) {
+ javaAttributeInfoOfInput = getCurNodeAsAttributeInParent(parent, false, yangNode.getName());
+ } else if (yangNode instanceof YangOutput) {
+ javaAttributeInfoOfOutput = getCurNodeAsAttributeInParent(parent, false, yangNode.getName());
+ } else {
+ // TODO throw exception
+ }
+ yangNode = yangNode.getNextSibling();
+ }
+
+ if (!(parent instanceof HasTempJavaCodeFragmentFiles)) {
+ throw new TranslatorException("missing parent temp file handle");
+ }
+
+ /*
+ * Add the rpc information to the parent's service temp file.
+ */
+ ((HasTempJavaCodeFragmentFiles) parent)
+ .getTempJavaCodeFragmentFiles()
+ .addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfoOfInput, javaAttributeInfoOfOutput,
+ ((YangNode) this).getName());
}
/**
- * Creates a java file using the YANG RPC info.
+ * Creates a java file using the YANG rpc info.
*
- * @throws IOException IO operation fail
+ * @throws IOException IO operations fails
*/
@Override
public void generateCodeExit() throws IOException {
- // TODO
+ // No file will be generated during RPC exit.
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfo getJavaFileInfo() {
+
+ if (javaFileInfo == null) {
+ throw new TranslatorException("missing java info in java datamodel node");
+ }
+ return javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfo javaInfo) {
+ javaFileInfo = javaInfo;
}
}
+
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
index d31961d..8bf7592 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModule.java
@@ -26,7 +26,7 @@
import org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils;
import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_MANAGER_WITH_RPC;
import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
/**
@@ -58,7 +58,7 @@
super();
setJavaFileInfo(new JavaFileInfo());
setJavaImportData(new JavaImportData());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_MANAGER_WITH_RPC);
}
/**
@@ -98,7 +98,7 @@
* Sets the data of java imports to be included in generated file.
*
* @param javaImportData data of java imports to be included in generated
- * file
+ * file
*/
@Override
public void setJavaImportData(JavaImportData javaImportData) {
@@ -129,7 +129,7 @@
* Returns the name space of the module to which the sub module belongs to.
*
* @param belongsToInfo Information of the module to which the sub module
- * belongs
+ * belongs
* @return the name space string of the module.
*/
private String getNameSpaceFromModule(YangBelongsTo belongsToInfo) {
@@ -138,7 +138,7 @@
}
/**
- * Prepare the information for java code generation corresponding to YANG
+ * Prepares the information for java code generation corresponding to YANG
* submodule info.
*
* @param yangPlugin YANG plugin config
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java
index 7e32f08..b7efb5f 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDef.java
@@ -25,7 +25,7 @@
import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfType;
+import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode;
/**
* Represents type define information extended to support java code generation.
@@ -133,7 +133,7 @@
*/
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
- generateCodeOfType(this, yangPlugin, false);
+ generateCodeOfNode(this, yangPlugin, false);
}
/**
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java
index 8280184..7af19c6 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnion.java
@@ -24,7 +24,7 @@
import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfType;
+import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode;
/**
* Represents union information extended to support java code generation.
@@ -135,7 +135,7 @@
*/
@Override
public void generateCodeEntry(YangPluginConfig yangPlugin) throws IOException {
- generateCodeOfType(this, yangPlugin, false);
+ generateCodeOfNode(this, yangPlugin);
}
/**