blob: adc90efd353d0ed405d1921dad0e2c689445f4b8 [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;
22
23import org.onosproject.yangutils.datamodel.YangNode;
24import org.onosproject.yangutils.translator.tojava.HasJavaImportData;
25
26import static org.onosproject.yangutils.translator.tojava.JavaImportData.getAugmentedInfoImport;
27import static org.onosproject.yangutils.translator.tojava.JavaImportData.getHasAugmentationImport;
28import static org.onosproject.yangutils.translator.tojava.JavaImportData.getImportForArrayList;
29import static org.onosproject.yangutils.translator.tojava.JavaImportData.getImportForList;
30import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO;
31import static org.onosproject.yangutils.utils.UtilConstants.HAS_AUGMENTATION;
32import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle;
33
34/**
35 * Represents utilities for temporary java code fragments.
36 */
37public final class TempJavaCodeFragmentFilesUtils {
38
39 /**
40 * Creates a private instance of temporary java code fragment utils.
41 */
42 private TempJavaCodeFragmentFilesUtils() {
43 }
44
45 /**
46 * Adds imports for ToString and HashCodeMethod.
47 *
48 * @param curNode current YANG node
49 * @param imports import list
50 * @return import list
51 */
52 public static List<String> addImportsToStringAndHasCodeMethods(YangNode curNode, List<String> imports) {
53 if (curNode instanceof HasJavaImportData) {
54 imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForHashAndEquals());
55 imports.add(((HasJavaImportData) curNode).getJavaImportData().getImportForToString());
56 }
57 return imports;
58 }
59
60 /**
61 * Adds import for HasAugmentation class.
62 *
63 * @param curNode current YANG node
64 * @param imports list of imports
65 * @param operation add or delete import
66 * @return import for HasAugmentation class
67 */
68 public static List<String> addHasAugmentationImport(YangNode curNode, List<String> imports, boolean operation) {
69 if (curNode instanceof HasJavaImportData) {
70 String thisImport = getHasAugmentationImport();
71 performOperationOnImports(imports, thisImport, operation);
72 }
73 return imports;
74 }
75
76 /**
77 * Adds import for AugmentedInfo class.
78 *
79 * @param curNode current YANG node
80 * @param imports list of imports
81 * @param operation add or delete import
82 * @return import for AugmentedInfo class
83 */
84 public static List<String> addAugmentedInfoImport(YangNode curNode, List<String> imports, boolean operation) {
85 if (curNode instanceof HasJavaImportData) {
86 String thisImport = getAugmentedInfoImport();
87 performOperationOnImports(imports, thisImport, operation);
88 }
89 return imports;
90 }
91
92 /**
93 * Adds import for array list.
94 *
95 * @param curNode current YANG node
96 * @param imports list of imports
97 * @param operation add or delete import
98 * @return import for HasAugmentation class
99 */
100 public static List<String> addArrayListImport(YangNode curNode, List<String> imports, boolean operation) {
101 if (curNode instanceof HasJavaImportData) {
102 String arrayListImport = getImportForArrayList();
103 String listImport = getImportForList();
104 performOperationOnImports(imports, arrayListImport, operation);
105 if (!imports.contains(listImport)) {
106 /**
107 * List can be there because of attribute also , so no need to remove it and operation will
108 * always be add(true).
109 */
110 performOperationOnImports(imports, listImport, true);
111 }
112 }
113
114 return imports;
115 }
116
117 /**
118 * Performs given operations on import list.
119 *
120 * @param imports list of imports
121 * @param curImport current import
122 * @param operation add or remove
123 * @return import list
124 */
125 private static List<String> performOperationOnImports(List<String> imports, String curImport, boolean operation) {
126 if (operation) {
127 imports.add(curImport);
128 } else {
129 imports.remove(curImport);
130 }
131 java.util.Collections.sort(imports);
132 return imports;
133 }
134
135 /**
136 * Prepares java file generator for extends list.
137 *
138 * @param extendsList list of classes need to be extended
139 */
140 public static void prepareJavaFileGeneratorForExtendsList(List<String> extendsList) {
141
142 if (!extendsList.isEmpty() && !extendsList.equals(null)) {
143 JavaFileGenerator.setExtendsList(extendsList);
144 JavaFileGenerator.setIsExtendsList(true);
145 } else {
146 JavaFileGenerator.getExtendsList().clear();
147 JavaFileGenerator.setIsExtendsList(false);
148 }
149 }
150
151 /**
152 * Returns true if HasAugmentation class needs to be extended.
153 *
154 * @param extendsList list of classes need to be extended
155 * @return true or false
156 */
157 public static boolean isHasAugmentationExtended(List<String> extendsList) {
158 if (extendsList != null && extendsList.contains(HAS_AUGMENTATION)) {
159 return true;
160 }
161 return false;
162 }
163
164 /**
165 * Returns true if AugmentedInfo class needs to be extended.
166 *
167 * @param extendsList list of classes need to be extended
168 * @return true or false
169 */
170 public static boolean isAugmentedInfoExtended(List<String> extendsList) {
171 if (extendsList != null && extendsList.contains(AUGMENTED_INFO)) {
172 return true;
173 }
174 return false;
175 }
176
177 /**
178 * Closes the file handle for temporary file.
179 *
180 * @param file file to be closed
181 * @param toBeDeleted flag to indicate if file needs to be deleted
182 * @throws IOException when failed to close the file handle
183 */
184 public static void closeFile(File file, boolean toBeDeleted) throws IOException {
185
186 if (file != null) {
187 updateFileHandle(file, null, true);
188 if (toBeDeleted) {
189 file.delete();
190 }
191 }
192 }
193}