Merge branch 'master' of ../controller
[yangtools.git] / yang / yang-maven-plugin / src / main / java / org / opendaylight / yangtools / 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.yangtools.yang2sources.plugin;
9
10 import static java.util.Objects.requireNonNull;
11
12 import java.io.File;
13 import java.util.HashMap;
14 import java.util.Map;
15 import org.apache.maven.project.MavenProject;
16
17 /**
18  * Base complex configuration arguments.
19  */
20 public abstract class ConfigArg {
21     private final File outputBaseDir;
22
23     public ConfigArg(final String outputBaseDir) {
24         this.outputBaseDir = outputBaseDir == null ? null : new File(outputBaseDir);
25     }
26
27     public File getOutputBaseDir(final MavenProject project) {
28         if (outputBaseDir == null) {
29             return null;
30         }
31         return outputBaseDir.isAbsolute() ? outputBaseDir : new File(project.getBasedir(), outputBaseDir.getPath());
32     }
33
34     public abstract void check();
35
36     /**
37      * Configuration argument for code generator class and output directory.
38      */
39     public static final class CodeGeneratorArg extends ConfigArg {
40
41         private final Map<String, String> additionalConfiguration = new HashMap<>();
42
43         private String codeGeneratorClass;
44         private File resourceBaseDir;
45
46         public CodeGeneratorArg() {
47             super(null);
48         }
49
50         public CodeGeneratorArg(final String codeGeneratorClass) {
51             this(codeGeneratorClass, null);
52         }
53
54         public CodeGeneratorArg(final String codeGeneratorClass, final String outputBaseDir) {
55             super(outputBaseDir);
56             this.codeGeneratorClass = codeGeneratorClass;
57         }
58
59         public CodeGeneratorArg(final String codeGeneratorClass, final String outputBaseDir,
60                 final String resourceBaseDir) {
61             super(outputBaseDir);
62             this.codeGeneratorClass = codeGeneratorClass;
63             this.resourceBaseDir = new File(resourceBaseDir);
64         }
65
66         @Override
67         public void check() {
68             requireNonNull(codeGeneratorClass, "codeGeneratorClass for CodeGenerator cannot be null");
69         }
70
71         public String getCodeGeneratorClass() {
72             return codeGeneratorClass;
73         }
74
75         public File getResourceBaseDir(final MavenProject project) {
76             if (resourceBaseDir == null) {
77                 // if it has not been set, use a default (correctly dealing with target/ VS target-ide)
78                 return new GeneratedDirectories(project).getYangServicesDir();
79             }
80
81             return resourceBaseDir.isAbsolute() ? resourceBaseDir
82                         : new File(project.getBasedir(), resourceBaseDir.getPath());
83         }
84
85         public Map<String, String> getAdditionalConfiguration() {
86             return additionalConfiguration;
87         }
88     }
89 }