blob: 33e8f646a9b41592a277e5e144a30d92d9655fbe [file] [log] [blame]
Vinod Kumar S212fcdd2016-02-05 16:15:09 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Vinod Kumar S212fcdd2016-02-05 16:15:09 +05303 *
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 */
16
17package org.onosproject.yangutils.plugin.manager;
18
Bharat saraswalc2d3be12016-06-16 00:29:12 +053019import org.apache.maven.artifact.repository.ArtifactRepository;
Vinod Kumar S212fcdd2016-02-05 16:15:09 +053020import org.apache.maven.plugin.AbstractMojo;
21import org.apache.maven.plugin.MojoExecutionException;
22import org.apache.maven.plugin.MojoFailureException;
Bharat saraswal97459962016-02-20 21:57:16 +053023import org.apache.maven.plugins.annotations.Component;
Vinod Kumar S212fcdd2016-02-05 16:15:09 +053024import org.apache.maven.plugins.annotations.Mojo;
Bharat saraswal97459962016-02-20 21:57:16 +053025import org.apache.maven.plugins.annotations.Parameter;
Bharat saraswalf7907472016-02-11 22:00:49 +053026import org.apache.maven.project.MavenProject;
Bharat saraswal0663aff2016-10-18 23:16:14 +053027import org.apache.maven.rtinfo.RuntimeInformation;
Bharat saraswalf7907472016-02-11 22:00:49 +053028import org.onosproject.yangutils.datamodel.YangNode;
VinodKumarS-Huawei423dc9a2016-08-17 22:08:42 +053029import org.onosproject.yangutils.datamodel.YangReferenceResolver;
30import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +053031import org.onosproject.yangutils.linker.YangLinker;
32import org.onosproject.yangutils.linker.exceptions.LinkerException;
33import org.onosproject.yangutils.linker.impl.YangLinkerManager;
Bharat saraswalf7907472016-02-11 22:00:49 +053034import org.onosproject.yangutils.parser.YangUtilsParser;
35import org.onosproject.yangutils.parser.exceptions.ParserException;
Bharat saraswal97459962016-02-20 21:57:16 +053036import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +053037import org.onosproject.yangutils.tool.CallablePlugin;
38import org.onosproject.yangutils.tool.YangFileInfo;
39import org.onosproject.yangutils.tool.YangToolManager;
40import org.onosproject.yangutils.tool.exception.YangToolException;
Bharat saraswale304c252016-08-16 20:56:20 +053041import org.onosproject.yangutils.utils.io.YangPluginConfig;
42import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
Bharat saraswal97459962016-02-20 21:57:16 +053043import org.sonatype.plexus.build.incremental.BuildContext;
Vinod Kumar S212fcdd2016-02-05 16:15:09 +053044
Bharat saraswale3175d32016-08-31 17:50:11 +053045import java.io.IOException;
Bharat saraswale3175d32016-08-31 17:50:11 +053046import java.util.HashSet;
47import java.util.LinkedList;
48import java.util.List;
49import java.util.Set;
50
Bharat saraswal94844d62016-10-13 13:28:03 +053051import static java.util.Collections.sort;
Bharat saraswale3175d32016-08-31 17:50:11 +053052import static org.apache.maven.plugins.annotations.LifecyclePhase.PROCESS_SOURCES;
Bharat saraswal84366c52016-03-23 19:40:35 +053053import static org.apache.maven.plugins.annotations.ResolutionScope.COMPILE;
VinodKumarS-Huawei423dc9a2016-08-17 22:08:42 +053054import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
55import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IDENTITYREF;
56import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.resolveGroupingInDefinationScope;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053057import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.addToCompilationRoot;
58import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.copyYangFilesToTarget;
59import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.resolveInterJarDependencies;
60import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.serializeDataModel;
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +053061import static org.onosproject.yangutils.tool.YangToolManager.DEFAULT_JAR_RES_PATH;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053062import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
Bharat saraswal84366c52016-03-23 19:40:35 +053063import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_BASE_PKG;
Bharat saraswal94844d62016-10-13 13:28:03 +053064import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
65import static org.onosproject.yangutils.utils.UtilConstants.IN;
Bharat saraswal84366c52016-03-23 19:40:35 +053066import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
67import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Bharat saraswale3175d32016-08-31 17:50:11 +053068import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
Bharat saraswal0663aff2016-10-18 23:16:14 +053069import static org.onosproject.yangutils.utils.UtilConstants.VERSION_ERROR;
Bharat saraswale3175d32016-08-31 17:50:11 +053070import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES;
Bharat saraswal5dafddb2016-11-22 20:11:58 +053071import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getYangFiles;
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +053072import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053073import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053074import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Bharat saraswal0663aff2016-10-18 23:16:14 +053075import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getVersionValue;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053076
Vinod Kumar S212fcdd2016-02-05 16:15:09 +053077/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053078 * Represents ONOS YANG utility maven plugin.
Bharat saraswal2f1077d2016-04-19 19:50:32 +053079 * Goal of plugin is yang2java.
80 * Execution phase is generate-sources.
81 * requiresDependencyResolution at compile time.
Bharat saraswalf7907472016-02-11 22:00:49 +053082 */
Bharat saraswal94844d62016-10-13 13:28:03 +053083@Mojo(name = "yang2java", defaultPhase = PROCESS_SOURCES,
84 requiresDependencyResolution = COMPILE)
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +053085public class YangUtilManager extends AbstractMojo implements CallablePlugin {
Vinod Kumar S212fcdd2016-02-05 16:15:09 +053086
Bharat saraswal94844d62016-10-13 13:28:03 +053087 private static final String DEFAULT_PKG =
88 getPackageDirPathFromJavaJPackage(DEFAULT_BASE_PKG);
Bharat saraswal0663aff2016-10-18 23:16:14 +053089 private static final int SUPPORTED_VERSION = 339;
90 private final YangPluginConfig yangPlugin = new YangPluginConfig();
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +053091 private YangNode rootNode;
92 // YANG file information set.
93 private Set<YangFileInfo> yangFileInfoSet = new HashSet<>();
Bharat saraswal0663aff2016-10-18 23:16:14 +053094 private final YangUtilsParser yangUtilsParser = new YangUtilsParserManager();
95 private final YangLinker yangLinker = new YangLinkerManager();
Bharat saraswal715d3fc2016-05-17 19:59:16 +053096 private YangFileInfo curYangFileInfo = new YangFileInfo();
Bharat saraswal0663aff2016-10-18 23:16:14 +053097 private final Set<YangNode> yangNodeSet = new HashSet<>();
Bharat saraswale3175d32016-08-31 17:50:11 +053098
Bharat saraswalf7907472016-02-11 22:00:49 +053099 /**
100 * Source directory for YANG files.
101 */
102 @Parameter(property = "yangFilesDir", defaultValue = "src/main/yang")
103 private String yangFilesDir;
104
105 /**
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530106 * Source directory for generated files.
107 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530108 @Parameter(property = "classFileDir", defaultValue = "target/generated-sources")
109 private String classFileDir;
110
111 /**
Bharat saraswal022dae92016-03-04 20:08:09 +0530112 * Base directory for project.
113 */
114 @Parameter(property = "basedir", defaultValue = "${basedir}")
115 private String baseDir;
116
117 /**
Bharat saraswalf7907472016-02-11 22:00:49 +0530118 * Output directory.
119 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530120 @Parameter(property = "project.build.outputDirectory", required = true,
121 defaultValue = "target/classes")
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530122 private String outputDirectory;
Bharat saraswalf7907472016-02-11 22:00:49 +0530123
124 /**
125 * Current maven project.
126 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530127 @Parameter(property = "project", required = true, readonly = true,
128 defaultValue = "${project}")
Bharat saraswalf7907472016-02-11 22:00:49 +0530129 private MavenProject project;
130
131 /**
janani b1c6acc42016-04-15 16:18:30 +0530132 * Replacement required for period special character in the identifier.
133 */
134 @Parameter(property = "replacementForPeriod")
135 private String replacementForPeriod;
136
137 /**
138 * Replacement required for underscore special character in the identifier.
139 */
140 @Parameter(property = "replacementForUnderscore")
141 private String replacementForUnderscore;
142
143 /**
144 * Replacement required for hyphen special character in the identifier.
145 */
146 @Parameter(property = "replacementForHyphen")
147 private String replacementForHyphen;
148
149 /**
janani b3e357f62016-05-19 17:39:50 +0530150 * Prefix which is required for adding with the identifier.
151 */
152 @Parameter(property = "prefixForIdentifier")
153 private String prefixForIdentifier;
154
155 /**
Bharat saraswalf7907472016-02-11 22:00:49 +0530156 * Build context.
157 */
158 @Component
159 private BuildContext context;
160
Bharat saraswal039f59c2016-07-14 21:57:13 +0530161 /**
162 * Local maven repository.
163 */
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530164 @Parameter(readonly = true, defaultValue = "${localRepository}")
165 private ArtifactRepository localRepository;
166
Bharat saraswal039f59c2016-07-14 21:57:13 +0530167 /**
168 * Remote maven repositories.
169 */
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530170 @Parameter(readonly = true, defaultValue = "${project.remoteArtifactRepositories}")
171 private List<ArtifactRepository> remoteRepository;
172
Shankara-Huaweia1039e52016-07-14 16:53:09 +0530173 /**
174 * Code generation is for nbi or sbi.
175 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530176 @Parameter(property = "generateJavaFileForSbi", defaultValue = "nbi")
177 private String generateJavaFileForSbi;
Shankara-Huaweia1039e52016-07-14 16:53:09 +0530178
Bharat saraswal0663aff2016-10-18 23:16:14 +0530179 /**
180 * The Runtime information for the current instance of Maven.
181 */
182 @Component
183 private RuntimeInformation runtime;
184
185 /**
186 * The name of the property in which to store the version of Maven.
187 */
188 @Parameter(defaultValue = "maven.version")
189 private String versionProperty;
190
Bharat saraswal94844d62016-10-13 13:28:03 +0530191 private String outputDir;
192 private String codeGenDir;
193
Vinod Kumar S212fcdd2016-02-05 16:15:09 +0530194 @Override
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530195 public void execute()
196 throws MojoExecutionException, MojoFailureException {
Bharat saraswalf7907472016-02-11 22:00:49 +0530197
198 try {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530199 validateMavenVersion();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530200 /*
Bharat saraswal97459962016-02-20 21:57:16 +0530201 * For deleting the generated code in previous build.
202 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530203 outputDir = getDirectory(baseDir, outputDirectory);
204 deleteDirectory(outputDir + SLASH + TEMP);
205 deleteDirectory(outputDir + SLASH + YANG_RESOURCES);
Vidyashree Rama13960652016-04-26 15:06:06 +0530206 String searchDir = getDirectory(baseDir, yangFilesDir);
Bharat saraswal94844d62016-10-13 13:28:03 +0530207 codeGenDir = getDirectory(baseDir, classFileDir) + SLASH;
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530208
209 // Creates conflict resolver and set values to it.
janani b1c6acc42016-04-15 16:18:30 +0530210 YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil();
211 conflictResolver.setReplacementForPeriod(replacementForPeriod);
212 conflictResolver.setReplacementForHyphen(replacementForHyphen);
Vidyashree Rama13960652016-04-26 15:06:06 +0530213 conflictResolver.setReplacementForUnderscore(replacementForUnderscore);
janani b3e357f62016-05-19 17:39:50 +0530214 conflictResolver.setPrefixForIdentifier(prefixForIdentifier);
janani b1c6acc42016-04-15 16:18:30 +0530215 yangPlugin.setCodeGenDir(codeGenDir);
216 yangPlugin.setConflictResolver(conflictResolver);
Vidyashree Ramab6248172016-05-17 16:16:15 +0530217
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530218 yangPlugin.resourceGenDir(outputDir + DEFAULT_JAR_RES_PATH);
Bharat saraswale50edca2016-08-05 01:58:25 +0530219 yangPlugin.setCodeGenerateForSbi(generateJavaFileForSbi.toLowerCase());
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530220
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530221 /*
222 * Obtain the YANG files at a path mentioned in plugin and creates
223 * YANG file information set.
224 */
Bharat saraswal97459962016-02-20 21:57:16 +0530225
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530226 YangToolManager toolManager = new YangToolManager();
Bharat saraswal5dafddb2016-11-22 20:11:58 +0530227
228 yangFileInfoSet = toolManager.createYangFileInfoSet(
229 getYangFiles(searchDir));
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530230 List<YangNode> interJarResolvedNodes =
231 resolveInterJarDependencies(project, localRepository,
232 remoteRepository, outputDir);
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530233 toolManager.compileYangFiles(yangFileInfoSet,
234 interJarResolvedNodes, yangPlugin,
235 this);
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530236 } catch (YangToolException e) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530237 String fileName = EMPTY_STRING;
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530238 if (e.getCurYangFile() != null) {
239 fileName = e.getCurYangFile().getYangFileName();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530240 }
Bharat saraswal780eca32016-04-05 12:45:45 +0530241 try {
Bharat saraswal94844d62016-10-13 13:28:03 +0530242 deleteDirectory(codeGenDir + DEFAULT_PKG);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530243 } catch (IOException ex) {
Gaurav Agrawald39a9212016-08-20 18:51:20 +0530244 e.printStackTrace();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530245 throw new MojoExecutionException(
246 "Error handler failed to delete files for data model node.");
Bharat saraswal780eca32016-04-05 12:45:45 +0530247 }
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530248 getLog().info(e.getCause());
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530249 throw new MojoExecutionException(
Bharat saraswal94844d62016-10-13 13:28:03 +0530250 "Exception occurred due to " + e.getLocalizedMessage() +
251 IN + fileName + " YANG file.");
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530252 } catch (IOException e) {
253 throw new MojoExecutionException(
254 "Failed to process files");
Bharat saraswalf7907472016-02-11 22:00:49 +0530255 }
Vinod Kumar S212fcdd2016-02-05 16:15:09 +0530256 }
Bharat saraswal780eca32016-04-05 12:45:45 +0530257
258 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +0530259 * Validates current maven version of system.
260 *
261 * @throws MojoExecutionException when maven version is below 3.3.9
262 */
263 private void validateMavenVersion() throws MojoExecutionException {
264 String version = runtime.getMavenVersion();
265 if (getVersionValue(version) < SUPPORTED_VERSION) {
266 throw new MojoExecutionException(VERSION_ERROR + version);
267 }
268 }
269
270 /**
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530271 * Returns the YANG node set.
272 *
273 * @return YANG node set
274 */
Bharat saraswalb41904b2016-10-20 19:22:36 +0530275 public Set<YangNode> getYangNodeSet() {
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530276 return yangNodeSet;
277 }
278
279 /**
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530280 * TODO: Delete me and use the tool code for UT test cases
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530281 * Links all the provided with the YANG file info set.
Bharat saraswal780eca32016-04-05 12:45:45 +0530282 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530283 * @throws MojoExecutionException a violation in mojo execution
Bharat saraswal780eca32016-04-05 12:45:45 +0530284 */
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530285 public void resolveDependenciesUsingLinker()
286 throws MojoExecutionException {
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530287 createYangNodeSet();
Bharat saraswald14cbe82016-07-14 13:26:18 +0530288 try {
Bharat saraswal94844d62016-10-13 13:28:03 +0530289 yangLinker.resolveDependencies(yangNodeSet);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530290 } catch (LinkerException e) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530291 printLog(e.getFileName(), e.getLineNumber(), e.getCharPositionInLine(),
292 e.getMessage(), e.getLocalizedMessage());
Bharat saraswald14cbe82016-07-14 13:26:18 +0530293 throw new MojoExecutionException(e.getMessage());
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530294 }
Bharat saraswal780eca32016-04-05 12:45:45 +0530295 }
296
297 /**
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530298 * TODO: Delete me and use the tool code for UT test cases
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530299 * Creates YANG nodes set.
300 */
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530301 protected void createYangNodeSet() {
Bharat saraswal94844d62016-10-13 13:28:03 +0530302 for (YangFileInfo yangFileInfo : yangFileInfoSet) {
303 yangNodeSet.add(yangFileInfo.getRootNode());
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530304 }
305 }
306
307 /**
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530308 * TODO: Delete me and use the tool code for UT test cases
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530309 * Parses all the provided YANG files and generates YANG data model tree.
Bharat saraswal780eca32016-04-05 12:45:45 +0530310 *
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530311 * @throws IOException a violation in IO
Bharat saraswal780eca32016-04-05 12:45:45 +0530312 */
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530313 public void parseYangFileInfoSet()
314 throws IOException {
Bharat saraswal94844d62016-10-13 13:28:03 +0530315 for (YangFileInfo yangFileInfo : yangFileInfoSet) {
316 curYangFileInfo = yangFileInfo;
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530317 if (yangFileInfo.isForTranslator()) {
318 try {
Bharat saraswal94844d62016-10-13 13:28:03 +0530319 YangNode yangNode = yangUtilsParser.getDataModel(
320 yangFileInfo.getYangFileName());
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530321 yangFileInfo.setRootNode(yangNode);
Bharat saraswal94844d62016-10-13 13:28:03 +0530322 rootNode = yangNode;
VinodKumarS-Huawei423dc9a2016-08-17 22:08:42 +0530323 resolveGroupingInDefinationScope((YangReferenceResolver) yangNode);
324 try {
Bharat saraswal94844d62016-10-13 13:28:03 +0530325 ((YangReferenceResolver) yangNode)
326 .resolveSelfFileLinking(YANG_DERIVED_DATA_TYPE);
327 ((YangReferenceResolver) yangNode)
328 .resolveSelfFileLinking(YANG_IDENTITYREF);
VinodKumarS-Huawei423dc9a2016-08-17 22:08:42 +0530329 } catch (DataModelException e) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530330 printLog(e.getFileName(), e.getLineNumber(), e
331 .getCharPositionInLine(), e.getMessage(), e
332 .getLocalizedMessage());
VinodKumarS-Huawei423dc9a2016-08-17 22:08:42 +0530333 }
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530334 } catch (ParserException e) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530335 printLog(e.getFileName(), e.getLineNumber(), e
336 .getCharPositionInLine(), e.getMessage(), e
337 .getLocalizedMessage());
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530338 throw e;
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530339 }
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530340 }
341 }
Bharat saraswal780eca32016-04-05 12:45:45 +0530342 }
343
344 /**
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530345 * TODO: Delete me and use the tool code for UT test cases
Vidyashree Ramab6248172016-05-17 16:16:15 +0530346 * Translates to java code corresponding to the YANG schema.
347 *
Bharat saraswal039f59c2016-07-14 21:57:13 +0530348 * @param yangPlugin YANG plugin config
349 * @throws IOException when fails to generate java code file the current node
Vidyashree Ramab6248172016-05-17 16:16:15 +0530350 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530351 public void translateToJava(YangPluginConfig yangPlugin)
Vidyashree Ramab6248172016-05-17 16:16:15 +0530352 throws IOException {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530353 List<YangNode> yangNodeSortedList = new LinkedList<>();
Bharat saraswal94844d62016-10-13 13:28:03 +0530354 yangNodeSortedList.addAll(yangNodeSet);
355 sort(yangNodeSortedList);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530356 for (YangNode node : yangNodeSortedList) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530357 if (node.isToTranslate()) {
358 generateJavaCode(node, yangPlugin);
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530359 }
Vidyashree Ramab6248172016-05-17 16:16:15 +0530360 }
361 }
362
363 /**
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530364 * Creates a YANG file info set.
Vidyashree Ramab6248172016-05-17 16:16:15 +0530365 *
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530366 * @param yangFileList YANG files list
Vidyashree Ramab6248172016-05-17 16:16:15 +0530367 */
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530368 public void createYangFileInfoSet(List<String> yangFileList) {
369 for (String yangFile : yangFileList) {
370 YangFileInfo yangFileInfo = new YangFileInfo();
371 yangFileInfo.setYangFileName(yangFile);
Bharat saraswal94844d62016-10-13 13:28:03 +0530372 yangFileInfoSet.add(yangFileInfo);
Vidyashree Ramab6248172016-05-17 16:16:15 +0530373 }
374 }
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530375
376 /**
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530377 * TODO: Delete me and use the tool code for UT test cases
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530378 * Returns the YANG file info set.
379 *
380 * @return the YANG file info set
381 */
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530382 public Set<YangFileInfo> getYangFileInfoSet() {
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530383 return yangFileInfoSet;
384 }
385
386 /**
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530387 * TODO: Delete me and use the tool code for UT test cases
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530388 * Sets the YANG file info set.
389 *
390 * @param yangFileInfoSet the YANG file info set
391 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530392 void setYangFileInfoSet(Set<YangFileInfo> yangFileInfoSet) {
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530393 this.yangFileInfoSet = yangFileInfoSet;
394 }
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530395
396 /**
Bharat saraswal94844d62016-10-13 13:28:03 +0530397 * Adds log info for exception.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530398 *
Bharat saraswal94844d62016-10-13 13:28:03 +0530399 * @param fileName file name
400 * @param line line number
401 * @param position character position
402 * @param msg error message
403 * @param localMsg local message
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530404 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530405 private void printLog(String fileName, int line, int position, String
406 msg, String localMsg) {
407 String logInfo = "Error in file: " + fileName;
408 if (line != 0) {
409 logInfo = logInfo + " at line: " + line + " at position: "
410 + position;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530411
Bharat saraswal94844d62016-10-13 13:28:03 +0530412 }
413 if (msg != null) {
414 logInfo = logInfo + NEW_LINE + localMsg;
415 }
416 getLog().info(logInfo);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530417 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530418
VinodKumarS-Huawei618fdfa2016-11-14 11:50:48 +0530419 @Override
420 public void addGeneratedCodeToBundle() {
421 addToCompilationRoot(codeGenDir, project, context);
422 }
423
424
425 @Override
426 public void addCompiledSchemaToBundle() throws IOException {
427 serializeDataModel(outputDir, project, true);
428 }
429
430 @Override
431 public void addYangFilesToBundle() throws IOException {
432 copyYangFilesToTarget(outputDir, project);
433 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530434}