blob: 39620f92d76d8acf6326bafdecf4a3bb8d671cfc [file] [log] [blame]
Bharat saraswalcc1cdab2016-04-16 02:28:25 +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.utils;
18
19import java.io.File;
20import java.io.IOException;
21import java.util.List;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053022import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalc0e04842016-05-12 13:16:57 +053023import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053024import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
25import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
26import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053027
Bharat saraswal33dfa012016-05-17 19:59:16 +053028import static org.onosproject.yangutils.utils.UtilConstants.ACTIVATE_ANNOTATION_IMPORT;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053029import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION_HOLDER;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053030import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
Bharat saraswal33dfa012016-05-17 19:59:16 +053031import static org.onosproject.yangutils.utils.UtilConstants.COMPONENT_ANNOTATION_IMPORT;
32import static org.onosproject.yangutils.utils.UtilConstants.DEACTIVATE_ANNOTATION_IMPORT;
Bharat saraswal33dfa012016-05-17 19:59:16 +053033import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswal33dfa012016-05-17 19:59:16 +053034import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053035import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_SERVICE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053036import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_FACTORY_IMPORT;
37import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_IMPORT;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053038import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053039import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswal33dfa012016-05-17 19:59:16 +053040import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswal33dfa012016-05-17 19:59:16 +053041import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_ANNOTATION_IMPORT;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053042import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053043import static org.onosproject.yangutils.utils.UtilConstants.TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053044import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053045import static java.util.Collections.sort;
46
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053047/**
48 * Represents utilities for temporary java code fragments.
49 */
50public final class TempJavaCodeFragmentFilesUtils {
51
52 /**
53 * Creates a private instance of temporary java code fragment utils.
54 */
55 private TempJavaCodeFragmentFilesUtils() {
56 }
57
58 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053059 * Adds import for AugmentationHolders class.
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053060 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053061 * @param curNode current YANG node
62 * @param imports list of imports
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053063 * @param operation add or delete import
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053064 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053065 public static void addAugmentationHoldersImport(YangNode curNode, List<String> imports, boolean operation) {
66 String thisImport = getTempJavaFragement(curNode).getJavaImportData().getAugmentationHolderImport();
67 performOperationOnImports(imports, thisImport, operation);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053068 }
69
70 /**
71 * Adds import for AugmentedInfo class.
72 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053073 * @param curNode current YANG node
74 * @param imports list of imports
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053075 * @param operation add or delete import
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053076 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053077 public static void addAugmentedInfoImport(YangNode curNode, List<String> imports, boolean operation) {
78 String thisImport = getTempJavaFragement(curNode).getJavaImportData().getAugmentedInfoImport();
79 performOperationOnImports(imports, thisImport, operation);
80 }
81
82 /**
83 * Returns temp java fragment.
84 *
85 * @param curNode current YANG node
86 * @return temp java fragments
87 */
88 public static TempJavaFragmentFiles getTempJavaFragement(YangNode curNode) {
89 TempJavaCodeFragmentFiles container = ((TempJavaCodeFragmentFilesContainer) curNode)
90 .getTempJavaCodeFragmentFiles();
91 if (container.getBeanTempFiles() != null) {
92 return container.getBeanTempFiles();
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053093 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053094 if (container.getServiceTempFiles() != null) {
95 return container.getServiceTempFiles();
96 }
97
98 return null;
99 }
100
101 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530102 * Adds import for array list.
103 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530104 * @param curNode current YANG node
105 * @param imports list of imports
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530106 * @param operation add or delete import
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530107 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530108 public static void addArrayListImport(YangNode curNode, List<String> imports, boolean operation) {
109 String arrayListImport = getTempJavaFragement(curNode).getJavaImportData().getImportForArrayList();
110 String listImport = getTempJavaFragement(curNode).getJavaImportData().getImportForList();
111 performOperationOnImports(imports, arrayListImport, operation);
112 if (!imports.contains(listImport)) {
113 /**
114 * List can be there because of attribute also , so no need to remove it and operation will
115 * always be add(true).
116 */
117 performOperationOnImports(imports, listImport, true);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530118 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530119 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530120
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530121 /**
122 * Adds listener's imports.
123 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530124 * @param curNode currentYangNode.
125 * @param imports import list
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530126 * @param operation add or remove
127 * @param classInfo class info to be added to import list
128 */
129 public static void addListnersImport(YangNode curNode, List<String> imports, boolean operation,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530130 String classInfo) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530131 String thisImport = "";
132 if (classInfo.equals(LISTENER_SERVICE)) {
133 thisImport = getTempJavaFragement(curNode).getJavaImportData().getListenerServiceImport();
134 performOperationOnImports(imports, thisImport, operation);
135 } else {
136 thisImport = getTempJavaFragement(curNode).getJavaImportData().getListenerRegistryImport();
137 performOperationOnImports(imports, thisImport, operation);
138 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530139 }
140
141 /**
Bharat saraswal33dfa012016-05-17 19:59:16 +0530142 * Adds annotations imports.
143 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530144 * @param imports list if imports
Bharat saraswal33dfa012016-05-17 19:59:16 +0530145 * @param operation to add or to delete
146 */
147 public static void addAnnotationsImports(List<String> imports, boolean operation) {
148 if (operation) {
149 imports.add(ACTIVATE_ANNOTATION_IMPORT);
150 imports.add(DEACTIVATE_ANNOTATION_IMPORT);
151 imports.add(COMPONENT_ANNOTATION_IMPORT);
152 imports.add(SERVICE_ANNOTATION_IMPORT);
153 imports.add(LOGGER_FACTORY_IMPORT);
154 imports.add(LOGGER_IMPORT);
155 } else {
156 imports.remove(ACTIVATE_ANNOTATION_IMPORT);
157 imports.remove(DEACTIVATE_ANNOTATION_IMPORT);
158 imports.remove(COMPONENT_ANNOTATION_IMPORT);
159 imports.remove(SERVICE_ANNOTATION_IMPORT);
160 imports.remove(LOGGER_FACTORY_IMPORT);
161 imports.remove(LOGGER_IMPORT);
162 }
163 sortImports(imports);
164 }
165
166 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530167 * Performs given operations on import list.
168 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530169 * @param imports list of imports
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530170 * @param curImport current import
171 * @param operation add or remove
172 * @return import list
173 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530174 private static List<String> performOperationOnImports(List<String> imports, String curImport,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530175 boolean operation) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530176 if (operation) {
177 imports.add(curImport);
178 } else {
179 imports.remove(curImport);
180 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530181 sortImports(imports);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530182 return imports;
183 }
184
185 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530186 * Returns true if AugmentationHolder class needs to be extended.
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530187 *
188 * @param extendsList list of classes need to be extended
189 * @return true or false
190 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530191 public static boolean isAugmentationHolderExtended(List<JavaQualifiedTypeInfo> extendsList) {
192 for (JavaQualifiedTypeInfo info : extendsList) {
193 return info.getClassInfo().equals(AUGMENTATION_HOLDER);
194 }
195 return false;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530196 }
197
198 /**
199 * Returns true if AugmentedInfo class needs to be extended.
200 *
201 * @param extendsList list of classes need to be extended
202 * @return true or false
203 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530204 public static boolean isAugmentedInfoExtended(List<JavaQualifiedTypeInfo> extendsList) {
205 for (JavaQualifiedTypeInfo info : extendsList) {
206 return info.getClassInfo().equals(AUGMENTED_INFO);
207 }
208 return false;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530209 }
210
211 /**
212 * Closes the file handle for temporary file.
213 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530214 * @param file file to be closed
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530215 * @param toBeDeleted flag to indicate if file needs to be deleted
216 * @throws IOException when failed to close the file handle
217 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530218 public static void closeFile(File file, boolean toBeDeleted)
219 throws IOException {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530220
221 if (file != null) {
222 updateFileHandle(file, null, true);
223 if (toBeDeleted) {
224 file.delete();
225 }
226 }
227 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530228
229 /**
Bharat saraswalc0e04842016-05-12 13:16:57 +0530230 * Returns sorted import list.
231 *
232 * @param imports import list
233 * @return sorted import list
234 */
235 public static List<String> sortImports(List<String> imports) {
236 sort(imports);
237 return imports;
238 }
239
Bharat saraswal33dfa012016-05-17 19:59:16 +0530240 /**
241 * Returns event enum start.
242 *
243 * @return event enum start
244 */
245 public static String getEventEnumTypeStart() {
246 return FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE + TYPE + SPACE + OPEN_CURLY_BRACKET
247 + NEW_LINE;
248 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530249}