- super();
- parser = new YangParserImpl();
- }
-
- @Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- SchemaContext context = processYang();
- generateSources(context);
- generateResources();
-
- closeResources();
- }
-
- /**
- * Generate {@link SchemaContext} with {@link YangModelParserImpl}
- */
- private SchemaContext processYang() throws MojoExecutionException {
- try {
- Collection<InputStream> yangFiles = Util
- .listFilesAsStream(yangFilesRootDir);
- yangFiles.addAll(getFilesFromDependenciesAsStream());
-
- if (yangFiles.isEmpty()) {
- getLog().warn(
- Util.message(
- "No %s file found in %s or in dependencies",
- LOG_PREFIX, Util.YANG_SUFFIX, yangFilesRootDir));
- return null;
- }
-
- Set<Module> parsedYang = parser
- .parseYangModelsFromStreams(new ArrayList<InputStream>(
- yangFiles));
- SchemaContext resolveSchemaContext = parser
- .resolveSchemaContext(parsedYang);
- getLog().info(
- Util.message("%s files parsed from %s", LOG_PREFIX,
- Util.YANG_SUFFIX, yangFiles));
- return resolveSchemaContext;
-
- // MojoExecutionException is thrown since execution cannot continue
- } catch (Exception e) {
- String message = Util.message("Unable to parse %s files from %s",
- LOG_PREFIX, Util.YANG_SUFFIX, yangFilesRootDir);
- getLog().error(message, e);
- throw new MojoExecutionException(message, e);
- }
- }
-
- private void generateResources() throws MojoExecutionException,
- MojoFailureException {
- if (resourceProviders.length == 0) {
- getLog().warn(
- Util.message("No resource provider classes provided",
- LOG_PREFIX));
- return;
- }
-
- Resource res = new Resource();
- String baseDirName = project.getBasedir().getAbsolutePath();
- res.setDirectory(baseDirName + OUTPUT_RESOURCE_DIR);
- res.setTargetPath(INPUT_RESOURCE_DIR);
- project.addResource(res);
-
- Map<String, String> thrown = Maps.newHashMap();
-
- Collection<File> yangFiles = new ArrayList<File>();
-
- // load files from yang root
- yangFiles.addAll(getFilesFromYangRoot());
-
- // load files from dependencies
- Collection<File> filesFromDependencies = getFilesFromDependencies();
- yangFiles.addAll(filesFromDependencies);
-
- for (ResourceProviderArg resourceProvider : resourceProviders) {
- try {
- provideResourcesWithOneProvider(yangFiles, resourceProvider);
- } catch (Exception e) {
- // try other generators, exception will be thrown after
- getLog().error(
- Util.message(
- "Unable to provide resources with %s resource provider",
- LOG_PREFIX,
- resourceProvider.getResourceProviderClass()), e);
- thrown.put(resourceProvider.getResourceProviderClass(), e
- .getClass().getCanonicalName());
- }
- }
-
- if (!thrown.isEmpty()) {
- String message = Util
- .message(
- "One or more code resource provider failed, including failed list(resourceProviderClass=exception) %s",
- LOG_PREFIX, thrown.toString());
- getLog().error(message);
- throw new MojoFailureException(message);
- }
- }
-
- private Collection<File> getFilesFromYangRoot() {
- Collection<File> yangFilesLoaded = null;
-
- File rootDir = new File(yangFilesRootDir);
- try {
- if (rootDir.isAbsolute()) {
- yangFilesLoaded = Util.listFiles(yangFilesRootDir);
- } else {
- String path = project.getBasedir().getAbsolutePath()
- + File.separator + yangFilesRootDir;
- yangFilesLoaded = Util.listFiles(path);
- }
- } catch (FileNotFoundException e) {
- getLog().warn(
- "yangFilesRootDir[" + rootDir.getAbsolutePath()
- + "] does not exists.");
- yangFilesLoaded = new ArrayList<File>();
- }
-
- Collection<File> yangFiles = new ArrayList<File>(yangFilesLoaded);
-
- try {
- for (File yangFile : yangFilesLoaded) {
- InputStream is = new FileInputStream(yangFile);
- yangFiles.add(createFileFromStream(is,
- project.getBasedir().getAbsolutePath()
- + OUTPUT_RESOURCE_DIR + yangFile.getName()));
- resources.add(is);
- }
- } catch (IOException e) {
- getLog().warn("Exception while loading yang files.", e);
- }
- return yangFiles;
- }
-
- private Collection<File> getFilesFromDependencies() {
- Collection<File> yangFiles = new ArrayList<File>();