blob: b09f12385c983bc239e06fff41fa5fb4c365e9c4 [file] [log] [blame]
Bharat saraswale2d51d62016-03-23 19:40:35 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswale2d51d62016-03-23 19:40:35 +05303 *
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.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswalb551aae2016-07-14 15:18:20 +053021import java.util.ArrayList;
Bharat saraswale2d51d62016-03-23 19:40:35 +053022import java.util.List;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053023
Bharat saraswalb551aae2016-07-14 15:18:20 +053024import org.onosproject.yangutils.datamodel.YangAtomicPath;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053025import org.onosproject.yangutils.datamodel.YangAugment;
janani bf9819ff2016-08-03 16:40:01 +053026import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053027import org.onosproject.yangutils.datamodel.YangModule;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053028import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053029import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053030import org.onosproject.yangutils.datamodel.YangSubModule;
janani bf9819ff2016-08-03 16:40:01 +053031import org.onosproject.yangutils.datamodel.YangType;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053032import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
33import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
janani bf9819ff2016-08-03 16:40:01 +053034import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053035import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalb551aae2016-07-14 15:18:20 +053036import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053037import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswalb551aae2016-07-14 15:18:20 +053038import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053039import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053040import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalb551aae2016-07-14 15:18:20 +053041import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswalc0e04842016-05-12 13:16:57 +053042import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053043import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053044import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053045import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
46import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale2d51d62016-03-23 19:40:35 +053047import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
48import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
49
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053074import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053079import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053080import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053081import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053082import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
83import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
84import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053085import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053086import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getNodesPackage;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053087import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053088import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
janani bf9819ff2016-08-03 16:40:01 +053089import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
Bharat saraswale2d51d62016-03-23 19:40:35 +053090import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +053091import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswale2d51d62016-03-23 19:40:35 +053092import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053093import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053094import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
95import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
96import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053097import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
98import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053099import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530100import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
101import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530102import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530103import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
104import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530105import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530106import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530107import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
108import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
109import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530112
113/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530114 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530115 */
116public final class JavaFileGeneratorUtils {
117
118 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530119 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530120 */
121 private JavaFileGeneratorUtils() {
122 }
123
124 /**
125 * Returns a file object for generated file.
126 *
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530127 * @param filePath file package path
128 * @param fileName file name
129 * @param extension file extension
130 * @param handler cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530131 * @return file object
132 */
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530133 public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handler) {
134 return new File(handler.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530135 }
136
137 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530138 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530139 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530140 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530141 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530142 * @param absolutePath absolute path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530143 * @return data stored in temporary files
144 * @throws IOException when failed to get the data from temporary file handle
145 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530146 static String getDataFromTempFileHandle(int generatedTempFiles,
147 TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530148 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530149
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530150 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530151
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530152 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
153 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
154 }
155
156 TempJavaBeanFragmentFiles beanFragmentFiles = null;
157
158 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
159 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
160 }
161
162 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
163 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
164 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
165 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530166
Bharat saraswald50c6382016-07-14 21:57:13 +0530167 TempJavaEventFragmentFiles eventFragmentFiles = null;
168 if (tempJavaFragmentFiles instanceof TempJavaEventFragmentFiles) {
169 eventFragmentFiles = (TempJavaEventFragmentFiles) tempJavaFragmentFiles;
170 }
171
Bharat saraswalc0e04842016-05-12 13:16:57 +0530172 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
173 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530174 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
175 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530176 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530177 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530178 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle(),
179 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530180 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530181 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530182 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle(),
183 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530184 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530185 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530186 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle(),
187 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530188 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530189 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530190 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle(),
191 absolutePath);
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530192 } else if ((generatedTempFiles & ADD_TO_LIST_INTERFACE_MASK) != 0) {
193 return tempJavaFragmentFiles
194 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAddToListInterfaceTempFileHandle(),
195 absolutePath);
196 } else if ((generatedTempFiles & ADD_TO_LIST_IMPL_MASK) != 0) {
197 return tempJavaFragmentFiles
198 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAddToListImplTempFileHandle(),
199 absolutePath);
200 } else if ((generatedTempFiles & LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) != 0) {
201 return tempJavaFragmentFiles
202 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getLeafIdAttributeTempFileHandle(),
203 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530204 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530205 if (beanFragmentFiles == null) {
206 throw new TranslatorException("Required constructor info is missing.");
207 }
208 return beanFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530209 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle(),
210 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530211 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530212 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530213 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle(),
214 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530215 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530216 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530217 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle(),
218 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530219 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530220 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530221 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle(),
222 absolutePath);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530223 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530224 if (typeFragmentFiles == null) {
225 throw new TranslatorException("Required of string implementation info is missing.");
226 }
227 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530228 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530229 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
230 if (typeFragmentFiles == null) {
231 throw new TranslatorException("Required constructor implementation info is missing.");
232 }
233 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530234 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle(),
235 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530236 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530237 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530238 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle(),
239 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530240 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
241 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
242 throw new TranslatorException("Required enum info is missing.");
243 }
244 TempJavaEnumerationFragmentFiles enumFragmentFiles =
245 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
246 return enumFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530247 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530248 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
249 if (serviceFragmentFiles == null) {
250 throw new TranslatorException("Required rpc interface info is missing.");
251 }
252 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530253 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle(),
254 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530255 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530256 if (serviceFragmentFiles == null) {
257 throw new TranslatorException("Required rpc implementation info is missing.");
258 }
259 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530260 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle(),
261 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530262 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530263 if (eventFragmentFiles == null) {
264 throw new TranslatorException("Required event enum implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530265 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530266 return eventFragmentFiles
267 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventEnumTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530268 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530269 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530270 if (eventFragmentFiles == null) {
271 throw new TranslatorException("Required event method implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530272 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530273 return eventFragmentFiles
274 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventMethodTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530275 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530276 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530277 if (eventFragmentFiles == null) {
278 throw new TranslatorException("Required event subject getter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530279 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530280 return eventFragmentFiles
281 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectGetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530282 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530283 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530284 if (eventFragmentFiles == null) {
285 throw new TranslatorException("Required event subject setter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530286 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530287 return eventFragmentFiles
288 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectSetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530289 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530290 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530291 if (eventFragmentFiles == null) {
292 throw new TranslatorException("Required event subject attribute implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530293 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530294 return eventFragmentFiles
295 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectAttributeTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530296 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530297 }
298 return null;
299 }
300
301 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530302 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530303 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530304 * @param file generated file
305 * @param className generated file class name
306 * @param genType generated file type
307 * @param imports imports for the file
308 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530309 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530310 * @throws IOException when fails to generate a file
311 */
sangyun-han19f8d352016-05-30 19:33:27 +0900312 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530313 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530314 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530315
Bharat saraswald50c6382016-07-14 21:57:13 +0530316 boolean isFileCreated;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530317 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530318 isFileCreated = file.createNewFile();
319 if (!isFileCreated) {
320 throw new IOException("Failed to create " + file.getName() + " class file.");
321 }
sangyun-han19f8d352016-05-30 19:33:27 +0900322 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530323 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530324 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswale2d51d62016-03-23 19:40:35 +0530325 }
326 }
327
328 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530329 * Initiates generation of file based on generated file type.
330 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530331 * @param file generated file
332 * @param genType generated file type
333 * @param imports imports for the file
334 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530335 * @param className class name
336 * @throws IOException when fails to generate a file
337 */
sangyun-han19f8d352016-05-30 19:33:27 +0900338 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530339 YangNode curNode, String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530340 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530341
Bharat saraswald50c6382016-07-14 21:57:13 +0530342 boolean isFileCreated;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530343 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530344 isFileCreated = file.createNewFile();
345 if (!isFileCreated) {
346 throw new IOException("Failed to create " + file.getName() + " class file.");
347 }
sangyun-han19f8d352016-05-30 19:33:27 +0900348 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530349 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530350 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530351 }
352 }
353
354 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530355 * Appends all the contents into a generated java file.
356 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530357 * @param file generated file
358 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900359 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530360 * @param curNode current YANG node
361 * @param className class name
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530362 * @throws IOException when fails to do IO operations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530363 */
sangyun-han19f8d352016-05-30 19:33:27 +0900364 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530365 String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530366 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530367
368 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
369
Bharat saraswal33dfa012016-05-17 19:59:16 +0530370 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530371 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530372
Bharat saraswald50c6382016-07-14 21:57:13 +0530373 String pkgString;
sangyun-han19f8d352016-05-30 19:33:27 +0900374 if (genType == GENERATE_EVENT_CLASS
375 || genType == GENERATE_EVENT_LISTENER_INTERFACE
376 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530377 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530378 } else {
379 pkgString = parsePackageString(path, importsList);
380 }
sangyun-han19f8d352016-05-30 19:33:27 +0900381 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530382 case INTERFACE_MASK:
Bharat saraswald50c6382016-07-14 21:57:13 +0530383 appendHeaderContents(file, pkgString, importsList);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530384 write(file, genType, INTERFACE, curNode, className);
385 break;
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530386 case DEFAULT_CLASS_MASK:
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530387 appendHeaderContents(file, pkgString, importsList);
388 write(file, genType, IMPL_CLASS, curNode, className);
389 break;
390 case BUILDER_CLASS_MASK:
391 write(file, genType, BUILDER_CLASS, curNode, className);
392 break;
393 case BUILDER_INTERFACE_MASK:
394 write(file, genType, BUILDER_INTERFACE, curNode, className);
395 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530396 case GENERATE_SERVICE_AND_MANAGER:
397 appendHeaderContents(file, pkgString, importsList);
398 write(file, genType, RPC_INTERFACE, curNode, className);
399 break;
400 case GENERATE_EVENT_CLASS:
401 appendHeaderContents(file, pkgString, importsList);
402 write(file, genType, EVENT, curNode, className);
403 break;
404 case GENERATE_EVENT_LISTENER_INTERFACE:
405 appendHeaderContents(file, pkgString, importsList);
406 write(file, genType, EVENT_LISTENER, curNode, className);
407 break;
408 case GENERATE_EVENT_SUBJECT_CLASS:
409 appendHeaderContents(file, pkgString, importsList);
410 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
411 break;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530412 case GENERATE_IDENTITY_CLASS:
413 appendHeaderContents(file, pkgString, importsList);
414 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
415 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
416 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530417 default:
418 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530419 }
420 }
421
422 /**
423 * Appends all the contents into a generated java file.
424 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530425 * @param file generated file
426 * @param fileName generated file name
427 * @param genType generated file type
428 * @param importsList list of java imports
429 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900430 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530431 * @throws IOException when fails to append contents
432 */
sangyun-han19f8d352016-05-30 19:33:27 +0900433 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530434 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530435 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530436
437 String pkgString = parsePackageString(pkg, importsList);
438
sangyun-han19f8d352016-05-30 19:33:27 +0900439 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530440 case GENERATE_TYPEDEF_CLASS:
441 appendHeaderContents(file, pkgString, importsList);
442 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
443 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530444 case GENERATE_UNION_CLASS:
445 appendHeaderContents(file, pkgString, importsList);
446 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
447 break;
448 case GENERATE_ENUM_CLASS:
449 appendHeaderContents(file, pkgString, importsList);
450 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
451 break;
452 default:
453 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530454 }
455 }
456
457 /**
458 * Removes base directory path from package and generates package string for file.
459 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530460 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530461 * @param importsList list of imports
462 * @return package string
463 */
464 private static String parsePackageString(String javaPkg, List<String> importsList) {
465
Bharat saraswal33dfa012016-05-17 19:59:16 +0530466 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530467 if (importsList != null) {
468 if (!importsList.isEmpty()) {
469 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
470 } else {
471 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
472 }
473 } else {
474 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
475 }
476 }
477
478 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530479 * Appends other contents to interface, impl and typedef classes. for example : ONOS copyright, imports and
480 * package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530481 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530482 * @param file generated file
483 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530484 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530485 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530486 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530487 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
488 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530489
490 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
491 insertDataIntoJavaFile(file, pkg);
492
493 /*
Bharat saraswald50c6382016-07-14 21:57:13 +0530494 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530495 * JavaCodeSnippetGen.getFileHeaderComment
496 */
497
498 if (importsList != null) {
499 insertDataIntoJavaFile(file, NEW_LINE);
500 for (String imports : importsList) {
501 insertDataIntoJavaFile(file, imports);
502 }
503 }
504 }
505
506 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530507 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530508 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530509 * @param file generated file
510 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530511 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530512 * @param curNode current YANG node
513 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530514 * @throws IOException when fails to write into a file
515 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530516 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530517 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530518
Bharat saraswal33dfa012016-05-17 19:59:16 +0530519 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530520 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530521 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
522 }
523
524 /**
525 * Writes data to the specific generated file.
526 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530527 * @param file generated file
528 * @param fileName file name
529 * @param genType generated file type
530 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900531 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900532 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530533 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530534 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530535 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530536 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530537 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530538 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530539 }
540
Bharat saraswalb551aae2016-07-14 15:18:20 +0530541 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530542 * Returns set of node identifiers.
543 *
544 * @param parent parent node
545 * @return set of node identifiers
546 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530547 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530548
549 List<YangAtomicPath> targets = new ArrayList<>();
550 YangNodeIdentifier nodeId;
551 List<YangAugment> augments = getListOfAugments(parent);
552 for (YangAugment augment : augments) {
553 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
554
555 if (validateNodeIdentifierInSet(nodeId, targets)) {
556 targets.add(augment.getTargetNode().get(0));
557 }
558 }
559 return targets;
560 }
561
562 /* Returns list of augments.*/
563 private static List<YangAugment> getListOfAugments(YangNode parent) {
564 List<YangAugment> augments = new ArrayList<>();
565 YangNode child = parent.getChild();
566 while (child != null) {
567 if (child instanceof YangAugment) {
568 augments.add((YangAugment) child);
569 }
570 child = child.getNextSibling();
571 }
572 return augments;
573 }
574
575 /*Validates the set for duplicate names of node identifiers.*/
576 private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
577 boolean isPresent = true;
578 for (YangAtomicPath target : targets) {
579 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
580 if (target.getNodeIdentifier().getPrefix() != null) {
581 isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
582 } else {
583 isPresent = nodeId.getPrefix() != null;
584 }
585 }
586 }
587 return isPresent;
588 }
589
590 /**
591 * Adds resolved augmented node imports to manager class.
592 *
593 * @param parent parent node
594 */
595 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530596 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
597 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
598 .getTempJavaCodeFragmentFiles();
599 YangNode augmentedNode;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530600 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530601 String curNodeName;
602 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
603 for (YangAtomicPath nodeId : targets) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530604 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530605 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
606 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
607 } else {
608 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
609 .getConflictResolver()));
610 }
611
612 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
613 parentInfo.getPluginConfig());
614 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
615 parentInfo.getJavaName(), parentInfo.getPackage());
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530616 if (augmentedNode instanceof YangModule || augmentedNode instanceof YangSubModule) {
617 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
618 getCapitalCase(curNodeName) + OP_PARAM,
619 parentInfo.getPluginConfig());
620 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
621 parentInfo.getJavaName(), parentInfo.getPackage());
622 }
Bharat saraswalb551aae2016-07-14 15:18:20 +0530623
624 }
625 }
626
627 /**
628 * Returns qualified type info of augmented node.
629 *
630 * @param augmentedNode augmented node
631 * @param curNodeName current node name
632 * @param pluginConfig plugin configurations
633 * @return qualified type info of augmented node
634 */
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530635 private static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode,
636 String curNodeName,
637 YangPluginConfig pluginConfig) {
638 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
Bharat saraswalb551aae2016-07-14 15:18:20 +0530639 getCapitalCase(curNodeName));
640 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530641 javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
Bharat saraswalb551aae2016-07-14 15:18:20 +0530642 pluginConfig));
643 }
644 return javaQualifiedTypeInfo;
645 }
646
647 /**
648 * Validates if augmented node is imported in parent node.
649 *
650 * @param javaQualifiedTypeInfo qualified type info
651 * @param importData import data
652 * @return true if present in imports
653 */
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530654 private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
Bharat saraswalb551aae2016-07-14 15:18:20 +0530655 JavaImportData importData) {
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530656 for (JavaQualifiedTypeInfoTranslator curImportInfo : importData.getImportSet()) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530657 if (curImportInfo.getClassInfo()
658 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
659 return curImportInfo.getPkgInfo()
660 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
661 }
662 }
663 return true;
664 }
665
666 /**
667 * Return augmented class name for data methods in manager and service.
668 *
669 * @param augmentedNode augmented node
670 * @param parent parent node
671 * @return augmented class name for data methods in manager and service
672 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530673 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530674 String curNodeName;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530675 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530676 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
677 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
678 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
679 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
680 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
681 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
682 } else {
683 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
684 .getConflictResolver()));
685 }
686
687 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
688 getCapitalCase(curNodeName),
689 parentInfo.getPluginConfig());
690 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
691 tempJavaServiceFragmentFiles.getJavaImportData())) {
692 return javaQualifiedTypeInfo.getClassInfo();
693 } else {
694 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
695 }
696 }
697
698 /**
699 * Returns parent node name for data methods in manager and service.
700 *
701 * @param parent parent node
702 * @param pluginConfig plugin configurations
703 * @return parent node name for data methods in manager and service
704 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530705 static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530706 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
707 if (parentInfo.getJavaName() != null) {
708 return getCapitalCase(parentInfo.getJavaName());
709 }
710 return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
711 .getConflictResolver()));
712
713 }
714
janani bf9819ff2016-08-03 16:40:01 +0530715 /**
716 * Checks if the type name is leafref and returns the effective type name.
717 *
718 * @param attributeName name of the current type
719 * @param attributeType effective type
720 * @return name of the effective type
721 */
722 public static String isTypeNameLeafref(String attributeName, YangType<?> attributeType) {
723 if (attributeName.equalsIgnoreCase(LEAFREF)) {
724 return attributeType.getDataTypeName();
725 }
726 return attributeName;
727 }
728
729 /**
730 * Checks if the type is leafref and returns the effective type.
731 *
732 * @param attributeType current type
733 * @return effective type
734 */
735 public static YangType isTypeLeafref(YangType<?> attributeType) {
736 if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
737 YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
738 return leafRef.getEffectiveDataType();
739 }
740 return attributeType;
741 }
Bharat saraswal2d90b0c2016-08-04 02:00:03 +0530742
Bharat saraswale2d51d62016-03-23 19:40:35 +0530743}