blob: cf8e73e314d2041e4c2295ef991d6e8a499db26b [file] [log] [blame]
Bharat saraswald50c6382016-07-14 21:57:13 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava;
18
19import java.io.File;
20import java.io.IOException;
21import java.util.ArrayList;
22import java.util.List;
Bharat saraswald50c6382016-07-14 21:57:13 +053023import org.onosproject.yangutils.datamodel.YangNode;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053024import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053025import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
janani bf9819ff2016-08-03 16:40:01 +053026import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
Bharat saraswald50c6382016-07-14 21:57:13 +053027
28import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
29import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
30import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
31import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
32import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
33import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
34import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053035import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswald50c6382016-07-14 21:57:13 +053036import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventFile;
37import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventListenerFile;
38import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventSubjectFile;
39import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
40import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
41import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
42import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
43import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
44import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
45import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
46import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
47import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Bharat saraswale707f032016-07-14 23:33:55 +053048import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Bharat saraswald50c6382016-07-14 21:57:13 +053049import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE;
50import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
51import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
52import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
53import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
54import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
55import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
56import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
57
58/**
59 * Represent temporary java fragments for event files.
60 */
61public class TempJavaEventFragmentFiles
62 extends TempJavaFragmentFiles {
63 /**
64 * File name for generated class file for special type like union, typedef suffix.
65 */
Bharat saraswale707f032016-07-14 23:33:55 +053066 private static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
Bharat saraswald50c6382016-07-14 21:57:13 +053067
68 /**
69 * File name for event enum temp file.
70 */
Bharat saraswald50c6382016-07-14 21:57:13 +053071 private static final String EVENT_ENUM_FILE_NAME = "EventEnum";
72
73 /**
74 * File name for event method temp file.
75 */
76 private static final String EVENT_METHOD_FILE_NAME = "EventMethod";
77
78 /**
79 * File name for event subject attribute temp file.
80 */
81 private static final String EVENT_SUBJECT_ATTRIBUTE_FILE_NAME = "EventSubjectAttribute";
82
83 /**
84 * File name for event subject getter temp file.
85 */
86 private static final String EVENT_SUBJECT_GETTER_FILE_NAME = "EventSubjectGetter";
87
88 /**
89 * File name for event subject setter temp file.
90 */
91 private static final String EVENT_SUBJECT_SETTER_FILE_NAME = "EventSubjectSetter";
92
93 /**
94 * File name for generated class file for special type like union, typedef suffix.
95 */
96 private static final String EVENT_FILE_NAME_SUFFIX = "Event";
97
98 /**
99 * File name for generated class file for special type like union, typedef suffix.
100 */
Bharat saraswal6a5911f2016-08-02 18:43:16 +0530101 private static final String EVENT_LISTENER_FILE_NAME_SUFFIX = "EventListener";
Bharat saraswald50c6382016-07-14 21:57:13 +0530102
103 private static final String JAVA_FILE_EXTENSION = ".java";
104
105 /**
106 * Java file handle for event subject file.
107 */
108 private File eventSubjectJavaFileHandle;
109
110 /**
111 * Java file handle for event listener file.
112 */
113 private File eventListenerJavaFileHandle;
114
115 /**
116 * Java file handle for event file.
117 */
118 private File eventJavaFileHandle;
119
120 /**
121 * Java file handle for event enum impl file.
122 */
123 private File eventEnumTempFileHandle;
124
125 /**
126 * Java file handle for event method impl file.
127 */
128 private File eventMethodTempFileHandle;
129
130 /**
131 * Java file handle for event subject attribute file.
132 */
133 private File eventSubjectAttributeTempFileHandle;
134
135 /**
136 * Java file handle for event subject getter impl file.
137 */
138 private File eventSubjectGetterTempFileHandle;
139
140 /**
141 * Java file handle for event subject setter impl file.
142 */
143 private File eventSubjectSetterTempFileHandle;
144
145 /**
146 * Creates an instance of temporary java code fragment.
147 *
148 * @param javaFileInfo generated file information
149 * @throws IOException when fails to create new file handle
150 */
Bharat saraswale707f032016-07-14 23:33:55 +0530151 TempJavaEventFragmentFiles(JavaFileInfo javaFileInfo)
Bharat saraswald50c6382016-07-14 21:57:13 +0530152 throws IOException {
153 setJavaExtendsListHolder(new JavaExtendsListHolder());
154 setJavaImportData(new JavaImportData());
155 setJavaFileInfo(javaFileInfo);
156 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
157 getJavaFileInfo().getPackageFilePath()));
158
159 addGeneratedTempFile(EVENT_ENUM_MASK);
160 addGeneratedTempFile(EVENT_METHOD_MASK);
161 addGeneratedTempFile(EVENT_SUBJECT_ATTRIBUTE_MASK);
162 addGeneratedTempFile(EVENT_SUBJECT_GETTER_MASK);
163 addGeneratedTempFile(EVENT_SUBJECT_SETTER_MASK);
164
165 setEventEnumTempFileHandle(getTemporaryFileHandle(EVENT_ENUM_FILE_NAME));
166 setEventMethodTempFileHandle(getTemporaryFileHandle(EVENT_METHOD_FILE_NAME));
167 setEventSubjectAttributeTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_ATTRIBUTE_FILE_NAME));
168 setEventSubjectGetterTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_GETTER_FILE_NAME));
169 setEventSubjectSetterTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_SETTER_FILE_NAME));
170 }
171
172 /*Adds event method contents to event file.*/
173 private static String getEventFileContents(String eventClassname, String classname) {
174 return "\n" +
175 " /**\n" +
176 " * Creates " + classname + " event with type and subject.\n" +
177 " *\n" +
178 " * @param type event type\n" +
179 " * @param subject subject " + classname + "\n" +
180 " */\n" +
181 " public " + eventClassname + "(Type type, " + getCapitalCase(classname) + " subject) {\n" +
182 " super(type, subject);\n" +
183 " }\n" +
184 "\n" +
185 " /**\n" +
186 " * Creates " + classname + " event with type, subject and time.\n" +
187 " *\n" +
188 " * @param type event type\n" +
189 " * @param subject subject " + classname + "\n" +
190 " * @param time time of event\n" +
191 " */\n" +
192 " public " + eventClassname + "(Type type, " + getCapitalCase(classname)
193 + " subject, long time) {\n" +
194 " super(type, subject, time);\n" +
195 " }\n" +
196 "\n";
197 }
198
199 /**
200 * Returns event's java file handle.
201 *
202 * @return java file handle
203 */
204 private File getEventJavaFileHandle() {
205 return eventJavaFileHandle;
206 }
207
208 /**
209 * Sets event's java file handle.
210 *
211 * @param eventJavaFileHandle file handle for event
212 */
213 private void setEventJavaFileHandle(File eventJavaFileHandle) {
214 this.eventJavaFileHandle = eventJavaFileHandle;
215 }
216
217 /**
218 * Returns event listeners's java file handle.
219 *
220 * @return java file handle
221 */
222 private File getEventListenerJavaFileHandle() {
223 return eventListenerJavaFileHandle;
224 }
225
226 /**
227 * Sets event's java file handle.
228 *
229 * @param eventListenerJavaFileHandle file handle for event
230 */
231 private void setEventListenerJavaFileHandle(File eventListenerJavaFileHandle) {
232 this.eventListenerJavaFileHandle = eventListenerJavaFileHandle;
233 }
234
235 /**
236 * Returns event subject's java file handle.
237 *
238 * @return java file handle
239 */
240 private File getEventSubjectJavaFileHandle() {
241 return eventSubjectJavaFileHandle;
242 }
243
244 /**
245 * Sets event's subject java file handle.
246 *
247 * @param eventSubjectJavaFileHandle file handle for event's subject
248 */
249 private void setEventSubjectJavaFileHandle(File eventSubjectJavaFileHandle) {
250 this.eventSubjectJavaFileHandle = eventSubjectJavaFileHandle;
251 }
252
253 public void generateJavaFile(int fileType, YangNode curNode) throws IOException {
254 generateEventJavaFile(curNode);
255 generateEventListenerJavaFile(curNode);
256 generateEventSubjectJavaFile(curNode);
Bharat saraswale707f032016-07-14 23:33:55 +0530257
258 // Close all the file handles.
259 freeTemporaryResources(false);
Bharat saraswald50c6382016-07-14 21:57:13 +0530260 }
261
262 /**
263 * Constructs java code exit.
264 *
265 * @param curNode current YANG node
266 * @throws IOException when fails to generate java files
267 */
Bharat saraswale707f032016-07-14 23:33:55 +0530268 private void generateEventJavaFile(YangNode curNode)
Bharat saraswald50c6382016-07-14 21:57:13 +0530269 throws IOException {
270
271 List<String> imports = new ArrayList<>();
272
273 imports.add(getJavaImportData().getAbstractEventsImport());
274 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName());
275 String nodeName = curNodeInfo + EVENT_STRING;
276
277 addEnumMethod(nodeName, curNodeInfo + EVENT_SUBJECT_NAME_SUFFIX);
278
Bharat saraswale707f032016-07-14 23:33:55 +0530279 //Creates event interface file.
Bharat saraswald50c6382016-07-14 21:57:13 +0530280 setEventJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo + EVENT_FILE_NAME_SUFFIX));
281 generateEventFile(getEventJavaFileHandle(), curNode, imports);
282
Bharat saraswald50c6382016-07-14 21:57:13 +0530283 }
284
285 /**
286 * Constructs java code exit.
287 *
288 * @param curNode current YANG node
289 * @throws IOException when fails to generate java files
290 */
Bharat saraswale707f032016-07-14 23:33:55 +0530291 private void generateEventListenerJavaFile(YangNode curNode)
292 throws IOException {
293
294 List<String> imports = new ArrayList<>();
295
296 imports.add(getJavaImportData().getEventListenerImport());
297 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
298 .getJavaFileInfo().getJavaName());
299
300 // Creates event listener interface file.
301 setEventListenerJavaFileHandle(
302 getJavaFileHandle(curNode, curNodeInfo + EVENT_LISTENER_FILE_NAME_SUFFIX));
303 generateEventListenerFile(getEventListenerJavaFileHandle(), curNode, imports);
304
305 }
306
307 /**
308 * Constructs java code exit.
309 *
310 * @param curNode current YANG node
311 * @throws IOException when fails to generate java files
312 */
313 private void generateEventSubjectJavaFile(YangNode curNode)
Bharat saraswald50c6382016-07-14 21:57:13 +0530314 throws IOException {
315
316 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
317 .getJavaFileInfo().getJavaName());
Bharat saraswale707f032016-07-14 23:33:55 +0530318
319 //Creates event interface file.
Bharat saraswald50c6382016-07-14 21:57:13 +0530320 setEventSubjectJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo +
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530321 EVENT_SUBJECT_NAME_SUFFIX));
Bharat saraswald50c6382016-07-14 21:57:13 +0530322 generateEventSubjectFile(getEventSubjectJavaFileHandle(), curNode);
323
Bharat saraswald50c6382016-07-14 21:57:13 +0530324 }
325
326 /**
327 * Returns event enum temp file.
328 *
329 * @return event enum temp file
330 */
331 public File getEventEnumTempFileHandle() {
332 return eventEnumTempFileHandle;
333 }
334
335 /**
336 * Sets event enum temp file.
337 *
338 * @param eventEnumTempFileHandle event enum temp file
339 */
Bharat saraswale707f032016-07-14 23:33:55 +0530340 private void setEventEnumTempFileHandle(File eventEnumTempFileHandle) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530341 this.eventEnumTempFileHandle = eventEnumTempFileHandle;
342 }
343
344 /**
345 * Returns event method temp file.
346 *
347 * @return event method temp file
348 */
349 public File getEventMethodTempFileHandle() {
350 return eventMethodTempFileHandle;
351 }
352
353 /**
354 * Sets event method temp file.
355 *
356 * @param eventMethodTempFileHandle event method temp file
357 */
Bharat saraswale707f032016-07-14 23:33:55 +0530358 private void setEventMethodTempFileHandle(File eventMethodTempFileHandle) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530359 this.eventMethodTempFileHandle = eventMethodTempFileHandle;
360 }
361
362 /**
363 * Returns event subject attribute temp file.
364 *
365 * @return event subject attribute temp file
366 */
367 public File getEventSubjectAttributeTempFileHandle() {
368 return eventSubjectAttributeTempFileHandle;
369 }
370
371 /**
372 * Sets event subject attribute temp file.
373 *
374 * @param eventSubjectAttributeTempFileHandle event subject attribute temp file
375 */
Bharat saraswale707f032016-07-14 23:33:55 +0530376 private void setEventSubjectAttributeTempFileHandle(File eventSubjectAttributeTempFileHandle) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530377 this.eventSubjectAttributeTempFileHandle = eventSubjectAttributeTempFileHandle;
378 }
379
380 /**
381 * Returns event subject getter temp file.
382 *
383 * @return event subject getter temp file
384 */
385 public File getEventSubjectGetterTempFileHandle() {
386 return eventSubjectGetterTempFileHandle;
387 }
388
389 /**
390 * Sets event subject getter temp file.
391 *
392 * @param eventSubjectGetterTempFileHandle event subject getter temp file
393 */
Bharat saraswale707f032016-07-14 23:33:55 +0530394 private void setEventSubjectGetterTempFileHandle(File eventSubjectGetterTempFileHandle) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530395 this.eventSubjectGetterTempFileHandle = eventSubjectGetterTempFileHandle;
396 }
397
398 /**
399 * Returns event subject setter temp file.
400 *
401 * @return event subject setter temp file
402 */
403 public File getEventSubjectSetterTempFileHandle() {
404 return eventSubjectSetterTempFileHandle;
405 }
406
407 /**
408 * Sets event subject setter temp file.
409 *
410 * @param eventSubjectSetterTempFileHandle event subject setter temp file
411 */
Bharat saraswale707f032016-07-14 23:33:55 +0530412 private void setEventSubjectSetterTempFileHandle(File eventSubjectSetterTempFileHandle) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530413 this.eventSubjectSetterTempFileHandle = eventSubjectSetterTempFileHandle;
414 }
415
416 /**
417 * Adds java snippet for events to event subject file.
418 *
419 * @param curNode current node
420 * @param pluginConfig plugin configurations
421 * @throws IOException when fails to do IO operations
422 */
Bharat saraswale707f032016-07-14 23:33:55 +0530423 void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig)
Bharat saraswald50c6382016-07-14 21:57:13 +0530424 throws IOException {
425
426 String currentInfo = getCapitalCase(getCamelCase(curNode.getName(),
427 pluginConfig.getConflictResolver()));
428 String notificationName = curNode.getName();
429
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530430 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +0530431 getCapitalCase(currentInfo));
432
433 JavaAttributeInfo javaAttributeInfo = getAttributeInfoForTheData(qualifiedTypeInfo, getSmallCase(currentInfo),
434 null, false, false);
435
436 /*Adds java info for event in respective temp files.*/
437 addEventEnum(notificationName, pluginConfig);
438 addEventSubjectAttribute(javaAttributeInfo, pluginConfig);
439 addEventSubjectGetter(javaAttributeInfo, pluginConfig);
440 addEventSubjectSetter(javaAttributeInfo, pluginConfig, currentInfo);
441 }
442
443 /*Adds event to enum temp file.*/
444 private void addEventEnum(String notificationName, YangPluginConfig pluginConfig)
445 throws IOException {
446 appendToFile(getEventEnumTempFileHandle(),
447 getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION
448 + getEnumJavaAttribute(notificationName).toUpperCase() + COMMA + NEW_LINE);
449 }
450
451 /*Adds event method in event class*/
452 private void addEnumMethod(String eventClassname, String className)
453 throws IOException {
454 appendToFile(getEventMethodTempFileHandle(), getEventFileContents(eventClassname, className));
455 }
456
457 /*Adds events to event subject file.*/
458 private void addEventSubjectAttribute(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
459 throws IOException {
460 appendToFile(getEventSubjectAttributeTempFileHandle(),
461 FOUR_SPACE_INDENTATION + parseAttribute(attr, pluginConfig));
462 }
463
464 /*Adds getter method for event in event subject class.*/
465 private void addEventSubjectGetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
466 throws IOException {
467 appendToFile(getEventSubjectGetterTempFileHandle(),
468 getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
469 + getGetterForClass(attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
470 }
471
472 /*Adds setter method for event in event subject class.*/
473 private void addEventSubjectSetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig, String className)
474 throws IOException {
475 appendToFile(getEventSubjectSetterTempFileHandle(),
476 getJavaDoc(MANAGER_SETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
477 + getSetterForClass(attr, className, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
478 }
479
480 /**
481 * Returns a temporary file handle for the event's file type.
482 *
483 * @param name file name
484 * @return temporary file handle
485 * @throws IOException when fails to create new file handle
486 */
487 private File getJavaFileHandle(YangNode curNode, String name)
488 throws IOException {
489
490 JavaFileInfo parentInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald50c6382016-07-14 21:57:13 +0530491 return getFileObject(getDirPath(parentInfo), name, JAVA_FILE_EXTENSION,
janani bf9819ff2016-08-03 16:40:01 +0530492 parentInfo.getPluginConfig().getCodeGenDir());
Bharat saraswald50c6382016-07-14 21:57:13 +0530493 }
494
495 /**
496 * Returns the directory path.
497 *
498 * @return directory path
499 */
500 private String getDirPath(JavaFileInfo parentInfo) {
501 return (parentInfo.getPackageFilePath() + SLASH + parentInfo.getJavaName()).toLowerCase();
502 }
Bharat saraswale707f032016-07-14 23:33:55 +0530503
504 /**
505 * Removes all temporary file handles.
506 *
507 * @param isErrorOccurred flag to tell translator that error has occurred while file generation
508 * @throws IOException when failed to delete the temporary files
509 */
510 @Override
511 public void freeTemporaryResources(boolean isErrorOccurred)
512 throws IOException {
513
514 closeFile(getEventJavaFileHandle(), isErrorOccurred);
515 closeFile(getEventListenerJavaFileHandle(), isErrorOccurred);
516 closeFile(getEventSubjectJavaFileHandle(), isErrorOccurred);
517
518 closeFile(getEventEnumTempFileHandle(), true);
519 closeFile(getEventSubjectAttributeTempFileHandle(), true);
520 closeFile(getEventMethodTempFileHandle(), true);
521 closeFile(getEventSubjectGetterTempFileHandle(), true);
522 closeFile(getEventSubjectSetterTempFileHandle(), true);
523
524 super.freeTemporaryResources(isErrorOccurred);
525
526 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530527}