blob: 24fd71d6f0ecb84db25483b1334d44237893e385 [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 */
16package org.onosproject.yangutils.translator.tojava;
17
18import java.io.File;
19import java.io.IOException;
20import java.util.ArrayList;
21import java.util.List;
22import java.util.Set;
23
24import org.onosproject.yangutils.datamodel.YangTypeContainer;
25import org.onosproject.yangutils.datamodel.YangCase;
26import org.onosproject.yangutils.datamodel.YangEnum;
27import org.onosproject.yangutils.datamodel.YangEnumeration;
28import org.onosproject.yangutils.datamodel.YangLeaf;
29import org.onosproject.yangutils.datamodel.YangLeafList;
30import org.onosproject.yangutils.datamodel.YangLeavesHolder;
31import org.onosproject.yangutils.datamodel.YangNode;
32import org.onosproject.yangutils.datamodel.YangRpc;
33import org.onosproject.yangutils.datamodel.YangType;
34import org.onosproject.yangutils.translator.exception.TranslatorException;
35import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
36import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaType;
37
38import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
39import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
42import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_RPC_INTERFACE;
43import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
44import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
45import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
47import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
61import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
62import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedInfoOfFromString;
63import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
64import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeString;
65import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefination;
66import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose;
67import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
68import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
69import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEnumClassFile;
70import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateImplClassFile;
71import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
72import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateRpcInterfaceFile;
73import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateTypeDefClassFile;
74import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateUnionClassFile;
75import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
76import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
77import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
78import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
79import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode;
80import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
81import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
82import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructor;
83import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
84import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
85import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
86import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
87import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
88import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
89import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOfMethod;
90import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOfMethodStringAndJavaDoc;
91import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
92import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcStringMethod;
93import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
94import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
95import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
96import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getTypeConstructorStringAndJavaDoc;
97import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
98import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addArrayListImport;
99import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addAugmentedInfoImport;
100import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.addHasAugmentationImport;
101import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils
102 .addImportsToStringAndHasCodeMethods;
103import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.closeFile;
104import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isAugmentedInfoExtended;
105import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils
106 .isHasAugmentationExtended;
107import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils
108 .prepareJavaFileGeneratorForExtendsList;
109import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
110import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
111import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
112import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
113import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
114import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
115import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
116import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE_INFO_JAVADOC_OF_CHILD;
117import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
118import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
119import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
120import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.createPackage;
121import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
122import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
123import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
124import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateJavaDocForRpc;
125import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
126import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.clean;
127import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
128import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
129import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
130
131/**
132 * Represents implementation of java code fragments temporary implementations.
133 */
134public class TempJavaFragmentFiles {
135 /**
136 * Information about the java files being generated.
137 */
138 private JavaFileInfo javaFileInfo;
139 /**
140 * Imported class info.
141 */
142 private JavaImportData javaImportData;
143 /**
144 * The variable which guides the types of temporary files generated using
145 * the temporary generated file types mask.
146 */
147 private int generatedTempFiles;
148 /**
149 * Absolute path where the target java file needs to be generated.
150 */
151 private String absoluteDirPath;
152 /**
153 * Contains all the class name which will be extended by generated files.
154 */
155 private List<String> extendsList = new ArrayList<>();
156 /**
157 * File type extension for java classes.
158 */
159 private static final String JAVA_FILE_EXTENSION = ".java";
160 /**
161 * File type extension for temporary classes.
162 */
163 private static final String TEMP_FILE_EXTENSION = ".tmp";
164 /**
165 * Folder suffix for temporary files folder.
166 */
167 private static final String TEMP_FOLDER_NAME_SUFIX = "-Temp";
168 /**
169 * File name for getter method.
170 */
171 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
172 /**
173 * File name for getter method implementation.
174 */
175 private static final String GETTER_METHOD_IMPL_FILE_NAME = "GetterMethodImpl";
176 /**
177 * File name for setter method.
178 */
179 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
180 /**
181 * File name for setter method implementation.
182 */
183 private static final String SETTER_METHOD_IMPL_FILE_NAME = "SetterMethodImpl";
184 /**
185 * File name for constructor.
186 */
187 private static final String CONSTRUCTOR_FILE_NAME = "Constructor";
188 /**
189 * File name for attributes.
190 */
191 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
192 /**
193 * File name for to string method.
194 */
195 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
196 /**
197 * File name for hash code method.
198 */
199 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
200 /**
201 * File name for equals method.
202 */
203 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
204 /**
205 * File name for of string method.
206 */
207 private static final String OF_STRING_METHOD_FILE_NAME = "OfString";
208 /**
209 * File name for temporary enum class.
210 */
211 private static final String ENUM_CLASS_TEMP_FILE_NAME = "EnumClass";
212 /**
213 * File name for construction for special type like union, typedef.
214 */
215 private static final String CONSTRUCTOR_FOR_TYPE_FILE_NAME = "ConstructorForType";
216 /**
217 * File name for from string method.
218 */
219 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
220 /**
221 * File name for interface java file name suffix.
222 */
223 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
224 /**
225 * File name for builder interface file name suffix.
226 */
227 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX = BUILDER + INTERFACE;
228 /**
229 * File name for builder class file name suffix.
230 */
231 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
232 /**
233 * File name for impl class file name suffix.
234 */
235 private static final String IMPL_CLASS_FILE_NAME_SUFFIX = IMPL;
236 /**
237 * File name for typedef class file name suffix.
238 */
239 private static final String TYPEDEF_CLASS_FILE_NAME_SUFFIX = EMPTY_STRING;
240 /**
241 * File name for enum class file name suffix.
242 */
243 private static final String ENUM_CLASS_FILE_NAME_SUFFIX = EMPTY_STRING;
244 /**
245 * File name for rpc method.
246 */
247 private static final String RPC_FILE_NAME = "Rpc";
248 /**
249 * File name for generated class file for special type like union, typedef
250 * suffix.
251 */
252 private static final String RPC_INTERFACE_FILE_NAME_SUFFIX = "Service";
253 /**
254 * File name for generated class file for special type like union, typedef
255 * suffix.
256 */
257 private static final String UNION_TYPE_CLASS_FILE_NAME_SUFFIX = EMPTY_STRING;
258 /**
259 * Java file handle for interface file.
260 */
261 private File interfaceJavaFileHandle;
262 /**
263 * Java file handle for builder interface file.
264 */
265 private File builderInterfaceJavaFileHandle;
266 /**
267 * Java file handle for builder class file.
268 */
269 private File builderClassJavaFileHandle;
270 /**
271 * Java file handle for impl class file.
272 */
273 private File implClassJavaFileHandle;
274 /**
275 * Java file handle for typedef class file.
276 */
277 private File typedefClassJavaFileHandle;
278 /**
279 * Java file handle for type class like union, typedef file.
280 */
281 private File typeClassJavaFileHandle;
282 /**
283 * Temporary file handle for attribute.
284 */
285 private File attributesTempFileHandle;
286 /**
287 * Temporary file handle for getter of interface.
288 */
289 private File getterInterfaceTempFileHandle;
290 /**
291 * Temporary file handle for getter of class.
292 */
293 private File getterImplTempFileHandle;
294 /**
295 * Temporary file handle for setter of interface.
296 */
297 private File setterInterfaceTempFileHandle;
298 /**
299 * Temporary file handle for setter of class.
300 */
301 private File setterImplTempFileHandle;
302 /**
303 * Temporary file handle for constructor of class.
304 */
305 private File constructorImplTempFileHandle;
306 /**
307 * Temporary file handle for hash code method of class.
308 */
309 private File hashCodeImplTempFileHandle;
310 /**
311 * Temporary file handle for equals method of class.
312 */
313 private File equalsImplTempFileHandle;
314 /**
315 * Temporary file handle for to string method of class.
316 */
317 private File toStringImplTempFileHandle;
318 /**
319 * Temporary file handle for enum class file.
320 */
321 private File enumClassTempFileHandle;
322 /**
323 * Temporary file handle for of string method of class.
324 */
325 private File ofStringImplTempFileHandle;
326 /**
327 * Temporary file handle for constructor for type class.
328 */
329 private File constructorForTypeTempFileHandle;
330 /**
331 * Temporary file handle for from string method of class.
332 */
333 private File fromStringImplTempFileHandle;
334 /**
335 * Temporary file handle for rpc interface.
336 */
337 private File rpcInterfaceImplTempFileHandle;
338 /**
339 * Java file handle for rpc interface file.
340 */
341 private File rpcInterfaceJavaFileHandle;
342 /**
343 * Import info for case.
344 */
345 private JavaQualifiedTypeInfo caseImportInfo;
346 /**
347 * Is attribute added.
348 */
349 private boolean isAttributePresent = false;
350 /**
351 * Current enum's value.
352 */
353 private int enumValue;
354 /*
355 * Java file handle for enum class.
356 */
357 private File enumClassJavaFileHandle;
358
359 /**
360 * Returns enum class java file handle.
361 *
362 * @return enum class java file handle
363 */
364 private File getEnumClassJavaFileHandle() {
365 return enumClassJavaFileHandle;
366 }
367
368 /**
369 * Sets enum class java file handle.
370 *
371 * @param enumClassJavaFileHandle enum class java file handle
372 */
373 private void setEnumClassJavaFileHandle(File enumClassJavaFileHandle) {
374 this.enumClassJavaFileHandle = enumClassJavaFileHandle;
375 }
376
377 /**
378 * Returns enum's value.
379 *
380 * @return enum's value
381 */
382 private int getEnumValue() {
383 return enumValue;
384 }
385
386 /**
387 * Sets enum's value.
388 *
389 * @param enumValue enum's value
390 */
391 private void setEnumValue(int enumValue) {
392 this.enumValue = enumValue;
393 }
394
395 /**
396 * Retrieves the absolute path where the file needs to be generated.
397 *
398 * @return absolute path where the file needs to be generated
399 */
400 private String getAbsoluteDirPath() {
401 return absoluteDirPath;
402 }
403
404 /**
405 * Sets absolute path where the file needs to be generated.
406 *
407 * @param absoluteDirPath absolute path where the file needs to be
408 * generated.
409 */
410 private void setAbsoluteDirPath(String absoluteDirPath) {
411 this.absoluteDirPath = absoluteDirPath;
412 }
413
414 /**
415 * Sets the generated java file information.
416 *
417 * @param javaFileInfo generated java file information
418 */
419 public void setJavaFileInfo(JavaFileInfo javaFileInfo) {
420 this.javaFileInfo = javaFileInfo;
421 }
422
423 /**
424 * Retrieves the generated java file information.
425 *
426 * @return generated java file information
427 */
428 public JavaFileInfo getJavaFileInfo() {
429 return javaFileInfo;
430 }
431
432 /**
433 * Retrieves the generated temp files.
434 *
435 * @return generated temp files
436 */
437 private int getGeneratedTempFiles() {
438 return generatedTempFiles;
439 }
440
441 /**
442 * Sets generated file files.
443 */
444 private void clearGeneratedTempFiles() {
445 generatedTempFiles = 0;
446 }
447
448 /**
449 * Sets generated file files.
450 *
451 * @param generatedTempFile generated file
452 */
453 private void addGeneratedTempFile(int generatedTempFile) {
454 generatedTempFiles |= generatedTempFile;
455 }
456
457 /**
458 * Retrieves the generated Java files.
459 *
460 * @return generated Java files
461 */
462 private int getGeneratedJavaFiles() {
463 return getJavaFileInfo().getGeneratedFileTypes();
464 }
465
466 /**
467 * Retrieves the mapped Java class name.
468 *
469 * @return mapped Java class name
470 */
471 private String getGeneratedJavaClassName() {
472 return getJavaFileInfo().getJavaName();
473 }
474
475 /**
476 * Retrieves the import data for the generated Java file.
477 *
478 * @return import data for the generated Java file
479 */
480 public JavaImportData getJavaImportData() {
481 return javaImportData;
482 }
483
484 /**
485 * Sets import data for the generated Java file.
486 *
487 * @param javaImportData import data for the generated Java file
488 */
489 private void setJavaImportData(JavaImportData javaImportData) {
490 this.javaImportData = javaImportData;
491 }
492
493 /**
494 * Creates an instance of temporary java code fragment.
495 *
496 * @param javaFileInfo generated java file information
497 * @throws IOException when fails to create new file handle
498 */
499 TempJavaFragmentFiles(JavaFileInfo javaFileInfo)
500 throws IOException {
501 setExtendsList(new ArrayList<>());
502 setJavaImportData(new JavaImportData());
503 setJavaFileInfo(javaFileInfo);
504 clearGeneratedTempFiles();
505 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
506 getJavaFileInfo().getPackageFilePath()));
507 /**
508 * Initialize getter when generation file type matches to interface
509 * mask.
510 */
511 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
512 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
513 }
514 /**
515 * Initialize getter and setter when generation file type matches to
516 * builder interface mask.
517 */
518 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
519 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK);
520 addGeneratedTempFile(SETTER_FOR_INTERFACE_MASK);
521 }
522 /**
523 * Initialize getterImpl, setterImpl and attributes when generation file
524 * type matches to builder class mask.
525 */
526 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
527 addGeneratedTempFile(ATTRIBUTES_MASK);
528 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
529 addGeneratedTempFile(SETTER_FOR_CLASS_MASK);
530 }
531 /**
532 * Initialize getterImpl, attributes, constructor, hash code, equals and
533 * to strings when generation file type matches to impl class mask.
534 */
535 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
536 addGeneratedTempFile(ATTRIBUTES_MASK);
537 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
538 addGeneratedTempFile(CONSTRUCTOR_IMPL_MASK);
539 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
540 addGeneratedTempFile(EQUALS_IMPL_MASK);
541 addGeneratedTempFile(TO_STRING_IMPL_MASK);
542 }
543 if ((getGeneratedJavaFiles() & GENERATE_RPC_INTERFACE) != 0) {
544 addGeneratedTempFile(RPC_IMPL_MASK);
545 }
546 /**
547 * Initialize getterImpl, attributes, hash code, equals and to strings
548 * when generation file type matches to typeDef class mask.
549 */
550 if ((getGeneratedJavaFiles() & GENERATE_TYPEDEF_CLASS) != 0) {
551 addGeneratedTempFile(ATTRIBUTES_MASK);
552 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
553 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
554 addGeneratedTempFile(EQUALS_IMPL_MASK);
555 addGeneratedTempFile(TO_STRING_IMPL_MASK);
556 addGeneratedTempFile(OF_STRING_IMPL_MASK);
557 addGeneratedTempFile(CONSTRUCTOR_FOR_TYPE_MASK);
558 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
559 }
560 /**
561 * Initialize getterImpl, attributes, hash code, equals, of string,
562 * constructor, union's to string, from string when generation file type
563 * matches to union class mask.
564 */
565 if ((getGeneratedJavaFiles() & GENERATE_UNION_CLASS) != 0) {
566 addGeneratedTempFile(ATTRIBUTES_MASK);
567 addGeneratedTempFile(GETTER_FOR_CLASS_MASK);
568 addGeneratedTempFile(HASH_CODE_IMPL_MASK);
569 addGeneratedTempFile(EQUALS_IMPL_MASK);
570 addGeneratedTempFile(OF_STRING_IMPL_MASK);
571 addGeneratedTempFile(CONSTRUCTOR_FOR_TYPE_MASK);
572 addGeneratedTempFile(TO_STRING_IMPL_MASK);
573 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
574 }
575 /**
576 * Initialize enum when generation file type matches to enum class mask.
577 */
578 if ((getGeneratedJavaFiles() & GENERATE_ENUM_CLASS) != 0) {
579 addGeneratedTempFile(ENUM_IMPL_MASK);
580 }
581 /**
582 * Set temporary file handles.
583 */
584 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
585 setAttributesTempFileHandle(getTemporaryFileHandle(ATTRIBUTE_FILE_NAME));
586 }
587 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
588 setGetterInterfaceTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_FILE_NAME));
589 }
590 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
591 setSetterInterfaceTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_FILE_NAME));
592 }
593 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
594 setGetterImplTempFileHandle(getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME));
595 }
596 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
597 setSetterImplTempFileHandle(getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME));
598 }
599 if ((getGeneratedTempFiles() & CONSTRUCTOR_IMPL_MASK) != 0) {
600 setConstructorImplTempFileHandle(getTemporaryFileHandle(CONSTRUCTOR_FILE_NAME));
601 }
602 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
603 setHashCodeImplTempFileHandle(getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME));
604 }
605 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
606 setEqualsImplTempFileHandle(getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME));
607 }
608 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
609 setToStringImplTempFileHandle(getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME));
610 }
611 if ((getGeneratedTempFiles() & ENUM_IMPL_MASK) != 0) {
612 setEnumClassTempFileHandle(getTemporaryFileHandle(ENUM_CLASS_TEMP_FILE_NAME));
613 }
614 if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
615 setOfStringImplTempFileHandle(getTemporaryFileHandle(OF_STRING_METHOD_FILE_NAME));
616 }
617 if ((getGeneratedTempFiles() & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
618 setConstructorForTypeTempFileHandle(getTemporaryFileHandle(CONSTRUCTOR_FOR_TYPE_FILE_NAME));
619 }
620 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
621 setFromStringImplTempFileHandle(getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME));
622 }
623 if ((getGeneratedTempFiles() & RPC_IMPL_MASK) != 0) {
624 setRpcInterfaceImplTempFileHandle(getTemporaryFileHandle(RPC_FILE_NAME));
625 }
626 }
627
628 /**
629 * Returns java file handle for interface file.
630 *
631 * @return java file handle for interface file
632 */
633 private File getInterfaceJavaFileHandle() {
634 return interfaceJavaFileHandle;
635 }
636
637 /**
638 * Sets the java file handle for interface file.
639 *
640 * @param interfaceJavaFileHandle java file handle
641 */
642 private void setInterfaceJavaFileHandle(File interfaceJavaFileHandle) {
643 this.interfaceJavaFileHandle = interfaceJavaFileHandle;
644 }
645
646 /**
647 * Returns java file handle for builder interface file.
648 *
649 * @return java file handle for builder interface file
650 */
651 private File getBuilderInterfaceJavaFileHandle() {
652 return builderInterfaceJavaFileHandle;
653 }
654
655 /**
656 * Sets the java file handle for builder interface file.
657 *
658 * @param builderInterfaceJavaFileHandle java file handle
659 */
660 private void setBuilderInterfaceJavaFileHandle(File builderInterfaceJavaFileHandle) {
661 this.builderInterfaceJavaFileHandle = builderInterfaceJavaFileHandle;
662 }
663
664 /**
665 * Returns java file handle for builder class file.
666 *
667 * @return java file handle for builder class file
668 */
669 private File getBuilderClassJavaFileHandle() {
670 return builderClassJavaFileHandle;
671 }
672
673 /**
674 * Sets the java file handle for builder class file.
675 *
676 * @param builderClassJavaFileHandle java file handle
677 */
678 private void setBuilderClassJavaFileHandle(File builderClassJavaFileHandle) {
679 this.builderClassJavaFileHandle = builderClassJavaFileHandle;
680 }
681
682 /**
683 * Returns java file handle for impl class file.
684 *
685 * @return java file handle for impl class file
686 */
687 private File getImplClassJavaFileHandle() {
688 return implClassJavaFileHandle;
689 }
690
691 /**
692 * Sets the java file handle for impl class file.
693 *
694 * @param implClassJavaFileHandle java file handle
695 */
696 private void setImplClassJavaFileHandle(File implClassJavaFileHandle) {
697 this.implClassJavaFileHandle = implClassJavaFileHandle;
698 }
699
700 /**
701 * Returns java file handle for typedef class file.
702 *
703 * @return java file handle for typedef class file
704 */
705 private File getTypedefClassJavaFileHandle() {
706 return typedefClassJavaFileHandle;
707 }
708
709 /**
710 * Sets the java file handle for typedef class file.
711 *
712 * @param typedefClassJavaFileHandle java file handle
713 */
714 private void setTypedefClassJavaFileHandle(File typedefClassJavaFileHandle) {
715 this.typedefClassJavaFileHandle = typedefClassJavaFileHandle;
716 }
717
718 /**
719 * Returns java file handle for type class file.
720 *
721 * @return java file handle for type class file
722 */
723 private File getTypeClassJavaFileHandle() {
724 return typeClassJavaFileHandle;
725 }
726
727 /**
728 * Sets the java file handle for type class file.
729 *
730 * @param typeClassJavaFileHandle type file handle
731 */
732 private void setTypeClassJavaFileHandle(File typeClassJavaFileHandle) {
733 this.typeClassJavaFileHandle = typeClassJavaFileHandle;
734 }
735
736 /**
737 * Returns attribute's temporary file handle.
738 *
739 * @return temporary file handle
740 */
741 public File getAttributesTempFileHandle() {
742 return attributesTempFileHandle;
743 }
744
745 /**
746 * Sets attribute's temporary file handle.
747 *
748 * @param attributeForClass file handle for attribute
749 */
750 private void setAttributesTempFileHandle(File attributeForClass) {
751 attributesTempFileHandle = attributeForClass;
752 }
753
754 /**
755 * Returns getter methods's temporary file handle.
756 *
757 * @return temporary file handle
758 */
759 public File getGetterInterfaceTempFileHandle() {
760 return getterInterfaceTempFileHandle;
761 }
762
763 /**
764 * Sets to getter method's temporary file handle.
765 *
766 * @param getterForInterface file handle for to getter method
767 */
768 private void setGetterInterfaceTempFileHandle(File getterForInterface) {
769 getterInterfaceTempFileHandle = getterForInterface;
770 }
771
772 /**
773 * Returns getter method's impl's temporary file handle.
774 *
775 * @return temporary file handle
776 */
777 public File getGetterImplTempFileHandle() {
778 return getterImplTempFileHandle;
779 }
780
781 /**
782 * Sets to getter method's impl's temporary file handle.
783 *
784 * @param getterImpl file handle for to getter method's impl
785 */
786 private void setGetterImplTempFileHandle(File getterImpl) {
787 getterImplTempFileHandle = getterImpl;
788 }
789
790 /**
791 * Returns setter method's temporary file handle.
792 *
793 * @return temporary file handle
794 */
795 public File getSetterInterfaceTempFileHandle() {
796 return setterInterfaceTempFileHandle;
797 }
798
799 /**
800 * Sets to setter method's temporary file handle.
801 *
802 * @param setterForInterface file handle for to setter method
803 */
804 private void setSetterInterfaceTempFileHandle(File setterForInterface) {
805 setterInterfaceTempFileHandle = setterForInterface;
806 }
807
808 /**
809 * Returns setter method's impl's temporary file handle.
810 *
811 * @return temporary file handle
812 */
813 public File getSetterImplTempFileHandle() {
814 return setterImplTempFileHandle;
815 }
816
817 /**
818 * Sets to setter method's impl's temporary file handle.
819 *
820 * @param setterImpl file handle for to setter method's implementation class
821 */
822 private void setSetterImplTempFileHandle(File setterImpl) {
823 setterImplTempFileHandle = setterImpl;
824 }
825
826 /**
827 * Returns constructor's temporary file handle.
828 *
829 * @return temporary file handle
830 */
831 public File getConstructorImplTempFileHandle() {
832 return constructorImplTempFileHandle;
833 }
834
835 /**
836 * Sets to constructor's temporary file handle.
837 *
838 * @param constructor file handle for to constructor
839 */
840 private void setConstructorImplTempFileHandle(File constructor) {
841 constructorImplTempFileHandle = constructor;
842 }
843
844 /**
845 * Returns hash code method's temporary file handle.
846 *
847 * @return temporary file handle
848 */
849 public File getHashCodeImplTempFileHandle() {
850 return hashCodeImplTempFileHandle;
851 }
852
853 /**
854 * Sets hash code method's temporary file handle.
855 *
856 * @param hashCodeMethod file handle for hash code method
857 */
858 private void setHashCodeImplTempFileHandle(File hashCodeMethod) {
859 hashCodeImplTempFileHandle = hashCodeMethod;
860 }
861
862 /**
863 * Returns equals mehtod's temporary file handle.
864 *
865 * @return temporary file handle
866 */
867 public File getEqualsImplTempFileHandle() {
868 return equalsImplTempFileHandle;
869 }
870
871 /**
872 * Sets equals method's temporary file handle.
873 *
874 * @param equalsMethod file handle for to equals method
875 */
876 private void setEqualsImplTempFileHandle(File equalsMethod) {
877 equalsImplTempFileHandle = equalsMethod;
878 }
879
880 /**
881 * Returns rpc method's temporary file handle.
882 *
883 * @return temporary file handle
884 */
885 public File getRpcInterfaceImplTempFileHandle() {
886 return rpcInterfaceImplTempFileHandle;
887 }
888
889 /**
890 * Sets rpc method's temporary file handle.
891 *
892 * @param rpcInterfaceImplTempFileHandle file handle for to rpc method
893 */
894 private void setRpcInterfaceImplTempFileHandle(File rpcInterfaceImplTempFileHandle) {
895 this.rpcInterfaceImplTempFileHandle = rpcInterfaceImplTempFileHandle;
896 }
897
898 /**
899 * Returns rpc method's java file handle.
900 *
901 * @return java file handle
902 */
903 private File getRpcInterfaceJavaFileHandle() {
904 return rpcInterfaceJavaFileHandle;
905 }
906
907 /**
908 * Sets rpc method's java file handle.
909 *
910 * @param rpcInterfaceJavaFileHandle file handle for to rpc method
911 */
912 private void setRpcInterfaceJavaFileHandle(File rpcInterfaceJavaFileHandle) {
913 this.rpcInterfaceJavaFileHandle = rpcInterfaceJavaFileHandle;
914 }
915
916 /**
917 * Returns to string method's temporary file handle.
918 *
919 * @return temporary file handle
920 */
921 public File getToStringImplTempFileHandle() {
922 return toStringImplTempFileHandle;
923 }
924
925 /**
926 * Sets to string method's temporary file handle.
927 *
928 * @param toStringMethod file handle for to string method
929 */
930 private void setToStringImplTempFileHandle(File toStringMethod) {
931 toStringImplTempFileHandle = toStringMethod;
932 }
933
934 /**
935 * Returns temporary file handle for enum class file.
936 *
937 * @return temporary file handle for enum class file
938 */
939 public File getEnumClassTempFileHandle() {
940 return enumClassTempFileHandle;
941 }
942
943 /**
944 * Sets temporary file handle for enum class file.
945 *
946 * @param enumClassTempFileHandle temporary file handle for enum class file
947 */
948 private void setEnumClassTempFileHandle(File enumClassTempFileHandle) {
949 this.enumClassTempFileHandle = enumClassTempFileHandle;
950 }
951
952 /**
953 * Returns of string method's temporary file handle.
954 *
955 * @return of string method's temporary file handle
956 */
957 public File getOfStringImplTempFileHandle() {
958 return ofStringImplTempFileHandle;
959 }
960
961 /**
962 * Set of string method's temporary file handle.
963 *
964 * @param ofStringImplTempFileHandle of string method's temporary file
965 * handle
966 */
967 private void setOfStringImplTempFileHandle(File ofStringImplTempFileHandle) {
968 this.ofStringImplTempFileHandle = ofStringImplTempFileHandle;
969 }
970
971 /**
972 * Returns type class constructor method's temporary file handle.
973 *
974 * @return type class constructor method's temporary file handle
975 */
976 public File getConstructorForTypeTempFileHandle() {
977 return constructorForTypeTempFileHandle;
978 }
979
980 /**
981 * Sets type class constructor method's temporary file handle.
982 *
983 * @param constructorForTypeTempFileHandle type class constructor method's
984 * temporary file handle
985 */
986 private void setConstructorForTypeTempFileHandle(File constructorForTypeTempFileHandle) {
987 this.constructorForTypeTempFileHandle = constructorForTypeTempFileHandle;
988 }
989
990 /**
991 * Returns from string method's temporary file handle.
992 *
993 * @return from string method's temporary file handle
994 */
995 public File getFromStringImplTempFileHandle() {
996 return fromStringImplTempFileHandle;
997 }
998
999 /**
1000 * Sets from string method's temporary file handle.
1001 *
1002 * @param fromStringImplTempFileHandle from string method's temporary file
1003 * handle
1004 */
1005 private void setFromStringImplTempFileHandle(File fromStringImplTempFileHandle) {
1006 this.fromStringImplTempFileHandle = fromStringImplTempFileHandle;
1007 }
1008
1009 /**
1010 * Returns list of classes to be extended by generated files.
1011 *
1012 * @return list of classes to be extended by generated files
1013 */
1014 private List<String> getExtendsList() {
1015 return extendsList;
1016 }
1017
1018 /**
1019 * Sets class to be extended by generated file.
1020 *
1021 * @param extendsList list of classes to be extended
1022 */
1023 private void setExtendsList(List<String> extendsList) {
1024 this.extendsList = extendsList;
1025 }
1026
1027 /**
1028 * Adds class to the extends list.
1029 *
1030 * @param extend class to be extended
1031 */
1032 public void addToExtendsList(String extend) {
1033 getExtendsList().add(extend);
1034 }
1035
1036 /**
1037 * Adds of string for type.
1038 *
1039 * @param attr attribute info
1040 * @throws IOException when fails to append to temporary file
1041 */
1042 private void addOfStringMethod(JavaAttributeInfo attr)
1043 throws IOException {
1044 appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(attr,
1045 getGeneratedJavaClassName())
1046 + NEW_LINE);
1047 }
1048
1049 /**
1050 * Adds type constructor.
1051 *
1052 * @param attr attribute info
1053 * @throws IOException when fails to append to temporary file
1054 */
1055 private void addTypeConstructor(JavaAttributeInfo attr)
1056 throws IOException {
1057 appendToFile(getConstructorForTypeTempFileHandle(), getTypeConstructorStringAndJavaDoc(attr,
1058 getGeneratedJavaClassName()) + NEW_LINE);
1059 }
1060
1061 /**
1062 * Adds attribute for class.
1063 *
1064 * @param attr attribute info
1065 * @throws IOException when fails to append to temporary file
1066 */
1067 private void addAttribute(JavaAttributeInfo attr)
1068 throws IOException {
1069 appendToFile(getAttributesTempFileHandle(), parseAttribute(attr) + FOUR_SPACE_INDENTATION);
1070 }
1071
1072 /**
1073 * Adds getter for interface.
1074 *
1075 * @param attr attribute info
1076 * @throws IOException when fails to append to temporary file
1077 */
1078 private void addGetterForInterface(JavaAttributeInfo attr)
1079 throws IOException {
1080 appendToFile(getGetterInterfaceTempFileHandle(), getGetterString(attr) + NEW_LINE);
1081 }
1082
1083 /**
1084 * Adds getter method's impl for class.
1085 *
1086 * @param attr attribute info
1087 * @param genFiletype generated file type
1088 * @throws IOException when fails to append to temporary file
1089 */
1090 private void addGetterImpl(JavaAttributeInfo attr, int genFiletype)
1091 throws IOException {
1092 if ((genFiletype & BUILDER_CLASS_MASK) != 0) {
1093 appendToFile(getGetterImplTempFileHandle(), getOverRideString() + getGetterForClass(attr) + NEW_LINE);
1094 } else {
1095 appendToFile(getGetterImplTempFileHandle(), getJavaDoc(GETTER_METHOD, attr.getAttributeName(), false)
1096 + getGetterForClass(attr) + NEW_LINE);
1097 }
1098 }
1099
1100 /**
1101 * Adds setter for interface.
1102 *
1103 * @param attr attribute info
1104 * @throws IOException when fails to append to temporary file
1105 */
1106 private void addSetterForInterface(JavaAttributeInfo attr)
1107 throws IOException {
1108 appendToFile(getSetterInterfaceTempFileHandle(),
1109 getSetterString(attr, getGeneratedJavaClassName()) + NEW_LINE);
1110 }
1111
1112 /**
1113 * Adds setter's implementation for class.
1114 *
1115 * @param attr attribute info
1116 * @throws IOException when fails to append to temporary file
1117 */
1118 private void addSetterImpl(JavaAttributeInfo attr)
1119 throws IOException {
1120 appendToFile(getSetterImplTempFileHandle(),
1121 getOverRideString() + getSetterForClass(attr, getGeneratedJavaClassName()) + NEW_LINE);
1122 }
1123
1124 /**
1125 * Adds build method for interface.
1126 *
1127 * @return build method for interface
1128 * @throws IOException when fails to append to temporary file
1129 */
1130 String addBuildMethodForInterface()
1131 throws IOException {
1132 return parseBuilderInterfaceBuildMethodString(getGeneratedJavaClassName());
1133 }
1134
1135 /**
1136 * Adds build method's implementation for class.
1137 *
1138 * @return build method implementation for class
1139 * @throws IOException when fails to append to temporary file
1140 */
1141 String addBuildMethodImpl()
1142 throws IOException {
1143 return getBuildString(getGeneratedJavaClassName()) + NEW_LINE;
1144 }
1145
1146 /**
1147 * Adds constructor for class.
1148 *
1149 * @param attr attribute info
1150 * @throws IOException when fails to append to temporary file
1151 */
1152 private void addConstructor(JavaAttributeInfo attr)
1153 throws IOException {
1154 appendToFile(getConstructorImplTempFileHandle(), getConstructor(getGeneratedJavaClassName(), attr));
1155 }
1156
1157 /**
1158 * Adds default constructor for class.
1159 *
1160 * @param modifier modifier for constructor.
1161 * @param toAppend string which need to be appended with the class name
1162 * @return default constructor for class
1163 * @throws IOException when fails to append to file
1164 */
1165 String addDefaultConstructor(String modifier, String toAppend)
1166 throws IOException {
1167 return NEW_LINE + getDefaultConstructorString(getGeneratedJavaClassName() + toAppend, modifier);
1168 }
1169
1170 /**
1171 * Adds default constructor for class.
1172 *
1173 * @return default constructor for class
1174 * @throws IOException when fails to append to file
1175 */
1176 public String addOfMethod()
1177 throws IOException {
1178 return getJavaDoc(OF_METHOD, getGeneratedJavaClassName(), false)
1179 + getOfMethod(getGeneratedJavaClassName(), null);
1180 }
1181
1182 /**
1183 * Adds hash code method for class.
1184 *
1185 * @param attr attribute info
1186 * @throws IOException when fails to append to temporary file
1187 */
1188 private void addHashCodeMethod(JavaAttributeInfo attr)
1189 throws IOException {
1190 appendToFile(getHashCodeImplTempFileHandle(), getHashCodeMethod(attr) + NEW_LINE);
1191 }
1192
1193 /**
1194 * Adds equals method for class.
1195 *
1196 * @param attr attribute info
1197 * @throws IOException when fails to append to temporary file
1198 */
1199 private void addEqualsMethod(JavaAttributeInfo attr)
1200 throws IOException {
1201 appendToFile(getEqualsImplTempFileHandle(), getEqualsMethod(attr) + NEW_LINE);
1202 }
1203
1204 /**
1205 * Adds ToString method for class.
1206 *
1207 * @param attr attribute info
1208 * @throws IOException when fails to append to temporary file
1209 */
1210 private void addToStringMethod(JavaAttributeInfo attr)
1211 throws IOException {
1212 appendToFile(getToStringImplTempFileHandle(), getToStringMethod(attr) + NEW_LINE);
1213 }
1214
1215 /**
1216 * Adds enum class attributes to temporary file.
1217 *
1218 * @param curEnumInfo current YANG enum
1219 * @throws IOException when fails to do IO operations.
1220 */
1221 private void addAttributesForEnumClass(JavaAttributeInfo curEnumInfo)
1222 throws IOException {
1223 appendToFile(getEnumClassTempFileHandle(),
1224 generateEnumAttributeString(curEnumInfo.getAttributeName(), getEnumValue()));
1225 }
1226
1227 /**
1228 * Add from string method for union class.
1229 *
1230 * @param javaAttributeInfo type attribute info
1231 * @param fromStringAttributeInfo from string attribute info
1232 * @throws IOException when fails to append to temporary file
1233 */
1234 private void addFromStringMethod(JavaAttributeInfo javaAttributeInfo,
1235 JavaAttributeInfo fromStringAttributeInfo)
1236 throws IOException {
1237 appendToFile(getFromStringImplTempFileHandle(), getFromStringMethod(javaAttributeInfo,
1238 fromStringAttributeInfo) + NEW_LINE);
1239 }
1240
1241 /**
1242 * Adds rpc string information to applicable temp file.
1243 *
1244 * @param javaAttributeInfoOfInput rpc's input node attribute info
1245 * @param javaAttributeInfoOfOutput rpc's output node attribute info
1246 * @param rpcName name of the rpc function
1247 * @throws IOException IO operation fail
1248 */
1249 private void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput, JavaAttributeInfo javaAttributeInfoOfOutput,
1250 String rpcName)
1251 throws IOException {
1252 String rpcInput = "";
1253 String rpcOutput = "void";
1254 if (javaAttributeInfoOfInput != null) {
1255 rpcInput = javaAttributeInfoOfInput.getAttributeName();
1256 }
1257 if (javaAttributeInfoOfOutput != null) {
1258 rpcOutput = javaAttributeInfoOfOutput.getAttributeName();
1259 }
1260 appendToFile(getRpcInterfaceImplTempFileHandle(), generateJavaDocForRpc(rpcName, rpcInput, rpcOutput) +
1261 getRpcStringMethod(rpcName, rpcInput, rpcOutput) + NEW_LINE);
1262 }
1263
1264 /**
1265 * Returns a temporary file handle for the specific file type.
1266 *
1267 * @param fileName file name
1268 * @return temporary file handle
1269 * @throws IOException when fails to create new file handle
1270 */
1271 private File getTemporaryFileHandle(String fileName)
1272 throws IOException {
1273 String path = getTempDirPath();
1274 File dir = new File(path);
1275 if (!dir.exists()) {
1276 dir.mkdirs();
1277 }
1278 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1279 if (!file.exists()) {
1280 file.createNewFile();
1281 }
1282 return file;
1283 }
1284
1285 /**
1286 * Returns a temporary file handle for the specific file type.
1287 *
1288 * @param fileName file name
1289 * @return temporary file handle
1290 * @throws IOException when fails to create new file handle
1291 */
1292 private File getJavaFileHandle(String fileName)
1293 throws IOException {
1294 createPackage(getAbsoluteDirPath(), getJavaFileInfo().getJavaName());
1295 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION, getJavaFileInfo());
1296 }
1297
1298 /**
1299 * Returns data from the temporary files.
1300 *
1301 * @param file temporary file handle
1302 * @return stored data from temporary files
1303 * @throws IOException when failed to get data from the given file
1304 */
1305 public String getTemporaryDataFromFileHandle(File file)
1306 throws IOException {
1307 String path = getTempDirPath();
1308 if (new File(path + file.getName()).exists()) {
1309 return readAppendFile(path + file.getName(), EMPTY_STRING);
1310 } else {
1311 throw new IOException("Unable to get data from the given "
1312 + file.getName() + " file for " + getGeneratedJavaClassName() + PERIOD);
1313 }
1314 }
1315
1316 /**
1317 * Returns temporary directory path.
1318 *
1319 * @return directory path
1320 */
1321 private String getTempDirPath() {
1322 return getPackageDirPathFromJavaJPackage(getAbsoluteDirPath()) + SLASH + getGeneratedJavaClassName()
1323 + TEMP_FOLDER_NAME_SUFIX + SLASH;
1324 }
1325
1326 /**
1327 * Parses attribute to get the attribute string.
1328 *
1329 * @param attr attribute info
1330 * @return attribute string
1331 */
1332 private String parseAttribute(JavaAttributeInfo attr) {
1333 /*
1334 * TODO: check if this utility needs to be called or move to the caller
1335 */
1336 String attributeName = getCamelCase(getSmallCase(attr.getAttributeName()), null);
1337 if (attr.isQualifiedName()) {
1338 return getJavaAttributeDefination(attr.getImportInfo().getPkgInfo(), attr.getImportInfo().getClassInfo(),
1339 attributeName, attr.isListAttr());
1340 } else {
1341 return getJavaAttributeDefination(null, attr.getImportInfo().getClassInfo(), attributeName,
1342 attr.isListAttr());
1343 }
1344 }
1345
1346 /**
1347 * Appends content to temporary file.
1348 *
1349 * @param file temporary file
1350 * @param data data to be appended
1351 * @throws IOException when fails to append to file
1352 */
1353 private void appendToFile(File file, String data)
1354 throws IOException {
1355 try {
1356 insertDataIntoJavaFile(file, data);
1357 } catch (IOException ex) {
1358 throw new IOException("failed to write in temp file.");
1359 }
1360 }
1361
1362 /**
1363 * Adds current node info as and attribute to the parent generated file.
1364 *
1365 * @param curNode current node which needs to be added as an attribute in
1366 * the parent generated code
1367 * @param isList is list construct
1368 * @throws IOException IO operation exception
1369 */
1370 public static void addCurNodeInfoInParentTempFile(YangNode curNode,
1371 boolean isList)
1372 throws IOException {
1373 YangNode parent = getParentNodeInGenCode(curNode);
1374 if (!(parent instanceof JavaCodeGenerator)) {
1375 throw new TranslatorException("missing parent node to contain current node info in generated file");
1376 }
1377 JavaAttributeInfo javaAttributeInfo = getCurNodeAsAttributeInParent(curNode,
1378 parent, isList);
1379 if (!(parent instanceof TempJavaCodeFragmentFilesContainer)) {
1380 throw new TranslatorException("missing parent temp file handle");
1381 }
1382 ((TempJavaCodeFragmentFilesContainer) parent)
1383 .getTempJavaCodeFragmentFiles().getBeanTempFiles()
1384 .addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
1385 }
1386
1387 /**
1388 * Creates an attribute info object corresponding to a data model node and
1389 * return it.
1390 *
1391 * @param curNode current data model node for which the java code generation
1392 * is being handled
1393 * @param parentNode parent node in which the current node is an attribute
1394 * @param isListNode is the current added attribute needs to be a list
1395 * @return AttributeInfo attribute details required to add in temporary
1396 * files
1397 */
1398 public static JavaAttributeInfo getCurNodeAsAttributeInParent(
1399 YangNode curNode, YangNode parentNode, boolean isListNode) {
1400 String curNodeName = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName();
1401 /*
1402 * Get the import info corresponding to the attribute for import in
1403 * generated java files or qualified access
1404 */
1405 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(parentNode,
1406 curNodeName);
1407 if (!(parentNode instanceof TempJavaCodeFragmentFilesContainer)) {
1408 throw new TranslatorException("Parent node does not have file info");
1409 }
1410
1411 TempJavaFragmentFiles tempJavaFragmentFiles;
1412 if (parentNode instanceof YangRpc) {
1413 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) parentNode)
1414 .getTempJavaCodeFragmentFiles()
1415 .getServiceTempFiles();
1416 } else {
1417 tempJavaFragmentFiles = ((TempJavaCodeFragmentFilesContainer) parentNode)
1418 .getTempJavaCodeFragmentFiles()
1419 .getBeanTempFiles();
1420 }
1421 JavaImportData parentImportData = tempJavaFragmentFiles.getJavaImportData();
1422 boolean isQualified = parentImportData.addImportInfo(qualifiedTypeInfo);
1423 return getAttributeInfoForTheData(qualifiedTypeInfo, curNodeName, null, isQualified, isListNode);
1424 }
1425
1426 /**
1427 * Adds parent's info to current node import list.
1428 *
1429 * @param curNode current node for which import list needs to be updated
1430 */
1431 public void addParentInfoInCurNodeTempFile(YangNode curNode) {
1432 caseImportInfo = new JavaQualifiedTypeInfo();
1433 YangNode parent = getParentNodeInGenCode(curNode);
1434 if (!(parent instanceof JavaCodeGenerator)) {
1435 throw new TranslatorException("missing parent node to contain current node info in generated file");
1436 }
1437 if (!(curNode instanceof JavaFileInfoContainer)) {
1438 throw new TranslatorException("missing java file information to get the package details "
1439 + "of attribute corresponding to child node");
1440 }
1441 caseImportInfo.setClassInfo(getCaptialCase(getCamelCase(parent.getName(), null)));
1442 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage());
1443 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1444 .getBeanTempFiles().getJavaImportData().addImportInfo(caseImportInfo);
1445 }
1446
1447 /**
1448 * Adds leaf attributes in generated files.
1449 *
1450 * @param listOfLeaves list of YANG leaf
1451 * @throws IOException IO operation fail
1452 */
1453 private void addLeavesInfoToTempFiles(List<YangLeaf> listOfLeaves)
1454 throws IOException {
1455 if (listOfLeaves != null) {
1456 for (YangLeaf leaf : listOfLeaves) {
1457 if (!(leaf instanceof JavaLeafInfoContainer)) {
1458 throw new TranslatorException("Leaf does not have java information");
1459 }
1460 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leaf;
1461 javaLeaf.updateJavaQualifiedInfo();
1462 JavaAttributeInfo javaAttributeInfo = getAttributeInfoForTheData(
1463 javaLeaf.getJavaQualifiedInfo(),
1464 javaLeaf.getName(), javaLeaf.getDataType(),
1465 getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
1466 false);
1467 addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
1468 }
1469 }
1470 }
1471
1472 /**
1473 * Adds leaf list's attributes in generated files.
1474 *
1475 * @param listOfLeafList list of YANG leaves
1476 * @throws IOException IO operation fail
1477 */
1478 private void addLeafListInfoToTempFiles(List<YangLeafList> listOfLeafList)
1479 throws IOException {
1480 if (listOfLeafList != null) {
1481 for (YangLeafList leafList : listOfLeafList) {
1482 if (!(leafList instanceof JavaLeafInfoContainer)) {
1483 throw new TranslatorException("Leaf-list does not have java information");
1484 }
1485 JavaLeafInfoContainer javaLeaf = (JavaLeafInfoContainer) leafList;
1486 javaLeaf.updateJavaQualifiedInfo();
1487 JavaAttributeInfo javaAttributeInfo = getAttributeInfoForTheData(
1488 javaLeaf.getJavaQualifiedInfo(),
1489 javaLeaf.getName(), javaLeaf.getDataType(),
1490 getIsQualifiedAccessOrAddToImportList(javaLeaf.getJavaQualifiedInfo()),
1491 true);
1492 addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
1493 }
1494 }
1495 }
1496
1497 /**
1498 * Adds all the leaves in the current data model node as part of the
1499 * generated temporary file.
1500 *
1501 * @param curNode java file info of the generated file
1502 * @throws IOException IO operation fail
1503 */
1504 void addCurNodeLeavesInfoToTempFiles(YangNode curNode)
1505 throws IOException {
1506 if (!(curNode instanceof YangLeavesHolder)) {
1507 throw new TranslatorException("Data model node does not have any leaves");
1508 }
1509 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
1510 addLeavesInfoToTempFiles(leavesHolder.getListOfLeaf());
1511 addLeafListInfoToTempFiles(leavesHolder.getListOfLeafList());
1512 }
1513
1514 /**
1515 * Add all the type in the current data model node as part of the generated
1516 * temporary file.
1517 *
1518 * @param yangTypeContainer YANG java data model node which has type info, eg union /
1519 * typedef
1520 * @throws IOException IO operation fail
1521 */
1522 public void addTypeInfoToTempFiles(YangTypeContainer yangTypeContainer)
1523 throws IOException {
1524 List<YangType<?>> typeList = yangTypeContainer.getTypeList();
1525 if (typeList != null) {
1526 for (YangType<?> yangType : typeList) {
1527 if (!(yangType instanceof YangJavaType)) {
1528 throw new TranslatorException("Type does not have Java info");
1529 }
1530 YangJavaType<?> javaType = (YangJavaType<?>) yangType;
1531 javaType.updateJavaQualifiedInfo();
1532 JavaAttributeInfo javaAttributeInfo = getAttributeInfoForTheData(
1533 javaType.getJavaQualifiedInfo(),
1534 javaType.getDataTypeName(), javaType,
1535 getIsQualifiedAccessOrAddToImportList(javaType.getJavaQualifiedInfo()),
1536 false);
1537 addJavaSnippetInfoToApplicableTempFiles((YangNode) yangTypeContainer, javaAttributeInfo);
1538 }
1539 }
1540 }
1541
1542 /**
1543 * Adds enum attributes to temporary files.
1544 *
1545 * @param curNode current YANG node
1546 * @throws IOException when fails to do IO operations
1547 */
1548 public void addEnumAttributeToTempFiles(YangNode curNode)
1549 throws IOException {
1550 if (curNode instanceof YangEnumeration) {
1551 Set<YangEnum> enumSet = ((YangEnumeration) curNode).getEnumSet();
1552 /*
1553 * Get the import info corresponding to the attribute for import in
1554 * generated java files or qualified access
1555 */
1556 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
1557 getJavaFileInfo().getJavaName());
1558 for (YangEnum curEnum : enumSet) {
1559 JavaAttributeInfo javaAttributeInfo = getAttributeInfoForTheData(qualifiedTypeInfo,
1560 curEnum.getNamedValue(), null, false, false);
1561 setEnumValue(curEnum.getValue());
1562 addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
1563 }
1564 } else {
1565 throw new TranslatorException("current node should be of type enum.");
1566 }
1567 }
1568
1569 /**
1570 * Adds the new attribute info to the target generated temporary files for
1571 * union class.
1572 *
1573 * @param hasType the node for which the type is being added as an attribute
1574 * @param javaAttributeInfo the attribute info that needs to be added to
1575 * temporary files
1576 * @throws IOException IO operation fail
1577 */
1578 private void addJavaSnippetInfoToApplicableTempFiles(YangNode hasType, JavaAttributeInfo javaAttributeInfo)
1579 throws IOException {
1580 JavaQualifiedTypeInfo qualifiedInfoOfFromString = getQualifiedInfoOfFromString(javaAttributeInfo);
1581 /*
1582 * Create a new java attribute info with qualified information of
1583 * wrapper classes.
1584 */
1585 JavaAttributeInfo fromStringAttributeInfo = getAttributeInfoForTheData(qualifiedInfoOfFromString,
1586 javaAttributeInfo.getAttributeName(),
1587 javaAttributeInfo.getAttributeType(),
1588 getIsQualifiedAccessOrAddToImportList(qualifiedInfoOfFromString), false);
1589 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
1590 addFromStringMethod(javaAttributeInfo, fromStringAttributeInfo);
1591 }
1592 addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
1593 }
1594
1595 /**
1596 * Adds the JAVA rpc snippet information.
1597 *
1598 * @param javaAttributeInfoOfInput rpc's input node attribute info
1599 * @param javaAttributeInfoOfOutput rpc's output node attribute info
1600 * @param rpcName name of the rpc function
1601 * @throws IOException IO operation fail
1602 */
1603 public void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo javaAttributeInfoOfInput,
1604 JavaAttributeInfo javaAttributeInfoOfOutput,
1605 String rpcName)
1606 throws IOException {
1607 if ((getGeneratedTempFiles() & RPC_IMPL_MASK) != 0) {
1608 addRpcString(javaAttributeInfoOfInput, javaAttributeInfoOfOutput, rpcName);
1609 }
1610 }
1611
1612 /**
1613 * Adds the new attribute info to the target generated temporary files.
1614 *
1615 * @param newAttrInfo the attribute info that needs to be added to temporary
1616 * files
1617 * @throws IOException IO operation fail
1618 */
1619 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo)
1620 throws IOException {
1621 isAttributePresent = true;
1622 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
1623 addAttribute(newAttrInfo);
1624 }
1625 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
1626 addGetterForInterface(newAttrInfo);
1627 }
1628 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
1629 addSetterForInterface(newAttrInfo);
1630 }
1631 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1632 addGetterImpl(newAttrInfo, getGeneratedJavaFiles());
1633 }
1634 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
1635 addSetterImpl(newAttrInfo);
1636 }
1637 if ((getGeneratedTempFiles() & CONSTRUCTOR_IMPL_MASK) != 0) {
1638 addConstructor(newAttrInfo);
1639 }
1640 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1641 addHashCodeMethod(newAttrInfo);
1642 }
1643 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1644 addEqualsMethod(newAttrInfo);
1645 }
1646 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1647 addToStringMethod(newAttrInfo);
1648 }
1649 if ((getGeneratedTempFiles() & ENUM_IMPL_MASK) != 0) {
1650 addAttributesForEnumClass(newAttrInfo);
1651 }
1652 if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
1653 addOfStringMethod(newAttrInfo);
1654 }
1655 if ((getGeneratedTempFiles() & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
1656 addTypeConstructor(newAttrInfo);
1657 }
1658 }
1659
1660 /**
1661 * Returns java class name.
1662 *
1663 * @param suffix for the class name based on the file type
1664 * @return java class name
1665 */
1666 private String getJavaClassName(String suffix) {
1667 return getCaptialCase(getJavaFileInfo().getJavaName()) + suffix;
1668 }
1669
1670 /**
1671 * Returns the directory path.
1672 *
1673 * @return directory path
1674 */
1675 private String getDirPath() {
1676 return getJavaFileInfo().getPackageFilePath();
1677 }
1678
1679 /**
1680 * Constructs java code exit.
1681 *
1682 * @param fileType generated file type
1683 * @param curNode current YANG node
1684 * @throws IOException when fails to generate java files
1685 */
1686 public void generateJavaFile(int fileType, YangNode curNode)
1687 throws IOException {
1688 List<String> imports = new ArrayList<>();
1689 if (isAttributePresent) {
1690 imports = getJavaImportData().getImports();
1691 }
1692 /**
1693 * Prepares java file generator for extends list.
1694 */
1695 prepareJavaFileGeneratorForExtendsList(getExtendsList());
1696 if (curNode.getNodeType().equals(MODULE_NODE)) {
1697 createPackage(absoluteDirPath, getJavaFileInfo().getJavaName());
1698 } else {
1699 createPackage(absoluteDirPath, ((JavaFileInfoContainer) curNode.getParent()).getJavaFileInfo().getJavaName()
1700 + PACKAGE_INFO_JAVADOC_OF_CHILD);
1701 }
1702 /**
1703 * Generate java code.
1704 */
1705 if ((fileType & INTERFACE_MASK) != 0 | (fileType & BUILDER_INTERFACE_MASK) != 0) {
1706 /**
1707 * Adds import for case.
1708 */
1709 if (curNode instanceof YangCase) {
1710 List<String> importData = ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1711 .getBeanTempFiles().getJavaImportData().getImports();
1712 for (String importInfo : importData) {
1713 if (!imports.contains(importInfo)) {
1714 imports.add(importInfo);
1715 }
1716 }
1717 }
1718 /**
1719 * Adds import for HasAugmentation class.
1720 */
1721 if (isHasAugmentationExtended(getExtendsList())) {
1722 addHasAugmentationImport(curNode, imports, true);
1723 }
1724 if (isAugmentedInfoExtended(getExtendsList())) {
1725 addAugmentedInfoImport(curNode, imports, true);
1726 }
1727 /**
1728 * Create interface file.
1729 */
1730 setInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX)));
1731 setInterfaceJavaFileHandle(
1732 generateInterfaceFile(getInterfaceJavaFileHandle(), imports, curNode, isAttributePresent));
1733 /**
1734 * Create builder interface file.
1735 */
1736 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
1737 setBuilderInterfaceJavaFileHandle(
1738 getJavaFileHandle(getJavaClassName(BUILDER_INTERFACE_FILE_NAME_SUFFIX)));
1739 setBuilderInterfaceJavaFileHandle(
1740 generateBuilderInterfaceFile(getBuilderInterfaceJavaFileHandle(), curNode, isAttributePresent));
1741 /**
1742 * Append builder interface file to interface file and close it.
1743 */
1744 mergeJavaFiles(getBuilderInterfaceJavaFileHandle(), getInterfaceJavaFileHandle());
1745 }
1746 insertDataIntoJavaFile(getInterfaceJavaFileHandle(), getJavaClassDefClose());
1747 if (isHasAugmentationExtended(getExtendsList())) {
1748 addHasAugmentationImport(curNode, imports, false);
1749 }
1750 if (isAugmentedInfoExtended(getExtendsList())) {
1751 addAugmentedInfoImport(curNode, imports, false);
1752 }
1753 if (curNode instanceof YangCase) {
1754 removeCaseImport(imports);
1755 }
1756 }
1757 if ((fileType & BUILDER_CLASS_MASK) != 0 | (fileType & IMPL_CLASS_MASK) != 0) {
1758 if (isAttributePresent) {
1759 addImportsToStringAndHasCodeMethods(curNode, imports);
1760 }
1761 if (isHasAugmentationExtended(getExtendsList())) {
1762 addAugmentedInfoImport(curNode, imports, true);
1763 addArrayListImport(curNode, imports, true);
1764 }
1765 /**
1766 * Create builder class file.
1767 */
1768 setBuilderClassJavaFileHandle(getJavaFileHandle(getJavaClassName(BUILDER_CLASS_FILE_NAME_SUFFIX)));
1769 setBuilderClassJavaFileHandle(
1770 generateBuilderClassFile(getBuilderClassJavaFileHandle(), imports, curNode, isAttributePresent));
1771 /**
1772 * Create impl class file.
1773 */
1774 if ((fileType & IMPL_CLASS_MASK) != 0) {
1775 setImplClassJavaFileHandle(getJavaFileHandle(getJavaClassName(IMPL_CLASS_FILE_NAME_SUFFIX)));
1776 setImplClassJavaFileHandle(
1777 generateImplClassFile(getImplClassJavaFileHandle(), curNode, isAttributePresent));
1778 /**
1779 * Append impl class to builder class and close it.
1780 */
1781 mergeJavaFiles(getImplClassJavaFileHandle(), getBuilderClassJavaFileHandle());
1782 }
1783 insertDataIntoJavaFile(getBuilderClassJavaFileHandle(), getJavaClassDefClose());
1784 }
1785 /**
1786 * Creates type def class file.
1787 */
1788 if ((fileType & GENERATE_TYPEDEF_CLASS) != 0) {
1789 addImportsToStringAndHasCodeMethods(curNode, imports);
1790 setTypedefClassJavaFileHandle(getJavaFileHandle(getJavaClassName(TYPEDEF_CLASS_FILE_NAME_SUFFIX)));
1791 setTypedefClassJavaFileHandle(generateTypeDefClassFile(getTypedefClassJavaFileHandle(), curNode, imports));
1792 }
1793 /**
1794 * Creates type class file.
1795 */
1796 if ((fileType & GENERATE_UNION_CLASS) != 0) {
1797 addImportsToStringAndHasCodeMethods(curNode, imports);
1798 setTypeClassJavaFileHandle(getJavaFileHandle(getJavaClassName(UNION_TYPE_CLASS_FILE_NAME_SUFFIX)));
1799 setTypeClassJavaFileHandle(generateUnionClassFile(getTypeClassJavaFileHandle(), curNode, imports));
1800 }
1801 /**
1802 * Creates type enum class file.
1803 */
1804 if ((fileType & GENERATE_ENUM_CLASS) != 0) {
1805 setEnumClassJavaFileHandle(getJavaFileHandle(getJavaClassName(ENUM_CLASS_FILE_NAME_SUFFIX)));
1806 setEnumClassJavaFileHandle(generateEnumClassFile(getEnumClassJavaFileHandle(), curNode));
1807 }
1808 /**
1809 * Creates rpc interface file.
1810 */
1811 if ((fileType & GENERATE_RPC_INTERFACE) != 0) {
1812 setRpcInterfaceJavaFileHandle(getJavaFileHandle(getJavaClassName(RPC_INTERFACE_FILE_NAME_SUFFIX)));
1813 setRpcInterfaceJavaFileHandle(generateRpcInterfaceFile(getRpcInterfaceJavaFileHandle(), curNode, imports));
1814 }
1815 /**
1816 * Close all the file handles.
1817 */
1818 close(false);
1819 }
1820
1821 /**
1822 * Removes case import info from import list.
1823 *
1824 * @param imports list of imports
1825 * @return import for class
1826 */
1827 private List<String> removeCaseImport(List<String> imports) {
1828 if (imports != null && caseImportInfo != null) {
1829 String caseImport = IMPORT + caseImportInfo.getPkgInfo() + PERIOD + caseImportInfo.getClassInfo() +
1830 SEMI_COLAN + NEW_LINE;
1831 imports.remove(caseImport);
1832 }
1833 return imports;
1834 }
1835
1836 /**
1837 * Removes all temporary file handles.
1838 *
1839 * @param isErrorOccurred when translator fails to generate java files we
1840 * need to close all open file handles include temporary files
1841 * and java files.
1842 * @throws IOException when failed to delete the temporary files
1843 */
1844 public void close(boolean isErrorOccurred)
1845 throws IOException {
1846 boolean isError = isErrorOccurred;
1847 /**
1848 * Close all java file handles and when error occurs delete the files.
1849 */
1850 if ((getGeneratedJavaFiles() & INTERFACE_MASK) != 0) {
1851 closeFile(getInterfaceJavaFileHandle(), isError);
1852 }
1853 if ((getGeneratedJavaFiles() & BUILDER_CLASS_MASK) != 0) {
1854 closeFile(getBuilderClassJavaFileHandle(), isError);
1855 }
1856 if ((getGeneratedJavaFiles() & BUILDER_INTERFACE_MASK) != 0) {
1857 closeFile(getBuilderInterfaceJavaFileHandle(), true);
1858 }
1859 if ((getGeneratedJavaFiles() & IMPL_CLASS_MASK) != 0) {
1860 closeFile(getImplClassJavaFileHandle(), true);
1861 }
1862 if ((getGeneratedJavaFiles() & GENERATE_TYPEDEF_CLASS) != 0) {
1863 closeFile(getTypedefClassJavaFileHandle(), isError);
1864 }
1865 if ((getGeneratedJavaFiles() & GENERATE_ENUM_CLASS) != 0) {
1866 closeFile(getEnumClassJavaFileHandle(), isError);
1867 }
1868 if ((getGeneratedJavaFiles() & GENERATE_UNION_CLASS) != 0) {
1869 closeFile(getTypeClassJavaFileHandle(), isError);
1870 }
1871 if ((getGeneratedJavaFiles() & GENERATE_RPC_INTERFACE) != 0) {
1872 closeFile(getRpcInterfaceJavaFileHandle(), isError);
1873 }
1874 /**
1875 * Close all temporary file handles and delete the files.
1876 */
1877 if ((getGeneratedTempFiles() & GETTER_FOR_INTERFACE_MASK) != 0) {
1878 closeFile(getGetterInterfaceTempFileHandle(), true);
1879 }
1880 if ((getGeneratedTempFiles() & GETTER_FOR_CLASS_MASK) != 0) {
1881 closeFile(getGetterImplTempFileHandle(), true);
1882 }
1883 if ((getGeneratedTempFiles() & SETTER_FOR_INTERFACE_MASK) != 0) {
1884 closeFile(getSetterInterfaceTempFileHandle(), true);
1885 }
1886 if ((getGeneratedTempFiles() & SETTER_FOR_CLASS_MASK) != 0) {
1887 closeFile(getSetterImplTempFileHandle(), true);
1888 }
1889 if ((getGeneratedTempFiles() & CONSTRUCTOR_IMPL_MASK) != 0) {
1890 closeFile(getConstructorImplTempFileHandle(), true);
1891 }
1892 if ((getGeneratedTempFiles() & ATTRIBUTES_MASK) != 0) {
1893 closeFile(getAttributesTempFileHandle(), true);
1894 }
1895 if ((getGeneratedTempFiles() & HASH_CODE_IMPL_MASK) != 0) {
1896 closeFile(getHashCodeImplTempFileHandle(), true);
1897 }
1898 if ((getGeneratedTempFiles() & TO_STRING_IMPL_MASK) != 0) {
1899 closeFile(getToStringImplTempFileHandle(), true);
1900 }
1901 if ((getGeneratedTempFiles() & EQUALS_IMPL_MASK) != 0) {
1902 closeFile(getEqualsImplTempFileHandle(), true);
1903 }
1904 if ((getGeneratedTempFiles() & ENUM_IMPL_MASK) != 0) {
1905 closeFile(getEnumClassTempFileHandle(), true);
1906 }
1907 if ((getGeneratedTempFiles() & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
1908 closeFile(getConstructorForTypeTempFileHandle(), true);
1909 }
1910 if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
1911 closeFile(getOfStringImplTempFileHandle(), true);
1912 }
1913 if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
1914 closeFile(getFromStringImplTempFileHandle(), true);
1915 }
1916 if ((getGeneratedTempFiles() & RPC_IMPL_MASK) != 0) {
1917 closeFile(getRpcInterfaceImplTempFileHandle(), true);
1918 }
1919 clean(getTempDirPath());
1920 clearGeneratedTempFiles();
1921 }
1922
1923 /**
1924 * Returns if the attribute needs to be accessed in a qualified manner or
1925 * not, if it needs to be imported, then the same needs to be done.
1926 *
1927 * @param importInfo import info for the current attribute being added
1928 * @return status of the qualified access to the attribute
1929 */
1930 public boolean getIsQualifiedAccessOrAddToImportList(
1931 JavaQualifiedTypeInfo importInfo) {
1932 boolean isImportPkgEqualCurNodePkg;
1933 if (importInfo.getClassInfo().contentEquals(
1934 getGeneratedJavaClassName())) {
1935 /*
1936 * if the current class name is same as the attribute class name,
1937 * then the attribute must be accessed in a qualified manner.
1938 */
1939 return true;
1940 } else if (importInfo.getPkgInfo() != null) {
1941 /*
1942 * If the attribute type is having the package info, it is contender
1943 * for import list and also need to check if it needs to be a
1944 * qualified access.
1945 */
1946 isImportPkgEqualCurNodePkg = isImportPkgEqualCurNodePkg(importInfo);
1947 if (!isImportPkgEqualCurNodePkg) {
1948 /*
1949 * If the package of the attribute added is not same as the
1950 * current class package, then it must either be imported for
1951 * access or it must be a qualified access.
1952 */
1953 boolean isImportAdded = getJavaImportData().addImportInfo(importInfo);
1954 if (!isImportAdded) {
1955 /*
1956 * If the attribute type info is not imported, then it must
1957 * be a qualified access.
1958 */
1959 return true;
1960 }
1961 }
1962 }
1963 return false;
1964 }
1965
1966 /**
1967 * Checks if the import info is same as the package of the current generated
1968 * java file.
1969 *
1970 * @param importInfo import info for an attribute
1971 * @return true if the import info is same as the current nodes package
1972 * false otherwise
1973 */
1974 public boolean isImportPkgEqualCurNodePkg(JavaQualifiedTypeInfo importInfo) {
1975 return getJavaFileInfo().getPackage()
1976 .contentEquals(importInfo.getPkgInfo());
1977 }
1978}