- private Collection<File> getFilesFromYangRoot() {
- Collection<File> yangFilesLoaded = Util.listFiles(yangFilesRootDir);
- 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>();
-
- try {
- List<File> filesOnCp = Util.getClassPath(project);
- List<String> filter = Lists.newArrayList(".yang");
- for (File file : filesOnCp) {
- ZipFile zip = new ZipFile(file);
- Enumeration<? extends ZipEntry> entries = zip.entries();
-
- while (entries.hasMoreElements()) {
- ZipEntry entry = entries.nextElement();
- String entryName = entry.getName();
- if (entryName.startsWith(INPUT_RESOURCE_DIR)) {
- if (entry.isDirectory()) {
- continue;
- }
- if (!Util.acceptedFilter(entryName, filter)) {
- continue;
- }
- InputStream entryStream = zip.getInputStream(entry);
- String newEntryName = entryName.substring(INPUT_RESOURCE_DIR.length());
- File f = createFileFromStream(entryStream, project.getBasedir().getAbsolutePath() + OUTPUT_RESOURCE_DIR + newEntryName);
- yangFiles.add(f);
-
- resources.add(entryStream);
- }
- }
-
- resources.add(zip);
- }
- } catch (Exception e) {
- getLog().warn("Exception while loading external yang files.", e);
- }
- return yangFiles;
- }
-
- private File createFileFromStream(InputStream is, String absoluteName) throws IOException {
- File f = new File(absoluteName);
- if(!f.exists()) {
- f.getParentFile().mkdirs();
- }
- f.createNewFile();
-
- FileOutputStream fos = new FileOutputStream(f);
- IOUtils.copy(is, fos);
- return f;
- }
-
- /**
- * Instantiate provider from class and call required method
- */
- private void provideResourcesWithOneProvider(Collection<File> yangFiles,
- ResourceProviderArg resourceProvider)
- throws ClassNotFoundException, InstantiationException,
- IllegalAccessException {
-
- resourceProvider.check();
-
- ResourceGenerator g = Util.getInstance(
- resourceProvider.getResourceProviderClass(),
- ResourceGenerator.class);
- getLog().info(
- Util.message("Resource provider instantiated from %s",
- LOG_PREFIX, resourceProvider.getResourceProviderClass()));
-
- g.generateResourceFiles(yangFiles, resourceProvider.getOutputBaseDir());
- getLog().info(
- Util.message("Resource provider %s call successful",
- LOG_PREFIX, resourceProvider.getResourceProviderClass()));
- }
-
- /**
- * Call generate on every generator from plugin configuration
- */
- private void generateSources(SchemaContext context)
- throws MojoFailureException {
- if (codeGenerators.length == 0) {
- getLog().warn(
- Util.message("No code generators provided", LOG_PREFIX));
- return;
- }
-
- Map<String, String> thrown = Maps.newHashMap();
- for (CodeGeneratorArg codeGenerator : codeGenerators) {
- try {
- generateSourcesWithOneGenerator(context, codeGenerator);
- } catch (Exception e) {
- // try other generators, exception will be thrown after
- getLog().error(
- Util.message(
- "Unable to generate sources with %s generator",
- LOG_PREFIX,
- codeGenerator.getCodeGeneratorClass()), e);
- thrown.put(codeGenerator.getCodeGeneratorClass(), e.getClass()
- .getCanonicalName());
- }
- }
-
- if (!thrown.isEmpty()) {
- String message = Util
- .message(
- "One or more code generators failed, including failed list(generatorClass=exception) %s",
- LOG_PREFIX, thrown.toString());
- getLog().error(message);
- throw new MojoFailureException(message);
- }