blob: d0e1f03d9009a1d9bfbe1a1380793b4f168af552 [file] [log] [blame]
Bharat saraswalc2d3be12016-06-16 00:29:12 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.javamodel;
18
Bharat saraswalc2d3be12016-06-16 00:29:12 +053019import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
20import org.onosproject.yangutils.datamodel.YangInput;
21import org.onosproject.yangutils.datamodel.YangNode;
22import org.onosproject.yangutils.datamodel.YangOutput;
Shankara-Huaweib7564772016-08-02 18:13:13 +053023import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaRpc;
Bharat saraswalc2d3be12016-06-16 00:29:12 +053024import org.onosproject.yangutils.translator.exception.TranslatorException;
25import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
26import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
Bharat saraswale50edca2016-08-05 01:58:25 +053027import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswale3175d32016-08-31 17:50:11 +053028import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswalc2d3be12016-06-16 00:29:12 +053029import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
30import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053031import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswale50edca2016-08-05 01:58:25 +053032import org.onosproject.yangutils.utils.io.YangPluginConfig;
Bharat saraswalc2d3be12016-06-16 00:29:12 +053033
Bharat saraswal9fab16b2016-09-23 23:27:24 +053034import java.io.IOException;
35
Bharat saraswalc2d3be12016-06-16 00:29:12 +053036import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053037import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053038import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
39import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_CHILD_NODE;
40import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
41import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
Bharat saraswalc2d3be12016-06-16 00:29:12 +053042
43/**
44 * Represents rpc information extended to support java code generation.
45 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053046public class YangJavaRpcTranslator
47 extends YangJavaRpc
Bharat saraswalc2d3be12016-06-16 00:29:12 +053048 implements JavaCodeGenerator, JavaCodeGeneratorInfo {
49
50 private static final long serialVersionUID = 806201622L;
51
52 /**
Bharat saraswal8beac342016-08-04 02:00:03 +053053 * Temporary file for code generation.
Bharat saraswalc2d3be12016-06-16 00:29:12 +053054 */
55 private transient TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles;
56
57 /**
58 * Creates an instance of YANG java rpc.
59 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053060 public YangJavaRpcTranslator() {
Bharat saraswale50edca2016-08-05 01:58:25 +053061 setJavaFileInfo(new JavaFileInfoTranslator());
Bharat saraswalc2d3be12016-06-16 00:29:12 +053062 }
63
64 /**
65 * Returns the generated java file information.
66 *
67 * @return generated java file information
68 */
69 @Override
Bharat saraswale50edca2016-08-05 01:58:25 +053070 public JavaFileInfoTranslator getJavaFileInfo() {
Bharat saraswalc2d3be12016-06-16 00:29:12 +053071
72 if (javaFileInfo == null) {
Bharat saraswale3175d32016-08-31 17:50:11 +053073 throw new TranslatorException("missing java info in java datamodel node " +
Bharat saraswal9fab16b2016-09-23 23:27:24 +053074 getName());
Bharat saraswalc2d3be12016-06-16 00:29:12 +053075 }
Bharat saraswale50edca2016-08-05 01:58:25 +053076 return (JavaFileInfoTranslator) javaFileInfo;
Bharat saraswalc2d3be12016-06-16 00:29:12 +053077 }
78
79 /**
80 * Sets the java file info object.
81 *
82 * @param javaInfo java file info object
83 */
84 @Override
Bharat saraswale50edca2016-08-05 01:58:25 +053085 public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
Bharat saraswalc2d3be12016-06-16 00:29:12 +053086 javaFileInfo = javaInfo;
87 }
88
89 @Override
90 public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
91 return tempJavaCodeFragmentFiles;
92 }
93
94 @Override
95 public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
96 tempJavaCodeFragmentFiles = fileHandle;
97 }
98
99 /**
100 * Prepares the information for java code generation corresponding to YANG
101 * RPC info.
102 *
103 * @param yangPlugin YANG plugin config
104 * @throws TranslatorException translator operations fails
105 */
106 @Override
107 public void generateCodeEntry(YangPluginConfig yangPlugin)
108 throws TranslatorException {
109
110 // Add package information for rpc and create corresponding folder.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530111 updatePackageInfo(this, yangPlugin);
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530112 }
113
114 /**
115 * Creates a java file using the YANG RPC info.
116 *
117 * @throws TranslatorException translator operations fails
118 */
119 @Override
120 public void generateCodeExit()
121 throws TranslatorException {
122 // Get the parent module/sub-module.
123 YangNode parent = getParentNodeInGenCode(this);
124
125 // Parent should be holder of rpc or notification.
126 if (!(parent instanceof RpcNotificationContainer)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530127 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
128 this));
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530129 }
130
131 /*
132 * Create attribute info for input and output of rpc and add it to the
133 * parent import list.
134 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530135 TempJavaServiceFragmentFiles tempJavaFragmentFiles =
136 ((TempJavaCodeFragmentFilesContainer) getParent())
137 .getTempJavaCodeFragmentFiles()
138 .getServiceTempFiles();
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530139 JavaAttributeInfo javaAttributeInfoOfInput = null;
140 JavaAttributeInfo javaAttributeInfoOfOutput = null;
141
142 // Get the child input and output node and obtain create java attribute
143 // info.
144 YangNode yangNode = getChild();
145 while (yangNode != null) {
146 if (yangNode instanceof YangInput) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530147 javaAttributeInfoOfInput = tempJavaFragmentFiles
148 .getChildNodeAsAttributeInParentService(yangNode,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530149 getParent(),
150 getJavaClassNameOrBuiltInType());
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530151 } else if (yangNode instanceof YangOutput) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530152 javaAttributeInfoOfOutput = tempJavaFragmentFiles
153 .getChildNodeAsAttributeInParentService(yangNode,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530154 getParent(),
155 getJavaClassNameOrBuiltInType());
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530156 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530157 throw new TranslatorException(getErrorMsg(INVALID_CHILD_NODE,
158 this));
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530159 }
160 yangNode = yangNode.getNextSibling();
161 }
162
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530163 /*
164 * Add the rpc information to the parent's service temp file.
165 */
166 try {
167
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530168 ((TempJavaCodeFragmentFilesContainer) parent)
169 .getTempJavaCodeFragmentFiles().getServiceTempFiles()
170 .addJavaSnippetInfoToApplicableTempFiles(
171 javaAttributeInfoOfInput, javaAttributeInfoOfOutput,
172 getJavaClassNameOrBuiltInType());
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530173 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530174 throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
175 e.getLocalizedMessage()));
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530176 }
177 // No file will be generated during RPC exit.
178 }
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530179}