blob: a63bca073ba06b42d9b45198836add1304a7c41f [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.YangJavaIdentity;
Shankara-Huawei234cd092016-07-14 11:35:34 +053023import org.onosproject.yangutils.translator.exception.TranslatorException;
24import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
25import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswale3175d32016-08-31 17:50:11 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Shankara-Huawei234cd092016-07-14 11:35:34 +053027import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053028import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Shankara-Huawei234cd092016-07-14 11:35:34 +053029import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswale3175d32016-08-31 17:50:11 +053030import org.onosproject.yangutils.utils.io.YangPluginConfig;
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;
Bharat saraswale3175d32016-08-31 17:50:11 +053040import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Shankara-Huawei234cd092016-07-14 11:35:34 +053041
42/**
43 * Represents input information extended to support java code generation.
44 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053045public class YangJavaIdentityTranslator extends YangJavaIdentity
Shankara-Huawei234cd092016-07-14 11:35:34 +053046 implements JavaCodeGeneratorInfo, JavaCodeGenerator {
47
48 //File type extension for java classes.
49 private static final String JAVA_FILE_EXTENSION = ".java";
50
Bharat saraswal8beac342016-08-04 02:00:03 +053051 //Contains the information of the imported.
Shankara-Huawei234cd092016-07-14 11:35:34 +053052 private transient JavaImportData importData;
53
54 /**
55 * File handle to maintain temporary java code fragments as per the code
56 * snippet types.
57 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053058 private transient TempJavaCodeFragmentFiles tempFileHandle;
Shankara-Huawei234cd092016-07-14 11:35:34 +053059
60 /**
61 * Creates YANG java container object.
62 */
Shankara-Huaweib7564772016-08-02 18:13:13 +053063 public YangJavaIdentityTranslator() {
Bharat saraswale50edca2016-08-05 01:58:25 +053064 setJavaFileInfo(new JavaFileInfoTranslator());
Shankara-Huawei234cd092016-07-14 11:35:34 +053065 getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
66 importData = new JavaImportData();
67 }
68
69 /**
70 * Returns the generated java file information.
71 *
72 * @return generated java file information
73 */
74 @Override
Bharat saraswale50edca2016-08-05 01:58:25 +053075 public JavaFileInfoTranslator getJavaFileInfo() {
Shankara-Huawei234cd092016-07-14 11:35:34 +053076 if (javaFileInfo == null) {
Bharat saraswale3175d32016-08-31 17:50:11 +053077 throw new TranslatorException("Missing java info in java datamodel node " +
78 getName() + " in " +
79 getLineNumber() + " at " +
80 getCharPosition()
81 + " in " + getFileName());
Shankara-Huawei234cd092016-07-14 11:35:34 +053082 }
Bharat saraswale50edca2016-08-05 01:58:25 +053083 return (JavaFileInfoTranslator) javaFileInfo;
Shankara-Huawei234cd092016-07-14 11:35:34 +053084 }
85
86 /**
87 * Sets the java file info object.
88 *
89 * @param javaInfo java file info object
90 */
91 @Override
Bharat saraswale50edca2016-08-05 01:58:25 +053092 public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
Shankara-Huawei234cd092016-07-14 11:35:34 +053093 javaFileInfo = javaInfo;
94 }
95
96 /**
97 * Returns the temporary file handle.
98 *
99 * @return temporary file handle
100 */
101 @Override
102 public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
103 return tempFileHandle;
104 }
105
106 /**
107 * Sets temporary file handle.
108 *
109 * @param fileHandle temporary file handle
110 */
111 @Override
112 public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
113 tempFileHandle = fileHandle;
114 }
115
116 /**
117 * Prepare the information for java code generation corresponding to YANG
118 * container info.
119 *
120 * @param yangPlugin YANG plugin config
121 * @throws TranslatorException translator operation fail
122 */
123 @Override
124 public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
125 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530126
Shankara-Huawei234cd092016-07-14 11:35:34 +0530127 updatePackageInfo(this, yangPlugin);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530128 JavaQualifiedTypeInfoTranslator basePkgInfo = new JavaQualifiedTypeInfoTranslator();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530129 String className = getCapitalCase(getJavaFileInfo().getJavaName());
130 String path = getJavaFileInfo().getPackageFilePath();
131 createPackage(this);
132 List<String> imports = null;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530133 boolean isQualified;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530134
135 if (getBaseNode() != null && getBaseNode().getReferredIdentity() != null) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530136 if (!(getBaseNode().getReferredIdentity() instanceof YangJavaIdentityTranslator)) {
Bharat saraswale3175d32016-08-31 17:50:11 +0530137 throw new TranslatorException("Failed to prepare generate code entry for base node "
138 + getName() + " in " +
139 getLineNumber() + " at " +
140 getCharPosition()
141 + " in " + getFileName());
Shankara-Huawei234cd092016-07-14 11:35:34 +0530142 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530143 YangJavaIdentityTranslator baseIdentity = (YangJavaIdentityTranslator) getBaseNode()
144 .getReferredIdentity();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530145 String baseClassName = getCapitalCase(baseIdentity.getJavaFileInfo().getJavaName());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530146 String basePkg = baseIdentity.getJavaFileInfo().getPackage();
Shankara-Huawei234cd092016-07-14 11:35:34 +0530147 basePkgInfo.setClassInfo(baseClassName);
148 basePkgInfo.setPkgInfo(basePkg);
149 isQualified = importData.addImportInfo(basePkgInfo, className, getJavaFileInfo().getPackage());
150 if (!isQualified) {
151 imports = importData.getImports();
152 }
153 }
154
Bharat saraswal8beac342016-08-04 02:00:03 +0530155 File file = getFileObject(path, className, JAVA_FILE_EXTENSION, getJavaFileInfo());
Shankara-Huawei234cd092016-07-14 11:35:34 +0530156
157 initiateJavaFileGeneration(file, GENERATE_IDENTITY_CLASS, imports, this, className);
Bharat saraswale3175d32016-08-31 17:50:11 +0530158 file = validateLineLength(file);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530159 closeFile(file, false);
160 } catch (IOException e) {
161 throw new TranslatorException(
Bharat saraswale3175d32016-08-31 17:50:11 +0530162 "Failed to prepare generate code entry for identity node " +
163 getName() + " in " +
164 getLineNumber() + " at " +
165 getCharPosition()
166 + " in " + getFileName());
Shankara-Huawei234cd092016-07-14 11:35:34 +0530167 }
168 }
169
170 /**
171 * Create a java file using the YANG container info.
172 *
173 * @throws TranslatorException translator operation fail
174 */
175 @Override
176 public void generateCodeExit() throws TranslatorException {
177 /* Do nothing, file is already generated in entry*/
178 }
179}
180