blob: 6047206871397db4029baa0cb8df964c99dffcec [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
18import java.io.IOException;
19
20import org.onosproject.yangutils.datamodel.YangBelongsTo;
21import org.onosproject.yangutils.datamodel.YangSubModule;
22import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
23import org.onosproject.yangutils.translator.tojava.HasJavaImportData;
24import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
25import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
26import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
27import org.onosproject.yangutils.translator.tojava.JavaImportData;
28import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
29
30import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
31import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
32import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
33import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
34import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
35import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
36
37/**
38 * Sub module information extended to support java code generation.
39 */
40public class YangJavaSubModule extends YangSubModule
41 implements JavaCodeGenerator, HasJavaFileInfo,
42 HasJavaImportData, HasTempJavaCodeFragmentFiles {
43
44 /**
45 * Contains the information of the java file being generated.
46 */
47 private JavaFileInfo javaFileInfo;
48
49 /**
50 * Contains information of the imports to be inserted in the java file
51 * generated.
52 */
53 private JavaImportData javaImportData;
54
55 /**
56 * File handle to maintain temporary java code fragments as per the code
57 * snippet types.
58 */
59 private TempJavaCodeFragmentFiles tempFileHandle;
60
61 /**
62 * Default constructor.
63 */
64 public YangJavaSubModule() {
65 super();
66 setJavaFileInfo(new JavaFileInfo());
67 setJavaImportData(new JavaImportData());
68 getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
69 }
70
71 /**
72 * Get the generated java file information.
73 *
74 * @return generated java file information
75 */
76 @Override
77 public JavaFileInfo getJavaFileInfo() {
78 if (javaFileInfo == null) {
79 throw new RuntimeException("Missing java info in java datamodel node");
80 }
81 return javaFileInfo;
82 }
83
84 /**
85 * Set the java file info object.
86 *
87 * @param javaInfo java file info object
88 */
89 @Override
90 public void setJavaFileInfo(JavaFileInfo javaInfo) {
91 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() {
101 return javaImportData;
102 }
103
104 /**
105 * Set the data of java imports to be included in generated file.
106 *
107 * @param javaImportData data of java imports to be included in generated
108 * file
109 */
110 @Override
111 public void setJavaImportData(JavaImportData javaImportData) {
112 this.javaImportData = javaImportData;
113 }
114
115 /**
116 * Get the temporary file handle.
117 *
118 * @return temporary file handle
119 */
120 @Override
121 public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
122 if (tempFileHandle == null) {
123 throw new RuntimeException("missing temp file hand for current node "
124 + getJavaFileInfo().getJavaName());
125 }
126 return tempFileHandle;
127 }
128
129 /**
130 * Set temporary file handle.
131 *
132 * @param fileHandle temporary file handle
133 */
134 @Override
135 public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
136 tempFileHandle = fileHandle;
137 }
138
139 /**
140 * Get the name space of the module to which the sub module belongs to.
141 *
142 * @param belongsToInfo Information of the module to which the sub module
143 * belongs
144 * @return the name space string of the module.
145 */
146 private String getNameSpaceFromModule(YangBelongsTo belongsToInfo) {
147 // TODO Auto-generated method stub
148 return "";
149 }
150
151 /**
152 * Prepare the information for java code generation corresponding to YANG
153 * container info.
154 *
155 * @param codeGenDir code generation directory
156 * @throws IOException IO operation fail
157 */
158 @Override
159 public void generateCodeEntry(String codeGenDir) throws IOException {
160 getJavaFileInfo().setJavaName(getCaptialCase(getCamelCase(getName())));
161 getJavaFileInfo().setPackage(getRootPackage(getVersion(),
162 getNameSpaceFromModule(getBelongsTo()),
163 getRevision().getRevDate()));
164 getJavaFileInfo().setPackageFilePath(
165 getPackageDirPathFromJavaJPackage(getJavaFileInfo().getPackage()));
166 getJavaFileInfo().setBaseCodeGenPath(codeGenDir);
167
168 String absloutePath = getAbsolutePackagePath(
169 getJavaFileInfo().getBaseCodeGenPath(),
170 getJavaFileInfo().getPackageFilePath());
171
172 setTempJavaCodeFragmentFiles(new TempJavaCodeFragmentFiles(
173 getJavaFileInfo().getGeneratedFileTypes(), absloutePath,
174 getJavaFileInfo().getJavaName()));
175
176 getTempJavaCodeFragmentFiles().addCurNodeLeavesInfoToTempFiles(this);
177 }
178
179 /**
180 * Create a java file using the YANG grouping info.
181 */
182 @Override
183 public void generateCodeExit() {
184 // TODO Auto-generated method stub
185
186 }
187}