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