blob: 87176350e8228268ec1345715d3c406181f40d18 [file] [log] [blame]
Vinod Kumar S38046502016-03-23 15:30:27 +05301/*
2 * Copyright 2016 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 saraswale2d51d62016-03-23 19:40:35 +053018import java.io.IOException;
19
Vinod Kumar S38046502016-03-23 15:30:27 +053020import org.onosproject.yangutils.datamodel.YangTypeDef;
21import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
22import org.onosproject.yangutils.translator.tojava.HasJavaImportData;
Bharat saraswale2d51d62016-03-23 19:40:35 +053023import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
Vinod Kumar S38046502016-03-23 15:30:27 +053024import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
25import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
26import org.onosproject.yangutils.translator.tojava.JavaImportData;
Bharat saraswale2d51d62016-03-23 19:40:35 +053027import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Vinod Kumar S38046502016-03-23 15:30:27 +053028
Bharat saraswale2d51d62016-03-23 19:40:35 +053029import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053030import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
31import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
32import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage;
33import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
Bharat saraswale2d51d62016-03-23 19:40:35 +053034import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Vinod Kumar S38046502016-03-23 15:30:27 +053035
36/**
37 * Type define information extended to support java code generation.
38 */
39public class YangJavaTypeDef extends YangTypeDef
Bharat saraswale2d51d62016-03-23 19:40:35 +053040 implements JavaCodeGenerator, HasJavaFileInfo, HasJavaImportData, HasTempJavaCodeFragmentFiles {
Vinod Kumar S38046502016-03-23 15:30:27 +053041
42 /**
43 * Contains the information of the java file being generated.
44 */
45 private JavaFileInfo javaFileInfo;
46
47 /**
48 * Contains information of the imports to be inserted in the java file
49 * generated.
50 */
51 private JavaImportData javaImportData;
52
53 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +053054 * File handle to maintain temporary java code fragments as per the code
55 * snippet types.
56 */
57 private TempJavaCodeFragmentFiles tempFileHandle;
58
59 /**
Vinod Kumar S38046502016-03-23 15:30:27 +053060 * Default constructor.
61 */
62 public YangJavaTypeDef() {
63 super();
64 setJavaFileInfo(new JavaFileInfo());
65 setJavaImportData(new JavaImportData());
Bharat saraswale2d51d62016-03-23 19:40:35 +053066 getJavaFileInfo().setGeneratedFileTypes(GENERATE_TYPEDEF_CLASS);
Vinod Kumar S38046502016-03-23 15:30:27 +053067 }
68
69 /**
70 * Get the generated java file information.
71 *
72 * @return generated java file information
73 */
74 @Override
75 public JavaFileInfo getJavaFileInfo() {
Bharat saraswale2d51d62016-03-23 19:40:35 +053076
Vinod Kumar S38046502016-03-23 15:30:27 +053077 if (javaFileInfo == null) {
78 throw new RuntimeException("Missing java info in java datamodel node");
79 }
80 return javaFileInfo;
81 }
82
83 /**
84 * Set the java file info object.
85 *
86 * @param javaInfo java file info object
87 */
88 @Override
89 public void setJavaFileInfo(JavaFileInfo javaInfo) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053090
Vinod Kumar S38046502016-03-23 15:30:27 +053091 javaFileInfo = javaInfo;
92 }
93
94 /**
95 * Get the data of java imports to be included in generated file.
96 *
97 * @return data of java imports to be included in generated file
98 */
99 @Override
100 public JavaImportData getJavaImportData() {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530101
Vinod Kumar S38046502016-03-23 15:30:27 +0530102 return javaImportData;
103 }
104
105 /**
106 * Set the data of java imports to be included in generated file.
107 *
108 * @param javaImportData data of java imports to be included in generated
109 * file
110 */
111 @Override
112 public void setJavaImportData(JavaImportData javaImportData) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530113
Vinod Kumar S38046502016-03-23 15:30:27 +0530114 this.javaImportData = javaImportData;
115 }
116
117 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530118 * Get the temporary file handle.
119 *
120 * @return temporary file handle
121 */
122 @Override
123 public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
124
125 if (tempFileHandle == null) {
126 throw new RuntimeException("missing temp file hand for current node "
127 + getJavaFileInfo().getJavaName());
128 }
129 return tempFileHandle;
130 }
131
132 /**
133 * Set temporary file handle.
134 *
135 * @param fileHandle temporary file handle
136 */
137 @Override
138 public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
139
140 tempFileHandle = fileHandle;
141 }
142
143 /**
Vinod Kumar S38046502016-03-23 15:30:27 +0530144 * Prepare the information for java code generation corresponding to YANG
145 * container info.
146 *
147 * @param codeGenDir code generation directory
Bharat saraswale2d51d62016-03-23 19:40:35 +0530148 * @throws IOException IO operations fails
Vinod Kumar S38046502016-03-23 15:30:27 +0530149 */
150 @Override
Bharat saraswale2d51d62016-03-23 19:40:35 +0530151 public void generateCodeEntry(String codeGenDir) throws IOException {
152
Vinod Kumar S38046502016-03-23 15:30:27 +0530153 getJavaFileInfo().setJavaName(getCaptialCase(getCamelCase(getName())));
154 getJavaFileInfo().setPackage(getCurNodePackage(this));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530155
Vinod Kumar S38046502016-03-23 15:30:27 +0530156 getJavaFileInfo().setPackageFilePath(
157 getPackageDirPathFromJavaJPackage(getJavaFileInfo().getPackage()));
158 getJavaFileInfo().setBaseCodeGenPath(codeGenDir);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530159 String absloutePath = getAbsolutePackagePath(
160 getJavaFileInfo().getBaseCodeGenPath(),
161 getJavaFileInfo().getPackageFilePath());
162
163 setTempJavaCodeFragmentFiles(new TempJavaCodeFragmentFiles(
164 getJavaFileInfo().getGeneratedFileTypes(), absloutePath,
165 getJavaFileInfo().getJavaName()));
166
167 getTempJavaCodeFragmentFiles().addTypeDefAttributeToTempFiles(this);
168
Vinod Kumar S38046502016-03-23 15:30:27 +0530169 }
170
171 /**
172 * Create a java file using the YANG grouping info.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530173 * @throws IOException IO operations fails
Vinod Kumar S38046502016-03-23 15:30:27 +0530174 */
175 @Override
Bharat saraswale2d51d62016-03-23 19:40:35 +0530176 public void generateCodeExit() throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530177
Bharat saraswale2d51d62016-03-23 19:40:35 +0530178 getTempJavaCodeFragmentFiles().setCurYangNode(this);
179 getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_TYPEDEF_CLASS, this);
Vinod Kumar S38046502016-03-23 15:30:27 +0530180 }
181
182}