1 package org.codehaus.modello.maven;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import java.io.File;
26 import java.util.Optional;
27 import java.util.Properties;
28 import java.util.function.Supplier;
29 import java.util.stream.Stream;
30
31 import org.apache.maven.plugins.annotations.Parameter;
32 import org.codehaus.modello.ModelloParameterConstants;
33
34
35
36
37 public abstract class AbstractModelloSourceGeneratorMojo extends AbstractModelloGeneratorMojo {
38
39
40
41 @Parameter(defaultValue = "${project.build.directory}/generated-sources/modello", required = true)
42 private File outputDirectory;
43
44
45
46
47
48
49 @Parameter(defaultValue = "${project.build.sourceEncoding}")
50 private String encoding;
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 @Parameter
67 private String javaSource;
68
69
70
71
72
73 @Parameter(defaultValue = "true")
74 private boolean domAsXpp3;
75
76 @Override
77 protected boolean producesCompilableResult() {
78 return true;
79 }
80
81 public File getOutputDirectory() {
82 return outputDirectory;
83 }
84
85 public void setOutputDirectory(File outputDirectory) {
86 this.outputDirectory = outputDirectory;
87 }
88
89 @Override
90 protected void customizeParameters(Properties parameters) {
91 super.customizeParameters(parameters);
92
93 if (encoding != null) {
94 parameters.setProperty(ModelloParameterConstants.ENCODING, encoding);
95 }
96
97 if (javaSource == null) {
98 javaSource = discoverJavaSource();
99 }
100 if (javaSource.startsWith("1.")) {
101 javaSource = javaSource.substring("1.".length());
102 }
103 getLog().debug("javaSource=" + javaSource);
104 parameters.setProperty(ModelloParameterConstants.OUTPUT_JAVA_SOURCE, javaSource);
105
106 parameters.setProperty(ModelloParameterConstants.DOM_AS_XPP3, Boolean.toString(domAsXpp3));
107 }
108
109 private String discoverJavaSource() {
110 Properties projectProperties = getProject().getProperties();
111
112 Supplier<String> release = () -> projectProperties.getProperty("maven.compiler.release");
113 Supplier<String> source = () -> projectProperties.getProperty("maven.compiler.source");
114 Supplier<String> target = () -> projectProperties.getProperty("maven.compiler.target");
115
116 Optional<String> jSource = Stream.of(release, source, target)
117 .map(Supplier::get)
118 .filter(s -> s != null && !s.isEmpty())
119 .findFirst();
120
121 if (jSource.isPresent()) {
122 return jSource.get();
123 } else {
124 getLog().warn("javaSource was not discovered - use default value "
125 + ModelloParameterConstants.OUTPUT_JAVA_SOURCE_DEFAULT);
126 return ModelloParameterConstants.OUTPUT_JAVA_SOURCE_DEFAULT;
127 }
128 }
129 }