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
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.yang2sources.plugin;
9
10 import java.io.File;
11 import java.util.Map;
12
13 import org.apache.maven.project.MavenProject;
14
15 import com.google.common.base.Preconditions;
16 import com.google.common.collect.Maps;
17
18 /**
19  * Base complex configuration arguments
20  */
21 public abstract class ConfigArg {
22
23     private final File outputBaseDir;
24
25     public ConfigArg(String outputBaseDir) {
26         this.outputBaseDir = new File(outputBaseDir);
27     }
28
29     public File getOutputBaseDir(MavenProject project) {
30         if (outputBaseDir.isAbsolute()) {
31             return outputBaseDir;
32         } else {
33             return new File(project.getBasedir(), outputBaseDir.getPath());
34         }
35     }
36
37     public abstract void check();
38
39     /**
40      * Configuration argument for code generator class and output directory.
41      */
42     public static final class CodeGeneratorArg extends ConfigArg {
43         private static final String CODE_GEN_DEFAULT_DIR = "target"
44                 + File.separator + "generated-sources";
45         private static final String CODE_GEN_DEFAULT_RESOURCE_DIR = "target"
46                 + File.separator + "generated-resources";
47         private String codeGeneratorClass;
48         private File resourceBaseDir = new File(CODE_GEN_DEFAULT_RESOURCE_DIR);
49
50         private Map<String, String> additionalConfiguration = Maps.newHashMap();
51
52         public CodeGeneratorArg() {
53             super(CODE_GEN_DEFAULT_DIR);
54         }
55
56         public CodeGeneratorArg(String codeGeneratorClass) {
57             this(codeGeneratorClass, CODE_GEN_DEFAULT_DIR);
58         }
59
60         public CodeGeneratorArg(String codeGeneratorClass, String outputBaseDir) {
61             super(outputBaseDir);
62             this.codeGeneratorClass = codeGeneratorClass;
63         }
64
65         public CodeGeneratorArg(String codeGeneratorClass,
66                 String outputBaseDir, String resourceBaseDir) {
67             super(outputBaseDir);
68             this.codeGeneratorClass = codeGeneratorClass;
69             this.resourceBaseDir = new File(resourceBaseDir);
70         }
71
72         @Override
73         public void check() {
74             Preconditions.checkNotNull(codeGeneratorClass,
75                     "codeGeneratorClass for CodeGenerator cannot be null");
76         }
77
78         public String getCodeGeneratorClass() {
79             return codeGeneratorClass;
80         }
81
82         public File getResourceBaseDir(MavenProject project) {
83             if (resourceBaseDir.isAbsolute()) {
84                 return resourceBaseDir;
85             } else {
86                 return new File(project.getBasedir(), resourceBaseDir.getPath());
87             }
88         }
89
90         public Map<String, String> getAdditionalConfiguration() {
91             return additionalConfiguration;
92         }
93     }
94 }