Added Maven plugin for generation SAL APIs from YANG
[controller.git] / opendaylight / sal / yang-prototype / code-generator / maven-yang-plugin / src / main / java / org / opendaylight / controller / yang2sources / plugin / YangToSourcesMojo.java
index 18e7b4cca74c67e5653809e86be6b767a82d86de..e124c56c47f8c7ddae2163f2c584af370f2fa8ae 100644 (file)
@@ -19,6 +19,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 +44,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 +65,12 @@ 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,
@@ -160,22 +167,24 @@ public final class YangToSourcesMojo extends AbstractMojo {
      * Instantiate generator from class and call required method
      */
     private void generateSourcesWithOneGenerator(SchemaContext context,
-            CodeGeneratorArg codeGenerator) throws ClassNotFoundException,
+            CodeGeneratorArg codeGeneratorCfg) throws ClassNotFoundException,
             InstantiationException, IllegalAccessException {
 
-        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()));
 
+        File outputDir = codeGeneratorCfg.getOutputBaseDir();
+        project.addCompileSourceRoot(outputDir.getPath());
         Collection<File> generated = g.generateSources(context,
-                codeGenerator.getOutputBaseDir());
+                outputDir);
         getLog().info(
                 Util.message("Sources generated by %s: %s", LOG_PREFIX,
-                        codeGenerator.getCodeGeneratorClass(), generated));
+                        codeGeneratorCfg.getCodeGeneratorClass(), generated));
     }
 
 }