blob: 22f95facb96b6bc94b5bbecb1d9ac94cdd952983 [file] [log] [blame]
Shankara-Huaweidf7b9ca2016-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 saraswald50c6382016-07-14 21:57:13 +053018import java.io.File;
19import java.io.IOException;
20import java.util.List;
21
Shankara-Huaweibdf24bb2016-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-Huaweidf7b9ca2016-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-Huaweidf7b9ca2016-07-14 11:35:34 +053028import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053029import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053030import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053031
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053032import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
Bharat saraswald50c6382016-07-14 21:57:13 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
Bharat saraswalb551aae2016-07-14 15:18:20 +053034import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
Shankara-Huaweidf7b9ca2016-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 saraswalb1170bd2016-07-14 13:26:18 +053038import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Shankara-Huaweidf7b9ca2016-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-Huaweibdf24bb2016-08-02 18:13:13 +053044public class YangJavaIdentityTranslator extends YangJavaIdentity
Shankara-Huaweidf7b9ca2016-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
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053050 //Contains the information of the importd.
51 private transient JavaImportData importData;
52
53 /**
54 * File handle to maintain temporary java code fragments as per the code
55 * snippet types.
56 */
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053057 private transient TempJavaCodeFragmentFiles tempFileHandle;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053058
59 /**
60 * Creates YANG java container object.
61 */
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053062 public YangJavaIdentityTranslator() {
Shankara-Huaweidf7b9ca2016-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 {
121 updatePackageInfo(this, yangPlugin);
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530122 JavaQualifiedTypeInfoTranslator basePkgInfo = new JavaQualifiedTypeInfoTranslator();
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530123 String className = getCapitalCase(getJavaFileInfo().getJavaName());
124 String path = getJavaFileInfo().getPackageFilePath();
125 createPackage(this);
126 List<String> imports = null;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530127 boolean isQualified;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530128
129 if (getBaseNode() != null && getBaseNode().getReferredIdentity() != null) {
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530130 if (!(getBaseNode().getReferredIdentity() instanceof YangJavaIdentityTranslator)) {
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530131 throw new TranslatorException("Failed to prepare generate code entry for base node");
132 }
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530133 YangJavaIdentityTranslator baseIdentity = (YangJavaIdentityTranslator) getBaseNode()
134 .getReferredIdentity();
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530135 String baseClassName = getCapitalCase(baseIdentity.getJavaFileInfo().getJavaName());
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530136 String basePkg = baseIdentity.getJavaFileInfo().getPackage();
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530137 basePkgInfo.setClassInfo(baseClassName);
138 basePkgInfo.setPkgInfo(basePkg);
139 isQualified = importData.addImportInfo(basePkgInfo, className, getJavaFileInfo().getPackage());
140 if (!isQualified) {
141 imports = importData.getImports();
142 }
143 }
144
Bharat saraswald50c6382016-07-14 21:57:13 +0530145 File file = getFileObject(path, className, JAVA_FILE_EXTENSION, getJavaFileInfo().getBaseCodeGenPath());
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530146
147 initiateJavaFileGeneration(file, GENERATE_IDENTITY_CLASS, imports, this, className);
148 closeFile(file, false);
149 } catch (IOException e) {
150 throw new TranslatorException(
151 "Failed to prepare generate code entry for identity node " + this.getName());
152 }
153 }
154
155 /**
156 * Create a java file using the YANG container info.
157 *
158 * @throws TranslatorException translator operation fail
159 */
160 @Override
161 public void generateCodeExit() throws TranslatorException {
162 /* Do nothing, file is already generated in entry*/
163 }
164}
165