blob: baa427f5db88da0e56172f6fdb229d8d35ca85e6 [file] [log] [blame]
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +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;
18
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053019import java.io.File;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053020import java.io.IOException;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053021import java.util.List;
22
23import org.onosproject.yangutils.datamodel.YangNode;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053024import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053025import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053026import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModuleTranslator;
27import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModuleTranslator;
Bharat saraswalb551aae2016-07-14 15:18:20 +053028import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053029
30import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
31import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswalb551aae2016-07-14 15:18:20 +053032import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addListenersImport;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053033import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateServiceInterfaceFile;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053034import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.addResolvedAugmentedDataNodeImports;
Bharat saraswalb551aae2016-07-14 15:18:20 +053035import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053036import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcManagerMethod;
37import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcServiceMethod;
Bharat saraswalc0e04842016-05-12 13:16:57 +053038import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053039import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_SERVICE;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053040import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswalc0e04842016-05-12 13:16:57 +053041import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
42import static org.onosproject.yangutils.utils.UtilConstants.VOID;
Bharat saraswalb551aae2016-07-14 15:18:20 +053043import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Bharat saraswalb551aae2016-07-14 15:18:20 +053044import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateJavaDocForRpc;
Bharat saraswalb551aae2016-07-14 15:18:20 +053045import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswalb551aae2016-07-14 15:18:20 +053046import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053047
48/**
Bharat saraswalb551aae2016-07-14 15:18:20 +053049 * Represents implementation of java service code fragments temporary implementations. Maintains the temp files required
50 * specific for service and manager java snippet generation.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053051 */
52public class TempJavaServiceFragmentFiles
53 extends TempJavaFragmentFiles {
54
55 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053056 * File name for rpc method.
57 */
58 private static final String RPC_INTERFACE_FILE_NAME = "Rpc";
59
60 /**
61 * File name for rpc implementation method.
62 */
63 private static final String RPC_IMPL_FILE_NAME = "RpcImpl";
64
65 /**
Bharat saraswald50c6382016-07-14 21:57:13 +053066 * File name for generated class file for service suffix.
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053067 */
68 private static final String SERVICE_FILE_NAME_SUFFIX = "Service";
69
70 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053071 * Temporary file handle for rpc interface.
72 */
73 private File rpcInterfaceTempFileHandle;
74
75 /**
76 * Temporary file handle for rpc manager impl.
77 */
78 private File rpcImplTempFileHandle;
79
80 /**
81 * Java file handle for rpc interface file.
82 */
83 private File serviceInterfaceJavaFileHandle;
84
85 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +053086 * Creates an instance of temporary java code fragment.
87 *
88 * @param javaFileInfo generated file information
89 * @throws IOException when fails to create new file handle
90 */
Bharat saraswale707f032016-07-14 23:33:55 +053091 TempJavaServiceFragmentFiles(JavaFileInfo javaFileInfo)
Bharat saraswalb551aae2016-07-14 15:18:20 +053092 throws IOException {
93 setJavaExtendsListHolder(new JavaExtendsListHolder());
94 setJavaImportData(new JavaImportData());
95 setJavaFileInfo(javaFileInfo);
96 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
97 getJavaFileInfo().getPackageFilePath()));
98 addGeneratedTempFile(RPC_INTERFACE_MASK);
99 addGeneratedTempFile(RPC_IMPL_MASK);
100
Bharat saraswalb551aae2016-07-14 15:18:20 +0530101 setRpcInterfaceTempFileHandle(getTemporaryFileHandle(RPC_INTERFACE_FILE_NAME));
102 setRpcImplTempFileHandle(getTemporaryFileHandle(RPC_IMPL_FILE_NAME));
Bharat saraswalb551aae2016-07-14 15:18:20 +0530103 }
104
105 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530106 * Returns rpc method's java file handle.
107 *
108 * @return java file handle
109 */
110 private File getServiceInterfaceJavaFileHandle() {
111 return serviceInterfaceJavaFileHandle;
112 }
113
114 /**
115 * Sets rpc method's java file handle.
116 *
117 * @param serviceInterfaceJavaFileHandle file handle for to rpc method
118 */
119 private void setServiceInterfaceJavaFileHandle(File serviceInterfaceJavaFileHandle) {
120 this.serviceInterfaceJavaFileHandle = serviceInterfaceJavaFileHandle;
121 }
122
123 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530124 * Returns rpc method's temporary file handle.
125 *
126 * @return temporary file handle
127 */
128 public File getRpcInterfaceTempFileHandle() {
129 return rpcInterfaceTempFileHandle;
130 }
131
132 /**
133 * Sets rpc method's temporary file handle.
134 *
135 * @param rpcInterfaceTempFileHandle file handle for to rpc method
136 */
137 private void setRpcInterfaceTempFileHandle(File rpcInterfaceTempFileHandle) {
138 this.rpcInterfaceTempFileHandle = rpcInterfaceTempFileHandle;
139 }
140
141 /**
142 * Retrieves the manager impl temp file.
143 *
144 * @return the manager impl temp file
145 */
146 public File getRpcImplTempFileHandle() {
147 return rpcImplTempFileHandle;
148 }
149
150 /**
151 * Sets the manager impl temp file.
152 *
153 * @param rpcImplTempFileHandle the manager impl temp file
154 */
Bharat saraswale707f032016-07-14 23:33:55 +0530155 private void setRpcImplTempFileHandle(File rpcImplTempFileHandle) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530156 this.rpcImplTempFileHandle = rpcImplTempFileHandle;
157 }
158
159 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530160 * Constructs java code exit.
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530161 *
162 * @param fileType generated file type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530163 * @param curNode current YANG node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530164 * @throws IOException when fails to generate java files
165 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530166 @Override
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530167 public void generateJavaFile(int fileType, YangNode curNode)
168 throws IOException {
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530169
170 addResolvedAugmentedDataNodeImports(curNode);
Bharat saraswalb551aae2016-07-14 15:18:20 +0530171 List<String> imports = ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles()
172 .getJavaImportData().getImports();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530173 createPackage(curNode);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530174 boolean isNotification = false;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530175 if (curNode instanceof YangJavaModuleTranslator) {
176 if (!((YangJavaModuleTranslator) curNode).getNotificationNodes().isEmpty()) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530177 isNotification = true;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530178 }
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530179 } else if (curNode instanceof YangJavaSubModuleTranslator) {
180 if (!((YangJavaSubModuleTranslator) curNode).getNotificationNodes().isEmpty()) {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530181 isNotification = true;
182 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530183 }
184
185 if (isNotification) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530186 addListenersImport(curNode, imports, true, LISTENER_SERVICE);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530187 }
Bharat saraswale707f032016-07-14 23:33:55 +0530188
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530189 setServiceInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(SERVICE_FILE_NAME_SUFFIX)));
Bharat saraswalb551aae2016-07-14 15:18:20 +0530190 generateServiceInterfaceFile(getServiceInterfaceJavaFileHandle(), curNode, imports);
Bharat saraswale707f032016-07-14 23:33:55 +0530191
192 // Close all the file handles.
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530193 freeTemporaryResources(false);
194 }
195
196 /**
197 * Adds rpc string information to applicable temp file.
198 *
Bharat saraswale707f032016-07-14 23:33:55 +0530199 * @param javaAttributeInfoOfInput RPCs input node attribute info
200 * @param javaAttributeInfoOfOutput RPCs output node attribute info
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530201 * @param rpcName name of the rpc function
202 * @param pluginConfig plugin configurations
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530203 * @throws IOException IO operation fail
204 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530205 private void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput,
Bharat saraswalb551aae2016-07-14 15:18:20 +0530206 JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig,
207 String rpcName)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530208 throws IOException {
Bharat saraswalc0e04842016-05-12 13:16:57 +0530209 String rpcInput = EMPTY_STRING;
210 String rpcOutput = VOID;
Bharat saraswalcad0e652016-05-26 23:48:38 +0530211 String rpcInputJavaDoc = EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530212 if (javaAttributeInfoOfInput != null) {
janani b4a6711a2016-05-17 13:12:22 +0530213 rpcInput = getCapitalCase(javaAttributeInfoOfInput.getAttributeName());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530214 }
215 if (javaAttributeInfoOfOutput != null) {
janani b4a6711a2016-05-17 13:12:22 +0530216 rpcOutput = getCapitalCase(javaAttributeInfoOfOutput.getAttributeName());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530217 }
Bharat saraswalcad0e652016-05-26 23:48:38 +0530218 if (!rpcInput.equals(EMPTY_STRING)) {
219 rpcInputJavaDoc = RPC_INPUT_VAR_NAME;
220 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530221 appendToFile(getRpcInterfaceTempFileHandle(),
Bharat saraswalcad0e652016-05-26 23:48:38 +0530222 generateJavaDocForRpc(rpcName, rpcInputJavaDoc, rpcOutput, pluginConfig)
Bharat saraswal33dfa012016-05-17 19:59:16 +0530223 + getRpcServiceMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
224 appendToFile(getRpcImplTempFileHandle(),
225 getRpcManagerMethod(rpcName, rpcInput, rpcOutput, pluginConfig) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530226 }
227
228 /**
229 * Adds the JAVA rpc snippet information.
230 *
Bharat saraswale707f032016-07-14 23:33:55 +0530231 * @param javaAttributeInfoOfInput RPCs input node attribute info
232 * @param javaAttributeInfoOfOutput RPCs output node attribute info
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530233 * @param pluginConfig plugin configurations
234 * @param rpcName name of the rpc function
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530235 * @throws IOException IO operation fail
236 */
237 public void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo javaAttributeInfoOfInput,
Bharat saraswalb551aae2016-07-14 15:18:20 +0530238 JavaAttributeInfo javaAttributeInfoOfOutput,
239 YangPluginConfig pluginConfig, String rpcName)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530240 throws IOException {
Bharat saraswal96dfef02016-06-16 00:29:12 +0530241 addRpcString(javaAttributeInfoOfInput, javaAttributeInfoOfOutput, pluginConfig, rpcName);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530242 }
243
244 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530245 * Removes all temporary file handles.
246 *
Bharat saraswale707f032016-07-14 23:33:55 +0530247 * @param isErrorOccurred flag to tell translator that error has occurred while file generation
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530248 * @throws IOException when failed to delete the temporary files
249 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530250 @Override
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530251 public void freeTemporaryResources(boolean isErrorOccurred)
252 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530253
Bharat saraswale707f032016-07-14 23:33:55 +0530254 closeFile(getServiceInterfaceJavaFileHandle(), isErrorOccurred);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530255
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530256 closeFile(getRpcInterfaceTempFileHandle(), true);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530257 closeFile(getRpcImplTempFileHandle(), true);
258 closeFile(getGetterInterfaceTempFileHandle(), true);
259 closeFile(getSetterInterfaceTempFileHandle(), true);
260 closeFile(getSetterImplTempFileHandle(), true);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530261
262 super.freeTemporaryResources(isErrorOccurred);
263
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530264 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530265}