Expanded UnknownSchemaNode implementation, refactored java source code generation.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / maven-yang-plugin / src / main / java / org / opendaylight / controller / yang2sources / plugin / YangToSourcesMojo.java
index 32ad2abb104c65a9cfe78aec8acb4bb310796961..41f3ae4a65a5f45e2e64f87b6a4ba9cddaf14c3c 100644 (file)
@@ -8,7 +8,8 @@
 package org.opendaylight.controller.yang2sources.plugin;
 
 import java.io.File;
-import java.util.Arrays;
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
@@ -19,6 +20,8 @@ import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.project.MavenProject;
 import org.opendaylight.controller.yang.model.api.Module;
 import org.opendaylight.controller.yang.model.api.SchemaContext;
 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;
@@ -42,7 +45,7 @@ import com.google.common.collect.Maps;
  * </ol>
  * </ol>
  */
-@Mojo(name = "generate-sources", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
+@Mojo(name = "generate-sources", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresDependencyResolution = ResolutionScope.COMPILE, requiresProject = true)
 public final class YangToSourcesMojo extends AbstractMojo {
 
     private static final String LOG_PREFIX = "yang-to-sources:";
@@ -63,7 +66,10 @@ public final class YangToSourcesMojo extends AbstractMojo {
     @Parameter(required = true)
     private String yangFilesRootDir;
 
-    private final YangModelParser parser;
+    @Parameter(property = "project", required = true, readonly = true)
+    protected MavenProject project;
+
+    private transient final YangModelParser parser;
 
     @VisibleForTesting
     YangToSourcesMojo(CodeGeneratorArg[] codeGeneratorArgs,
@@ -90,20 +96,22 @@ public final class YangToSourcesMojo extends AbstractMojo {
      */
     private SchemaContext processYang() throws MojoExecutionException {
         try {
-            String[] yangFiles = Util.listFilesAsArrayOfPaths(yangFilesRootDir);
+            Collection<File> yangFiles = Util.listFiles(yangFilesRootDir);
 
-            if (yangFiles.length == 0)
+            if (yangFiles.isEmpty()) {
                 getLog().warn(
                         Util.message("No %s file found in %s", LOG_PREFIX,
                                 Util.YANG_SUFFIX, yangFilesRootDir));
-            // TODO only warning or throw exception ?
+                return null;
+            }
 
-            Set<Module> parsedYang = parser.parseYangModels(yangFiles);
+            Set<Module> parsedYang = parser
+                    .parseYangModels(new ArrayList<File>(yangFiles));
             SchemaContext resolveSchemaContext = parser
                     .resolveSchemaContext(parsedYang);
             getLog().info(
                     Util.message("%s files parsed from %s", LOG_PREFIX,
-                            Util.YANG_SUFFIX, Arrays.toString(yangFiles)));
+                            Util.YANG_SUFFIX, yangFiles));
             return resolveSchemaContext;
 
             // MojoExecutionException is thrown since execution cannot continue
@@ -159,22 +167,25 @@ public final class YangToSourcesMojo extends AbstractMojo {
      * Instantiate generator from class and call required method
      */
     private void generateSourcesWithOneGenerator(SchemaContext context,
-            CodeGeneratorArg codeGenerator) throws ClassNotFoundException,
-            InstantiationException, IllegalAccessException {
+            CodeGeneratorArg codeGeneratorCfg) throws ClassNotFoundException,
+            InstantiationException, IllegalAccessException, IOException {
 
-        codeGenerator.check();
+        codeGeneratorCfg.check();
 
         CodeGenerator g = Util.getInstance(
-                codeGenerator.getCodeGeneratorClass(), CodeGenerator.class);
+                codeGeneratorCfg.getCodeGeneratorClass(), CodeGenerator.class);
         getLog().info(
                 Util.message("Code generator instantiated from %s", LOG_PREFIX,
-                        codeGenerator.getCodeGeneratorClass()));
+                        codeGeneratorCfg.getCodeGeneratorClass()));
 
-        Collection<File> generated = g.generateSources(context,
-                codeGenerator.getOutputBaseDir());
+        File outputDir = codeGeneratorCfg.getOutputBaseDir();
+        if (project != null && outputDir != null) {
+            project.addCompileSourceRoot(outputDir.getPath());
+        }
+        Collection<File> generated = g.generateSources(context, outputDir);
         getLog().info(
                 Util.message("Sources generated by %s: %s", LOG_PREFIX,
-                        codeGenerator.getCodeGeneratorClass(), generated));
+                        codeGeneratorCfg.getCodeGeneratorClass(), generated));
     }
 
 }