Yang-maven-plugin refactored and config attributes and spi adjusted.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / maven-yang-plugin / src / main / java / org / opendaylight / controller / yang2sources / plugin / ConfigArg.java
index 85f2d8905dd51e48e648a495c85dc8f8d93afaf1..0df9a6345ee9384b316f3d71093fa19a9796a658 100644 (file)
@@ -8,84 +8,87 @@
 package org.opendaylight.controller.yang2sources.plugin;
 
 import java.io.File;
+import java.util.Map;
+
+import org.apache.maven.project.MavenProject;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
 
 /**
  * Base complex configuration arguments
  */
 public abstract class ConfigArg {
 
-    protected File outputBaseDir;
-
-    public ConfigArg(File outputBaseDir) {
-        this.outputBaseDir = outputBaseDir;
-    }
+    private final File outputBaseDir;
 
-    public ConfigArg() {
+    public ConfigArg(String outputBaseDir) {
+        this.outputBaseDir = new File(outputBaseDir);
     }
 
-    public File getOutputBaseDir() {
-        return outputBaseDir;
+    public File getOutputBaseDir(MavenProject project) {
+        if (outputBaseDir.isAbsolute()) {
+            return outputBaseDir;
+        } else {
+            return new File(project.getBasedir(), outputBaseDir.getPath());
+        }
     }
 
     public abstract void check();
 
     /**
-     * Configuration argument for resource generator class and output directory.
+     * Configuration argument for code generator class and output directory.
      */
-    public static final class ResourceProviderArg extends ConfigArg {
-        private String resourceProviderClass;
-
-        public ResourceProviderArg() {
-        }
+    public static final class CodeGeneratorArg extends ConfigArg {
+        private static final String CODE_GEN_DEFAULT_DIR = "target"
+                + File.separator + "generated-sources";
+        private static final String CODE_GEN_DEFAULT_RESOURCE_DIR = "target"
+                + File.separator + "generated-resources";
+        private String codeGeneratorClass;
+        private File resourceBaseDir = new File(CODE_GEN_DEFAULT_RESOURCE_DIR);
 
-        public ResourceProviderArg(String resourceProviderClass,
-                File outputBaseDir) {
-            super(outputBaseDir);
-            this.resourceProviderClass = resourceProviderClass;
-        }
+        private Map<String, String> additionalConfiguration = Maps.newHashMap();
 
-        @Override
-        public void check() {
-            Preconditions
-                    .checkNotNull(resourceProviderClass,
-                            "resourceProviderClass for ResourceProvider cannot be null");
-            Preconditions.checkNotNull(outputBaseDir,
-                    "outputBaseDir for ResourceProvider cannot be null, "
-                            + resourceProviderClass);
+        public CodeGeneratorArg() {
+            super(CODE_GEN_DEFAULT_DIR);
         }
 
-        public String getResourceProviderClass() {
-            return resourceProviderClass;
+        public CodeGeneratorArg(String codeGeneratorClass) {
+            this(codeGeneratorClass, CODE_GEN_DEFAULT_DIR);
         }
-    }
-
-    /**
-     * Configuration argument for code generator class and output directory.
-     */
-    public static final class CodeGeneratorArg extends ConfigArg {
-        private String codeGeneratorClass;
 
-        public CodeGeneratorArg() {
+        public CodeGeneratorArg(String codeGeneratorClass, String outputBaseDir) {
+            super(outputBaseDir);
+            this.codeGeneratorClass = codeGeneratorClass;
         }
 
-        public CodeGeneratorArg(String codeGeneratorClass, File outputBaseDir) {
+        public CodeGeneratorArg(String codeGeneratorClass,
+                String outputBaseDir, String resourceBaseDir) {
             super(outputBaseDir);
             this.codeGeneratorClass = codeGeneratorClass;
+            this.resourceBaseDir = new File(resourceBaseDir);
         }
 
         @Override
         public void check() {
             Preconditions.checkNotNull(codeGeneratorClass,
                     "codeGeneratorClass for CodeGenerator cannot be null");
-            Preconditions.checkNotNull(outputBaseDir,
-                    "outputBaseDir for CodeGenerator cannot be null, "
-                            + codeGeneratorClass);
         }
 
         public String getCodeGeneratorClass() {
             return codeGeneratorClass;
         }
+
+        public File getResourceBaseDir(MavenProject project) {
+            if (resourceBaseDir.isAbsolute()) {
+                return resourceBaseDir;
+            } else {
+                return new File(project.getBasedir(), resourceBaseDir.getPath());
+            }
+        }
+
+        public Map<String, String> getAdditionalConfiguration() {
+            return additionalConfiguration;
+        }
     }
-}
\ No newline at end of file
+}