blob: 9051d176a673c01eb325379b695d850ecc61881c [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
Shankara-Huaweib7564772016-08-02 18:13:13 +053018import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaIdentity;
Shankara-Huawei234cd092016-07-14 11:35:34 +053019import org.onosproject.yangutils.translator.exception.TranslatorException;
20import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
21import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswale3175d32016-08-31 17:50:11 +053022import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Shankara-Huawei234cd092016-07-14 11:35:34 +053023import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053024import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Shankara-Huawei234cd092016-07-14 11:35:34 +053025import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswale3175d32016-08-31 17:50:11 +053026import org.onosproject.yangutils.utils.io.YangPluginConfig;
Shankara-Huawei234cd092016-07-14 11:35:34 +053027
Bharat saraswalc2fd3222016-10-19 16:10:27 +053028import java.io.File;
29import java.io.IOException;
30import java.util.List;
31
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 saraswala5c28512016-11-10 21:09:23 +053038import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodForIdentity;
39import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodForIdentity;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053040import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
41import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
42import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
Bharat saraswala5c28512016-11-10 21:09:23 +053043import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalc2fd3222016-10-19 16:10:27 +053044import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
45import static org.onosproject.yangutils.utils.UtilConstants.JAVA_FILE_EXTENSION;
Bharat saraswald14cbe82016-07-14 13:26:18 +053046import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Shankara-Huawei234cd092016-07-14 11:35:34 +053047import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswala5c28512016-11-10 21:09:23 +053048import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswale3175d32016-08-31 17:50:11 +053049import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Shankara-Huawei234cd092016-07-14 11:35:34 +053050
51/**
52 * Represents input information extended to support java code generation.
53 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053054public class YangJavaIdentityTranslator extends YangJavaIdentity
Shankara-Huawei234cd092016-07-14 11:35:34 +053055 implements JavaCodeGeneratorInfo, JavaCodeGenerator {
56
Bharat saraswal8beac342016-08-04 02:00:03 +053057 //Contains the information of the imported.
Shankara-Huawei234cd092016-07-14 11:35:34 +053058 private transient JavaImportData importData;
59
60 /**
61 * File handle to maintain temporary java code fragments as per the code
62 * snippet types.
63 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053064 private transient TempJavaCodeFragmentFiles tempFileHandle;
Shankara-Huawei234cd092016-07-14 11:35:34 +053065
66 /**
67 * Creates YANG java container object.
68 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053069 public YangJavaIdentityTranslator() {
Bharat saraswale50edca2016-08-05 01:58:25 +053070 setJavaFileInfo(new JavaFileInfoTranslator());
Shankara-Huawei234cd092016-07-14 11:35:34 +053071 getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
72 importData = new JavaImportData();
73 }
74
75 /**
76 * Returns the generated java file information.
77 *
78 * @return generated java file information
79 */
80 @Override
Bharat saraswale50edca2016-08-05 01:58:25 +053081 public JavaFileInfoTranslator getJavaFileInfo() {
Shankara-Huawei234cd092016-07-14 11:35:34 +053082 if (javaFileInfo == null) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +053083 throw new TranslatorException("Missing java info in java identity" +
84 " node " + getName());
Shankara-Huawei234cd092016-07-14 11:35:34 +053085 }
Bharat saraswale50edca2016-08-05 01:58:25 +053086 return (JavaFileInfoTranslator) javaFileInfo;
Shankara-Huawei234cd092016-07-14 11:35:34 +053087 }
88
89 /**
90 * Sets the java file info object.
91 *
92 * @param javaInfo java file info object
93 */
94 @Override
Bharat saraswale50edca2016-08-05 01:58:25 +053095 public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
Shankara-Huawei234cd092016-07-14 11:35:34 +053096 javaFileInfo = javaInfo;
97 }
98
99 /**
100 * Returns the temporary file handle.
101 *
102 * @return temporary file handle
103 */
104 @Override
105 public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
106 return tempFileHandle;
107 }
108
109 /**
110 * Sets temporary file handle.
111 *
112 * @param fileHandle temporary file handle
113 */
114 @Override
115 public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
116 tempFileHandle = fileHandle;
117 }
118
119 /**
120 * Prepare the information for java code generation corresponding to YANG
121 * container info.
122 *
123 * @param yangPlugin YANG plugin config
124 * @throws TranslatorException translator operation fail
125 */
126 @Override
127 public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
128 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530129
Shankara-Huawei234cd092016-07-14 11:35:34 +0530130 updatePackageInfo(this, yangPlugin);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530131 JavaQualifiedTypeInfoTranslator basePkgInfo =
132 new JavaQualifiedTypeInfoTranslator();
133 JavaFileInfoTranslator itsInfo = getJavaFileInfo();
Bharat saraswala5c28512016-11-10 21:09:23 +0530134 String name = itsInfo.getJavaName();
135 String className = getCapitalCase(name);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530136 String path = itsInfo.getPackageFilePath();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530137 createPackage(this);
138 List<String> imports = null;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530139 boolean isQualified;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530140
141 if (getBaseNode() != null && getBaseNode().getReferredIdentity() != null) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530142 if (!(getBaseNode().getReferredIdentity() instanceof YangJavaIdentityTranslator)) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530143 throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
144 EMPTY_STRING));
145
Shankara-Huawei234cd092016-07-14 11:35:34 +0530146 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530147 YangJavaIdentityTranslator base =
148 (YangJavaIdentityTranslator) getBaseNode().getReferredIdentity();
149 JavaFileInfoTranslator info = base.getJavaFileInfo();
150 String baseClassName = getCapitalCase(info.getJavaName());
151 String basePkg = info.getPackage();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530152 basePkgInfo.setClassInfo(baseClassName);
153 basePkgInfo.setPkgInfo(basePkg);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530154 isQualified = importData.addImportInfo(basePkgInfo, className,
155 javaFileInfo.getPackage());
Shankara-Huawei234cd092016-07-14 11:35:34 +0530156 if (!isQualified) {
157 imports = importData.getImports();
158 }
159 }
160
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530161 File file = getFileObject(path, className, JAVA_FILE_EXTENSION, itsInfo);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530162
163 initiateJavaFileGeneration(file, GENERATE_IDENTITY_CLASS, imports, this, className);
Bharat saraswale3175d32016-08-31 17:50:11 +0530164 file = validateLineLength(file);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530165 //Add to string and from string method to class
Bharat saraswala5c28512016-11-10 21:09:23 +0530166 addStringMethodsToClass(file, name);
167 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530168
Shankara-Huawei234cd092016-07-14 11:35:34 +0530169 closeFile(file, false);
170 } catch (IOException e) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530171 throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
172 e.getLocalizedMessage()));
Shankara-Huawei234cd092016-07-14 11:35:34 +0530173 }
174 }
175
Bharat saraswala5c28512016-11-10 21:09:23 +0530176 private void addStringMethodsToClass(File file, String className) throws IOException {
177 insertDataIntoJavaFile(file, getToStringMethodForIdentity(getName()));
178 insertDataIntoJavaFile(file, getFromStringMethodForIdentity(
179 className, getName()));
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530180 }
181
Shankara-Huawei234cd092016-07-14 11:35:34 +0530182 /**
183 * Create a java file using the YANG container info.
184 *
185 * @throws TranslatorException translator operation fail
186 */
187 @Override
188 public void generateCodeExit() throws TranslatorException {
189 /* Do nothing, file is already generated in entry*/
190 }
191}
192