[ONOS-3875] Implementation of maven plugin.

Change-Id: Id2930fec97037dc238a35fea0b118e6a00300f8e
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
index 3385e2d..19d9f3b 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
@@ -17,6 +17,9 @@
 package org.onosproject.yangutils.parser;
 
 import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+
+import java.io.IOException;
 
 /**
  * Abstraction of entity which provides parser service of YANG files for yangutils-maven-plugin.
@@ -28,6 +31,7 @@
      *
      * @param file input YANG file
      * @return YangNode root node of the data model tree
+     * @throws ParserException when fails to get the data model
      */
-    YangNode getDataModel(String file);
+    YangNode getDataModel(String file) throws IOException, ParserException;
 }
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
index cc0c225..b8c9f35 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
@@ -16,25 +16,94 @@
 
 package org.onosproject.yangutils.plugin.manager;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 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.ResolutionScope;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.Component;
+import org.sonatype.plexus.build.incremental.BuildContext;
+
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.parser.YangUtilsParser;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
 
 /**
-* ONOS YANG utility maven plugin.
-* Goal of plugin is yang2java
-* Execution phase in generate-sources
-* requiresDependencyResolution at compile time
-*/
+ * ONOS YANG utility maven plugin.
+ * Goal of plugin is yang2java
+ * Execution phase in generate-sources
+ * requiresDependencyResolution at compile time
+ */
 @Mojo(name = "yang2java", defaultPhase = LifecyclePhase.GENERATE_SOURCES,
-        requiresDependencyResolution = ResolutionScope.COMPILE, requiresProject = true)
+requiresDependencyResolution = ResolutionScope.COMPILE, requiresProject = true)
 public class YangUtilManager extends AbstractMojo {
 
+    /**
+     * Source directory for YANG files.
+     */
+    @Parameter(property = "yangFilesDir", defaultValue = "src/main/yang")
+    private String yangFilesDir;
+
+    /**
+     * Output directory.
+     */
+    @Parameter(property = "project.build.outputDirectory", required = true, defaultValue = "target/classes")
+    private File outputDirectory;
+
+    /**
+     * Current maven project.
+     */
+    @Parameter(property = "project", required = true, readonly = true, defaultValue = "${project}")
+    private MavenProject project;
+
+    /**
+     * Build context.
+     */
+    @Component
+    private BuildContext context;
+
+    private YangUtilsParser yangUtilsParser;
+    private String baseDir;
+    private String searchDir;
+
+    /**
+     * Set current project.
+     *
+     * @param project maven project.
+     */
+    public void setCurrentProject(final MavenProject project) {
+        this.project = project;
+    }
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-        //TODO: implement the MOJO plugin
+
+        try {
+            baseDir = project.getBasedir().toString();
+            searchDir = baseDir + File.separator + yangFilesDir;
+
+            List<String> yangFiles = YangFileScanner.getYangFiles(searchDir);
+            Iterator<String> yangFileIterator = yangFiles.iterator();
+            while (yangFileIterator.hasNext()) {
+                String yangFile = yangFileIterator.next();
+                try {
+                    YangNode yangNode = yangUtilsParser.getDataModel(yangFile);
+                    //TODO: send this data model to translator and create the corresponding java files.
+                } catch (ParserException e) {
+                    getLog().info("Invalid yang file.");
+                }
+            }
+        } catch (final IOException e) {
+            getLog().info("Exception occured");
+        }
     }
-}
+}
\ No newline at end of file