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