blob: f3a4ce24ca4fa1dee3253a17389ed2109ef40b35 [file] [log] [blame]
Shankara-Huawei234cd092016-07-14 11:35:34 +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.javamodel;
17
Bharat saraswal039f59c2016-07-14 21:57:13 +053018import java.io.File;
19import java.io.IOException;
20import java.util.List;
21
Shankara-Huaweib7564772016-08-02 18:13:13 +053022import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
23import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaIdentity;
24import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
Shankara-Huawei234cd092016-07-14 11:35:34 +053025import org.onosproject.yangutils.translator.exception.TranslatorException;
26import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
27import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Shankara-Huawei234cd092016-07-14 11:35:34 +053028import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053029import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Shankara-Huawei234cd092016-07-14 11:35:34 +053030import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Shankara-Huawei234cd092016-07-14 11:35:34 +053031
Shankara-Huawei234cd092016-07-14 11:35:34 +053032import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
Bharat saraswal039f59c2016-07-14 21:57:13 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
Bharat saraswalaf413b82016-07-14 15:18:20 +053034import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
Shankara-Huawei234cd092016-07-14 11:35:34 +053035import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
36import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
37import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
Bharat saraswald14cbe82016-07-14 13:26:18 +053038import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Shankara-Huawei234cd092016-07-14 11:35:34 +053039import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
40
41/**
42 * Represents input information extended to support java code generation.
43 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053044public class YangJavaIdentityTranslator extends YangJavaIdentity
Shankara-Huawei234cd092016-07-14 11:35:34 +053045 implements JavaCodeGeneratorInfo, JavaCodeGenerator {
46
47 //File type extension for java classes.
48 private static final String JAVA_FILE_EXTENSION = ".java";
49
Bharat saraswal8beac342016-08-04 02:00:03 +053050 //Contains the information of the imported.
Shankara-Huawei234cd092016-07-14 11:35:34 +053051 private transient JavaImportData importData;
52
53 /**
54 * File handle to maintain temporary java code fragments as per the code
55 * snippet types.
56 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053057 private transient TempJavaCodeFragmentFiles tempFileHandle;
Shankara-Huawei234cd092016-07-14 11:35:34 +053058
59 /**
60 * Creates YANG java container object.
61 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053062 public YangJavaIdentityTranslator() {
Shankara-Huawei234cd092016-07-14 11:35:34 +053063 setJavaFileInfo(new JavaFileInfo());
64 getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
65 importData = new JavaImportData();
66 }
67
68 /**
69 * Returns the generated java file information.
70 *
71 * @return generated java file information
72 */
73 @Override
74 public JavaFileInfo getJavaFileInfo() {
75 if (javaFileInfo == null) {
76 throw new TranslatorException("Missing java info in java datamodel node");
77 }
78 return javaFileInfo;
79 }
80
81 /**
82 * Sets the java file info object.
83 *
84 * @param javaInfo java file info object
85 */
86 @Override
87 public void setJavaFileInfo(JavaFileInfo javaInfo) {
88 javaFileInfo = javaInfo;
89 }
90
91 /**
92 * Returns the temporary file handle.
93 *
94 * @return temporary file handle
95 */
96 @Override
97 public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
98 return tempFileHandle;
99 }
100
101 /**
102 * Sets temporary file handle.
103 *
104 * @param fileHandle temporary file handle
105 */
106 @Override
107 public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
108 tempFileHandle = fileHandle;
109 }
110
111 /**
112 * Prepare the information for java code generation corresponding to YANG
113 * container info.
114 *
115 * @param yangPlugin YANG plugin config
116 * @throws TranslatorException translator operation fail
117 */
118 @Override
119 public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
120 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530121
Shankara-Huawei234cd092016-07-14 11:35:34 +0530122 updatePackageInfo(this, yangPlugin);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530123 JavaQualifiedTypeInfoTranslator basePkgInfo = new JavaQualifiedTypeInfoTranslator();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530124 String className = getCapitalCase(getJavaFileInfo().getJavaName());
125 String path = getJavaFileInfo().getPackageFilePath();
126 createPackage(this);
127 List<String> imports = null;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530128 boolean isQualified;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530129
130 if (getBaseNode() != null && getBaseNode().getReferredIdentity() != null) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530131 if (!(getBaseNode().getReferredIdentity() instanceof YangJavaIdentityTranslator)) {
Shankara-Huawei234cd092016-07-14 11:35:34 +0530132 throw new TranslatorException("Failed to prepare generate code entry for base node");
133 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530134 YangJavaIdentityTranslator baseIdentity = (YangJavaIdentityTranslator) getBaseNode()
135 .getReferredIdentity();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530136 String baseClassName = getCapitalCase(baseIdentity.getJavaFileInfo().getJavaName());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530137 String basePkg = baseIdentity.getJavaFileInfo().getPackage();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530138 basePkgInfo.setClassInfo(baseClassName);
139 basePkgInfo.setPkgInfo(basePkg);
140 isQualified = importData.addImportInfo(basePkgInfo, className, getJavaFileInfo().getPackage());
141 if (!isQualified) {
142 imports = importData.getImports();
143 }
144 }
145
Bharat saraswal8beac342016-08-04 02:00:03 +0530146 File file = getFileObject(path, className, JAVA_FILE_EXTENSION, getJavaFileInfo());
Shankara-Huawei234cd092016-07-14 11:35:34 +0530147
148 initiateJavaFileGeneration(file, GENERATE_IDENTITY_CLASS, imports, this, className);
149 closeFile(file, false);
150 } catch (IOException e) {
151 throw new TranslatorException(
152 "Failed to prepare generate code entry for identity node " + this.getName());
153 }
154 }
155
156 /**
157 * Create a java file using the YANG container info.
158 *
159 * @throws TranslatorException translator operation fail
160 */
161 @Override
162 public void generateCodeExit() throws TranslatorException {
163 /* Do nothing, file is already generated in entry*/
164 }
165}
166