blob: 446bce17190e38eb8a73523cf37ba611115ccc92 [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;
23
24import org.onosproject.yangutils.datamodel.YangNode;
janani befb554b2016-07-14 15:03:41 +053025import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGrouping;
Bharat saraswald50c6382016-07-14 21:57:13 +053026import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
27import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
28
29import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
30import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
31import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
32import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
33import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
34import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
35import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
36import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
37import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventFile;
38import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventListenerFile;
39import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventSubjectFile;
40import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
41import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
42import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
43import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
44import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
45import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
46import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
47import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
48import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
49import 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 */
66 public static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
67
68 /**
69 * File name for event enum temp file.
70 */
71
72 private static final String EVENT_ENUM_FILE_NAME = "EventEnum";
73
74 /**
75 * File name for event method temp file.
76 */
77 private static final String EVENT_METHOD_FILE_NAME = "EventMethod";
78
79 /**
80 * File name for event subject attribute temp file.
81 */
82 private static final String EVENT_SUBJECT_ATTRIBUTE_FILE_NAME = "EventSubjectAttribute";
83
84 /**
85 * File name for event subject getter temp file.
86 */
87 private static final String EVENT_SUBJECT_GETTER_FILE_NAME = "EventSubjectGetter";
88
89 /**
90 * File name for event subject setter temp file.
91 */
92 private static final String EVENT_SUBJECT_SETTER_FILE_NAME = "EventSubjectSetter";
93
94 /**
95 * File name for generated class file for special type like union, typedef suffix.
96 */
97 private static final String EVENT_FILE_NAME_SUFFIX = "Event";
98
99 /**
100 * File name for generated class file for special type like union, typedef suffix.
101 */
102 private static final String EVENT_LISTENER_FILE_NAME_SUFFIX = "Listener";
103
104 private static final String JAVA_FILE_EXTENSION = ".java";
105
106 /**
107 * Java file handle for event subject file.
108 */
109 private File eventSubjectJavaFileHandle;
110
111 /**
112 * Java file handle for event listener file.
113 */
114 private File eventListenerJavaFileHandle;
115
116 /**
117 * Java file handle for event file.
118 */
119 private File eventJavaFileHandle;
120
121 /**
122 * Java file handle for event enum impl file.
123 */
124 private File eventEnumTempFileHandle;
125
126 /**
127 * Java file handle for event method impl file.
128 */
129 private File eventMethodTempFileHandle;
130
131 /**
132 * Java file handle for event subject attribute file.
133 */
134 private File eventSubjectAttributeTempFileHandle;
135
136 /**
137 * Java file handle for event subject getter impl file.
138 */
139 private File eventSubjectGetterTempFileHandle;
140
141 /**
142 * Java file handle for event subject setter impl file.
143 */
144 private File eventSubjectSetterTempFileHandle;
145
146 /**
147 * Creates an instance of temporary java code fragment.
148 *
149 * @param javaFileInfo generated file information
150 * @throws IOException when fails to create new file handle
151 */
152 public TempJavaEventFragmentFiles(JavaFileInfo javaFileInfo)
153 throws IOException {
154 setJavaExtendsListHolder(new JavaExtendsListHolder());
155 setJavaImportData(new JavaImportData());
156 setJavaFileInfo(javaFileInfo);
157 setAbsoluteDirPath(getAbsolutePackagePath(getJavaFileInfo().getBaseCodeGenPath(),
158 getJavaFileInfo().getPackageFilePath()));
159
160 addGeneratedTempFile(EVENT_ENUM_MASK);
161 addGeneratedTempFile(EVENT_METHOD_MASK);
162 addGeneratedTempFile(EVENT_SUBJECT_ATTRIBUTE_MASK);
163 addGeneratedTempFile(EVENT_SUBJECT_GETTER_MASK);
164 addGeneratedTempFile(EVENT_SUBJECT_SETTER_MASK);
165
166 setEventEnumTempFileHandle(getTemporaryFileHandle(EVENT_ENUM_FILE_NAME));
167 setEventMethodTempFileHandle(getTemporaryFileHandle(EVENT_METHOD_FILE_NAME));
168 setEventSubjectAttributeTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_ATTRIBUTE_FILE_NAME));
169 setEventSubjectGetterTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_GETTER_FILE_NAME));
170 setEventSubjectSetterTempFileHandle(getTemporaryFileHandle(EVENT_SUBJECT_SETTER_FILE_NAME));
171 }
172
173 /*Adds event method contents to event file.*/
174 private static String getEventFileContents(String eventClassname, String classname) {
175 return "\n" +
176 " /**\n" +
177 " * Creates " + classname + " event with type and subject.\n" +
178 " *\n" +
179 " * @param type event type\n" +
180 " * @param subject subject " + classname + "\n" +
181 " */\n" +
182 " public " + eventClassname + "(Type type, " + getCapitalCase(classname) + " subject) {\n" +
183 " super(type, subject);\n" +
184 " }\n" +
185 "\n" +
186 " /**\n" +
187 " * Creates " + classname + " event with type, subject and time.\n" +
188 " *\n" +
189 " * @param type event type\n" +
190 " * @param subject subject " + classname + "\n" +
191 " * @param time time of event\n" +
192 " */\n" +
193 " public " + eventClassname + "(Type type, " + getCapitalCase(classname)
194 + " subject, long time) {\n" +
195 " super(type, subject, time);\n" +
196 " }\n" +
197 "\n";
198 }
199
200 /**
201 * Returns event's java file handle.
202 *
203 * @return java file handle
204 */
205 private File getEventJavaFileHandle() {
206 return eventJavaFileHandle;
207 }
208
209 /**
210 * Sets event's java file handle.
211 *
212 * @param eventJavaFileHandle file handle for event
213 */
214 private void setEventJavaFileHandle(File eventJavaFileHandle) {
215 this.eventJavaFileHandle = eventJavaFileHandle;
216 }
217
218 /**
219 * Returns event listeners's java file handle.
220 *
221 * @return java file handle
222 */
223 private File getEventListenerJavaFileHandle() {
224 return eventListenerJavaFileHandle;
225 }
226
227 /**
228 * Sets event's java file handle.
229 *
230 * @param eventListenerJavaFileHandle file handle for event
231 */
232 private void setEventListenerJavaFileHandle(File eventListenerJavaFileHandle) {
233 this.eventListenerJavaFileHandle = eventListenerJavaFileHandle;
234 }
235
236 /**
237 * Returns event subject's java file handle.
238 *
239 * @return java file handle
240 */
241 private File getEventSubjectJavaFileHandle() {
242 return eventSubjectJavaFileHandle;
243 }
244
245 /**
246 * Sets event's subject java file handle.
247 *
248 * @param eventSubjectJavaFileHandle file handle for event's subject
249 */
250 private void setEventSubjectJavaFileHandle(File eventSubjectJavaFileHandle) {
251 this.eventSubjectJavaFileHandle = eventSubjectJavaFileHandle;
252 }
253
254 public void generateJavaFile(int fileType, YangNode curNode) throws IOException {
255 generateEventJavaFile(curNode);
256 generateEventListenerJavaFile(curNode);
257 generateEventSubjectJavaFile(curNode);
258 }
259
260 /**
261 * Constructs java code exit.
262 *
263 * @param curNode current YANG node
264 * @throws IOException when fails to generate java files
265 */
266 public void generateEventJavaFile(YangNode curNode)
267 throws IOException {
268
269 List<String> imports = new ArrayList<>();
270
271 imports.add(getJavaImportData().getAbstractEventsImport());
272 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName());
273 String nodeName = curNodeInfo + EVENT_STRING;
274
275 addEnumMethod(nodeName, curNodeInfo + EVENT_SUBJECT_NAME_SUFFIX);
276
277 /**
278 * Creates event interface file.
279 */
280 setEventJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo + EVENT_FILE_NAME_SUFFIX));
281 generateEventFile(getEventJavaFileHandle(), curNode, imports);
282
283 /**
284 * Close all the file handles.
285 */
286 freeTemporaryResources(false);
287 }
288
289 /**
290 * Constructs java code exit.
291 *
292 * @param curNode current YANG node
293 * @throws IOException when fails to generate java files
294 */
295 public void generateEventListenerJavaFile(YangNode curNode)
296 throws IOException {
297
298 List<String> imports = new ArrayList<>();
299
300 imports.add(getJavaImportData().getEventListenerImport());
301 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
302 .getJavaFileInfo().getJavaName());
303 /**
304 * Creates event listener interface file.
305 */
306 setEventListenerJavaFileHandle(
307 getJavaFileHandle(curNode, curNodeInfo + EVENT_LISTENER_FILE_NAME_SUFFIX));
308 generateEventListenerFile(getEventListenerJavaFileHandle(), curNode, imports);
309
310 /**
311 * Close all the file handles.
312 */
313 freeTemporaryResources(false);
314 }
315
316 /**
317 * Constructs java code exit.
318 *
319 * @param curNode current YANG node
320 * @throws IOException when fails to generate java files
321 */
322 public void generateEventSubjectJavaFile(YangNode curNode)
323 throws IOException {
324
325 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
326 .getJavaFileInfo().getJavaName());
327 /**
328 * Creates event interface file.
329 */
330 setEventSubjectJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo +
331 TempJavaEventFragmentFiles.EVENT_SUBJECT_NAME_SUFFIX));
332 generateEventSubjectFile(getEventSubjectJavaFileHandle(), curNode);
333
334 /**
335 * Close all the file handles.
336 */
337 freeTemporaryResources(false);
338 }
339
340 /**
341 * Returns event enum temp file.
342 *
343 * @return event enum temp file
344 */
345 public File getEventEnumTempFileHandle() {
346 return eventEnumTempFileHandle;
347 }
348
349 /**
350 * Sets event enum temp file.
351 *
352 * @param eventEnumTempFileHandle event enum temp file
353 */
354 public void setEventEnumTempFileHandle(File eventEnumTempFileHandle) {
355 this.eventEnumTempFileHandle = eventEnumTempFileHandle;
356 }
357
358 /**
359 * Returns event method temp file.
360 *
361 * @return event method temp file
362 */
363 public File getEventMethodTempFileHandle() {
364 return eventMethodTempFileHandle;
365 }
366
367 /**
368 * Sets event method temp file.
369 *
370 * @param eventMethodTempFileHandle event method temp file
371 */
372 public void setEventMethodTempFileHandle(File eventMethodTempFileHandle) {
373 this.eventMethodTempFileHandle = eventMethodTempFileHandle;
374 }
375
376 /**
377 * Returns event subject attribute temp file.
378 *
379 * @return event subject attribute temp file
380 */
381 public File getEventSubjectAttributeTempFileHandle() {
382 return eventSubjectAttributeTempFileHandle;
383 }
384
385 /**
386 * Sets event subject attribute temp file.
387 *
388 * @param eventSubjectAttributeTempFileHandle event subject attribute temp file
389 */
390 public void setEventSubjectAttributeTempFileHandle(File eventSubjectAttributeTempFileHandle) {
391 this.eventSubjectAttributeTempFileHandle = eventSubjectAttributeTempFileHandle;
392 }
393
394 /**
395 * Returns event subject getter temp file.
396 *
397 * @return event subject getter temp file
398 */
399 public File getEventSubjectGetterTempFileHandle() {
400 return eventSubjectGetterTempFileHandle;
401 }
402
403 /**
404 * Sets event subject getter temp file.
405 *
406 * @param eventSubjectGetterTempFileHandle event subject getter temp file
407 */
408 public void setEventSubjectGetterTempFileHandle(File eventSubjectGetterTempFileHandle) {
409 this.eventSubjectGetterTempFileHandle = eventSubjectGetterTempFileHandle;
410 }
411
412 /**
413 * Returns event subject setter temp file.
414 *
415 * @return event subject setter temp file
416 */
417 public File getEventSubjectSetterTempFileHandle() {
418 return eventSubjectSetterTempFileHandle;
419 }
420
421 /**
422 * Sets event subject setter temp file.
423 *
424 * @param eventSubjectSetterTempFileHandle event subject setter temp file
425 */
426 public void setEventSubjectSetterTempFileHandle(File eventSubjectSetterTempFileHandle) {
427 this.eventSubjectSetterTempFileHandle = eventSubjectSetterTempFileHandle;
428 }
429
430 /**
431 * Adds java snippet for events to event subject file.
432 *
433 * @param curNode current node
434 * @param pluginConfig plugin configurations
435 * @throws IOException when fails to do IO operations
436 */
437 public void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig)
438 throws IOException {
439
440 String currentInfo = getCapitalCase(getCamelCase(curNode.getName(),
441 pluginConfig.getConflictResolver()));
442 String notificationName = curNode.getName();
443
444 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
445 getCapitalCase(currentInfo));
446
447 JavaAttributeInfo javaAttributeInfo = getAttributeInfoForTheData(qualifiedTypeInfo, getSmallCase(currentInfo),
448 null, false, false);
449
450 /*Adds java info for event in respective temp files.*/
451 addEventEnum(notificationName, pluginConfig);
452 addEventSubjectAttribute(javaAttributeInfo, pluginConfig);
453 addEventSubjectGetter(javaAttributeInfo, pluginConfig);
454 addEventSubjectSetter(javaAttributeInfo, pluginConfig, currentInfo);
455 }
456
457 /*Adds event to enum temp file.*/
458 private void addEventEnum(String notificationName, YangPluginConfig pluginConfig)
459 throws IOException {
460 appendToFile(getEventEnumTempFileHandle(),
461 getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION
462 + getEnumJavaAttribute(notificationName).toUpperCase() + COMMA + NEW_LINE);
463 }
464
465 /*Adds event method in event class*/
466 private void addEnumMethod(String eventClassname, String className)
467 throws IOException {
468 appendToFile(getEventMethodTempFileHandle(), getEventFileContents(eventClassname, className));
469 }
470
471 /*Adds events to event subject file.*/
472 private void addEventSubjectAttribute(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
473 throws IOException {
474 appendToFile(getEventSubjectAttributeTempFileHandle(),
475 FOUR_SPACE_INDENTATION + parseAttribute(attr, pluginConfig));
476 }
477
478 /*Adds getter method for event in event subject class.*/
479 private void addEventSubjectGetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
480 throws IOException {
481 appendToFile(getEventSubjectGetterTempFileHandle(),
482 getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
483 + getGetterForClass(attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
484 }
485
486 /*Adds setter method for event in event subject class.*/
487 private void addEventSubjectSetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig, String className)
488 throws IOException {
489 appendToFile(getEventSubjectSetterTempFileHandle(),
490 getJavaDoc(MANAGER_SETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
491 + getSetterForClass(attr, className, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
492 }
493
494 /**
495 * Returns a temporary file handle for the event's file type.
496 *
497 * @param name file name
498 * @return temporary file handle
499 * @throws IOException when fails to create new file handle
500 */
501 private File getJavaFileHandle(YangNode curNode, String name)
502 throws IOException {
503
504 JavaFileInfo parentInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
janani befb554b2016-07-14 15:03:41 +0530505 YangNode childNode = curNode.getChild();
Bharat saraswald50c6382016-07-14 21:57:13 +0530506
janani befb554b2016-07-14 15:03:41 +0530507 // Skip grouping, as it wont have the package name.
508 while (childNode instanceof YangJavaGrouping) {
509 childNode = childNode.getNextSibling();
510 }
511 JavaFileInfo childInfo = ((JavaFileInfoContainer) childNode).getJavaFileInfo();
Bharat saraswald50c6382016-07-14 21:57:13 +0530512 return getFileObject(getDirPath(parentInfo), name, JAVA_FILE_EXTENSION,
513 childInfo.getBaseCodeGenPath());
514 }
515
516 /**
517 * Returns the directory path.
518 *
519 * @return directory path
520 */
521 private String getDirPath(JavaFileInfo parentInfo) {
522 return (parentInfo.getPackageFilePath() + SLASH + parentInfo.getJavaName()).toLowerCase();
523 }
524}