Fix yang.skip feature to include all files needed
[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 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 = outputBaseDir == null ? null : new File(outputBaseDir);
27     }
28
29     public File getOutputBaseDir(MavenProject project) {
30         if (outputBaseDir == null) {
31             return null;
32         }
33         if (outputBaseDir.isAbsolute()) {
34             return outputBaseDir;
35         } else {
36             return new File(project.getBasedir(), outputBaseDir.getPath());
37         }
38     }
39
40     public abstract void check();
41
42     /**
43      * Configuration argument for code generator class and output directory.
44      */
45     public static final class CodeGeneratorArg extends ConfigArg {
46         private static final String TARGET_GENERATED_SOURCES = "target" + File.separator + "generated-sources";
47         private static final String CODE_GEN_DEFAULT_RESOURCE_DIR = TARGET_GENERATED_SOURCES + File.separator + "spi";
48         public static final String YANG_GENERATED_DIR = TARGET_GENERATED_SOURCES + File.separator + "yang";
49         public static final String YANG_SERVICES_GENERATED_DIR = TARGET_GENERATED_SOURCES + File.separator + "spi";
50
51
52         private String codeGeneratorClass;
53         private File resourceBaseDir = new File(CODE_GEN_DEFAULT_RESOURCE_DIR);
54
55         private Map<String, String> additionalConfiguration = Maps.newHashMap();
56
57         public CodeGeneratorArg() {
58             super(null);
59         }
60
61         public CodeGeneratorArg(String codeGeneratorClass) {
62             this(codeGeneratorClass, null);
63         }
64
65         public CodeGeneratorArg(String codeGeneratorClass, String outputBaseDir) {
66             super(outputBaseDir);
67             this.codeGeneratorClass = codeGeneratorClass;
68         }
69
70         public CodeGeneratorArg(String codeGeneratorClass, String outputBaseDir, String resourceBaseDir) {
71             super(outputBaseDir);
72             this.codeGeneratorClass = codeGeneratorClass;
73             this.resourceBaseDir = new File(resourceBaseDir);
74         }
75
76         @Override
77         public void check() {
78             Preconditions.checkNotNull(codeGeneratorClass, "codeGeneratorClass for CodeGenerator cannot be null");
79         }
80
81         public String getCodeGeneratorClass() {
82             return codeGeneratorClass;
83         }
84
85         public File getResourceBaseDir(MavenProject project) {
86             if (resourceBaseDir.isAbsolute()) {
87                 return resourceBaseDir;
88             } else {
89                 return new File(project.getBasedir(), resourceBaseDir.getPath());
90             }
91         }
92
93         public Map<String, String> getAdditionalConfiguration() {
94             return additionalConfiguration;
95         }
96     }
97 }