/** * Translates to java code corresponding to the YANG schema. * * @param yangFileInfo YANG file information * @param yangPlugin YANG plugin config * @throws IOException when fails to generate java code file the current node */ public static void translateToJava(List<YangFileInfo> yangFileInfo, YangPluginConfig yangPlugin) throws IOException { Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); while (yangFileIterator.hasNext()) { YangFileInfo yangFile = yangFileIterator.next(); generateJavaCode(yangFile.getRootNode(), yangPlugin, yangFile.getYangFileName()); } }
/** * Resolves sub-module linking. * * @param yangFileInfo YANG file information * @throws DataModelException when belongs-to module node is not found */ public static void resolveLinkingForSubModule(List<YangFileInfo> yangFileInfo) throws DataModelException { Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); while (yangFileIterator.hasNext()) { YangFileInfo yangFile = yangFileIterator.next(); YangNode yangNode = yangFile.getRootNode(); if (yangNode instanceof YangSubModule) { String belongsToModuleName = ((YangSubModule) yangNode).getBelongsTo().getBelongsToModuleName(); YangNode moduleNode = findBelongsToModuleNode(yangFileInfo, belongsToModuleName); ((YangSubModule) yangNode).getBelongsTo().setModuleNode(moduleNode); } } }
@Override public void execute() throws MojoExecutionException, MojoFailureException { try { /* * For deleting the generated code in previous build. */ deleteDirectory(getDirectory(baseDir, genFilesDir) + DEFAULT_PKG); deleteDirectory(getDirectory(baseDir, outputDirectory)); String searchDir = getDirectory(baseDir, yangFilesDir); String codeGenDir = getDirectory(baseDir, genFilesDir) + SLASH; YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil(); conflictResolver.setReplacementForPeriod(replacementForPeriod); conflictResolver.setReplacementForHyphen(replacementForHyphen); conflictResolver.setReplacementForUnderscore(replacementForUnderscore); List<YangFileInfo> yangFileInfo = YangFileScanner.getYangFiles(searchDir); if (yangFileInfo == null || yangFileInfo.isEmpty()) { // no files to translate return; } YangPluginConfig yangPlugin = new YangPluginConfig(); yangPlugin.setCodeGenDir(codeGenDir); yangPlugin.setConflictResolver(conflictResolver); Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); while (yangFileIterator.hasNext()) { YangFileInfo yangFile = yangFileIterator.next(); try { YangNode yangNode = yangUtilsParser.getDataModel(yangFile.getYangFileName()); yangFile.setRootNode(yangNode); setRootNode(yangNode); } catch (ParserException e) { String logInfo = "Error in file: " + e.getFileName(); if (e.getLineNumber() != 0) { logInfo = logInfo + " at line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine(); } if (e.getMessage() != null) { logInfo = logInfo + NEW_LINE + e.getMessage(); } getLog().info(logInfo); throw e; } } resolveLinkingForSubModule(yangFileInfo); translateToJava(yangFileInfo, yangPlugin); addToSource(getDirectory(baseDir, genFilesDir) + DEFAULT_PKG, project, context); copyYangFilesToTarget(yangFileInfo, getDirectory(baseDir, outputDirectory), project); } catch (Exception e) { String fileName = ""; if (e instanceof TranslatorException) { fileName = ((TranslatorException) e).getFileName(); } try { translatorErrorHandler(getRootNode()); deleteDirectory(getDirectory(baseDir, genFilesDir) + DEFAULT_PKG); } catch (IOException ex) { throw new MojoExecutionException( "Error handler failed to delete files for data model node."); } throw new MojoExecutionException( "Exception occured due to " + e.getLocalizedMessage() + " in " + fileName + " YANG file."); } }