blob: 14f62fa1e7a98bed6f25d8c7ceaa7a003adee6d3 [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;
25import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
26import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
27
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;
35import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
36import 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;
48import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE;
49import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
50import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
51import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
52import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
53import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
54import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
55import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
56
57/**
58 * Represent temporary java fragments for event files.
59 */
60public class TempJavaEventFragmentFiles
61 extends TempJavaFragmentFiles {
62 /**
63 * File name for generated class file for special type like union, typedef suffix.
64 */
65 public static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
66
67 /**
68 * File name for event enum temp file.
69 */
70
71 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 */
101 private static final String EVENT_LISTENER_FILE_NAME_SUFFIX = "Listener";
102
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 */
151 public TempJavaEventFragmentFiles(JavaFileInfo javaFileInfo)
152 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);
257 }
258
259 /**
260 * Constructs java code exit.
261 *
262 * @param curNode current YANG node
263 * @throws IOException when fails to generate java files
264 */
265 public void generateEventJavaFile(YangNode curNode)
266 throws IOException {
267
268 List<String> imports = new ArrayList<>();
269
270 imports.add(getJavaImportData().getAbstractEventsImport());
271 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName());
272 String nodeName = curNodeInfo + EVENT_STRING;
273
274 addEnumMethod(nodeName, curNodeInfo + EVENT_SUBJECT_NAME_SUFFIX);
275
276 /**
277 * Creates event interface file.
278 */
279 setEventJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo + EVENT_FILE_NAME_SUFFIX));
280 generateEventFile(getEventJavaFileHandle(), curNode, imports);
281
282 /**
283 * Close all the file handles.
284 */
285 freeTemporaryResources(false);
286 }
287
288 /**
289 * Constructs java code exit.
290 *
291 * @param curNode current YANG node
292 * @throws IOException when fails to generate java files
293 */
294 public void generateEventListenerJavaFile(YangNode curNode)
295 throws IOException {
296
297 List<String> imports = new ArrayList<>();
298
299 imports.add(getJavaImportData().getEventListenerImport());
300 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
301 .getJavaFileInfo().getJavaName());
302 /**
303 * Creates event listener interface file.
304 */
305 setEventListenerJavaFileHandle(
306 getJavaFileHandle(curNode, curNodeInfo + EVENT_LISTENER_FILE_NAME_SUFFIX));
307 generateEventListenerFile(getEventListenerJavaFileHandle(), curNode, imports);
308
309 /**
310 * Close all the file handles.
311 */
312 freeTemporaryResources(false);
313 }
314
315 /**
316 * Constructs java code exit.
317 *
318 * @param curNode current YANG node
319 * @throws IOException when fails to generate java files
320 */
321 public void generateEventSubjectJavaFile(YangNode curNode)
322 throws IOException {
323
324 String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
325 .getJavaFileInfo().getJavaName());
326 /**
327 * Creates event interface file.
328 */
329 setEventSubjectJavaFileHandle(getJavaFileHandle(curNode, curNodeInfo +
330 TempJavaEventFragmentFiles.EVENT_SUBJECT_NAME_SUFFIX));
331 generateEventSubjectFile(getEventSubjectJavaFileHandle(), curNode);
332
333 /**
334 * Close all the file handles.
335 */
336 freeTemporaryResources(false);
337 }
338
339 /**
340 * Returns event enum temp file.
341 *
342 * @return event enum temp file
343 */
344 public File getEventEnumTempFileHandle() {
345 return eventEnumTempFileHandle;
346 }
347
348 /**
349 * Sets event enum temp file.
350 *
351 * @param eventEnumTempFileHandle event enum temp file
352 */
353 public void setEventEnumTempFileHandle(File eventEnumTempFileHandle) {
354 this.eventEnumTempFileHandle = eventEnumTempFileHandle;
355 }
356
357 /**
358 * Returns event method temp file.
359 *
360 * @return event method temp file
361 */
362 public File getEventMethodTempFileHandle() {
363 return eventMethodTempFileHandle;
364 }
365
366 /**
367 * Sets event method temp file.
368 *
369 * @param eventMethodTempFileHandle event method temp file
370 */
371 public void setEventMethodTempFileHandle(File eventMethodTempFileHandle) {
372 this.eventMethodTempFileHandle = eventMethodTempFileHandle;
373 }
374
375 /**
376 * Returns event subject attribute temp file.
377 *
378 * @return event subject attribute temp file
379 */
380 public File getEventSubjectAttributeTempFileHandle() {
381 return eventSubjectAttributeTempFileHandle;
382 }
383
384 /**
385 * Sets event subject attribute temp file.
386 *
387 * @param eventSubjectAttributeTempFileHandle event subject attribute temp file
388 */
389 public void setEventSubjectAttributeTempFileHandle(File eventSubjectAttributeTempFileHandle) {
390 this.eventSubjectAttributeTempFileHandle = eventSubjectAttributeTempFileHandle;
391 }
392
393 /**
394 * Returns event subject getter temp file.
395 *
396 * @return event subject getter temp file
397 */
398 public File getEventSubjectGetterTempFileHandle() {
399 return eventSubjectGetterTempFileHandle;
400 }
401
402 /**
403 * Sets event subject getter temp file.
404 *
405 * @param eventSubjectGetterTempFileHandle event subject getter temp file
406 */
407 public void setEventSubjectGetterTempFileHandle(File eventSubjectGetterTempFileHandle) {
408 this.eventSubjectGetterTempFileHandle = eventSubjectGetterTempFileHandle;
409 }
410
411 /**
412 * Returns event subject setter temp file.
413 *
414 * @return event subject setter temp file
415 */
416 public File getEventSubjectSetterTempFileHandle() {
417 return eventSubjectSetterTempFileHandle;
418 }
419
420 /**
421 * Sets event subject setter temp file.
422 *
423 * @param eventSubjectSetterTempFileHandle event subject setter temp file
424 */
425 public void setEventSubjectSetterTempFileHandle(File eventSubjectSetterTempFileHandle) {
426 this.eventSubjectSetterTempFileHandle = eventSubjectSetterTempFileHandle;
427 }
428
429 /**
430 * Adds java snippet for events to event subject file.
431 *
432 * @param curNode current node
433 * @param pluginConfig plugin configurations
434 * @throws IOException when fails to do IO operations
435 */
436 public void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig)
437 throws IOException {
438
439 String currentInfo = getCapitalCase(getCamelCase(curNode.getName(),
440 pluginConfig.getConflictResolver()));
441 String notificationName = curNode.getName();
442
443 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
444 getCapitalCase(currentInfo));
445
446 JavaAttributeInfo javaAttributeInfo = getAttributeInfoForTheData(qualifiedTypeInfo, getSmallCase(currentInfo),
447 null, false, false);
448
449 /*Adds java info for event in respective temp files.*/
450 addEventEnum(notificationName, pluginConfig);
451 addEventSubjectAttribute(javaAttributeInfo, pluginConfig);
452 addEventSubjectGetter(javaAttributeInfo, pluginConfig);
453 addEventSubjectSetter(javaAttributeInfo, pluginConfig, currentInfo);
454 }
455
456 /*Adds event to enum temp file.*/
457 private void addEventEnum(String notificationName, YangPluginConfig pluginConfig)
458 throws IOException {
459 appendToFile(getEventEnumTempFileHandle(),
460 getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION
461 + getEnumJavaAttribute(notificationName).toUpperCase() + COMMA + NEW_LINE);
462 }
463
464 /*Adds event method in event class*/
465 private void addEnumMethod(String eventClassname, String className)
466 throws IOException {
467 appendToFile(getEventMethodTempFileHandle(), getEventFileContents(eventClassname, className));
468 }
469
470 /*Adds events to event subject file.*/
471 private void addEventSubjectAttribute(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
472 throws IOException {
473 appendToFile(getEventSubjectAttributeTempFileHandle(),
474 FOUR_SPACE_INDENTATION + parseAttribute(attr, pluginConfig));
475 }
476
477 /*Adds getter method for event in event subject class.*/
478 private void addEventSubjectGetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
479 throws IOException {
480 appendToFile(getEventSubjectGetterTempFileHandle(),
481 getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
482 + getGetterForClass(attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
483 }
484
485 /*Adds setter method for event in event subject class.*/
486 private void addEventSubjectSetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig, String className)
487 throws IOException {
488 appendToFile(getEventSubjectSetterTempFileHandle(),
489 getJavaDoc(MANAGER_SETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig)
490 + getSetterForClass(attr, className, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
491 }
492
493 /**
494 * Returns a temporary file handle for the event's file type.
495 *
496 * @param name file name
497 * @return temporary file handle
498 * @throws IOException when fails to create new file handle
499 */
500 private File getJavaFileHandle(YangNode curNode, String name)
501 throws IOException {
502
503 JavaFileInfo parentInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
504 JavaFileInfo childInfo = ((JavaFileInfoContainer) curNode.getChild()).getJavaFileInfo();
505
506 return getFileObject(getDirPath(parentInfo), name, JAVA_FILE_EXTENSION,
507 childInfo.getBaseCodeGenPath());
508 }
509
510 /**
511 * Returns the directory path.
512 *
513 * @return directory path
514 */
515 private String getDirPath(JavaFileInfo parentInfo) {
516 return (parentInfo.getPackageFilePath() + SLASH + parentInfo.getJavaName()).toLowerCase();
517 }
518}