1
2
3
4
5 package com.qulice.maven;
6
7 import com.jcabi.log.Logger;
8 import java.util.ArrayList;
9 import java.util.Collection;
10 import javax.inject.Inject;
11 import org.apache.maven.execution.MavenSession;
12 import org.apache.maven.plugin.AbstractMojo;
13 import org.apache.maven.plugin.MavenPluginManager;
14 import org.apache.maven.plugin.MojoFailureException;
15 import org.apache.maven.plugins.annotations.Parameter;
16 import org.apache.maven.project.MavenProject;
17 import org.codehaus.plexus.context.Context;
18 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
19 import org.slf4j.impl.StaticLoggerBinder;
20
21
22
23
24
25
26 public abstract class AbstractQuliceMojo extends AbstractMojo
27 implements Contextualizable {
28
29
30
31
32
33 private static final String ERRORPRONE = "qulice.errorprone";
34
35
36
37
38 private final DefaultMavenEnvironment environment;
39
40
41
42
43 @Parameter(defaultValue = "${project}", readonly = true)
44 private MavenProject project;
45
46
47
48
49 @Parameter(defaultValue = "${session}", readonly = true)
50 private MavenSession sess;
51
52
53
54
55 @Inject
56 private MavenPluginManager manager;
57
58
59
60
61 @Parameter(property = "qulice.skip", defaultValue = "false")
62 private boolean skip;
63
64
65
66
67 @Parameter(property = "qulice.excludes")
68 private final Collection<String> excludes;
69
70
71
72
73 @Parameter(
74 property = "qulice.asserts",
75 required = false
76 )
77 private final Collection<String> asserts;
78
79
80
81
82
83
84 @Parameter(
85 property = AbstractQuliceMojo.ERRORPRONE,
86 required = false
87 )
88 private final Collection<String> errorprone;
89
90
91
92
93
94
95 @Parameter(property = "encoding", defaultValue = "${project.build.sourceEncoding}")
96 private String charset;
97
98
99
100
101 protected AbstractQuliceMojo() {
102 this.environment = new DefaultMavenEnvironment();
103 this.excludes = new ArrayList<>(0);
104 this.asserts = new ArrayList<>(0);
105 this.errorprone = new ArrayList<>(0);
106 }
107
108
109
110
111
112
113 public final void setProject(final MavenProject proj) {
114 this.project = proj;
115 }
116
117
118
119
120
121
122 public final void setSkip(final boolean skp) {
123 this.skip = skp;
124 }
125
126
127
128
129
130
131 public final void setAsserts(final Collection<String> val) {
132 this.asserts.clear();
133 this.asserts.addAll(val);
134 }
135
136
137
138
139
140
141 public final void setExcludes(final Collection<String> exprs) {
142 this.excludes.clear();
143 this.excludes.addAll(exprs);
144 }
145
146
147
148
149
150
151 public final void setErrorprone(final Collection<String> flags) {
152 this.errorprone.clear();
153 this.errorprone.addAll(flags);
154 }
155
156
157
158
159
160
161 public void setEncoding(final String encoding) {
162 this.charset = encoding;
163 }
164
165 @Override
166 public final void contextualize(final Context ctx) {
167 this.environment.setContext(ctx);
168 }
169
170 @Override
171 public final void execute() throws MojoFailureException {
172 final long start = System.currentTimeMillis();
173 StaticLoggerBinder.getSingleton().setMavenLog(this.getLog());
174 if (this.skip) {
175 this.getLog().info("Execution skipped");
176 return;
177 }
178 this.environment.setProject(this.project);
179 this.environment.setMojoExecutor(
180 new MojoExecutor(this.manager, this.sess)
181 );
182 this.environment.setExcludes(this.excludes);
183 this.environment.setAssertion(this.asserts);
184 this.environment.setEncoding(this.charset);
185 if (!this.errorprone.isEmpty()) {
186 this.environment.setProperty(
187 AbstractQuliceMojo.ERRORPRONE,
188 String.join(" ", this.errorprone)
189 );
190 }
191 Logger.info(
192 this,
193 "Qulice %s in %[ms]s",
194 this.doExecute(),
195 System.currentTimeMillis() - start
196 );
197 }
198
199
200
201
202
203
204 public final MavenSession session() {
205 return this.sess;
206 }
207
208
209
210
211
212
213
214
215 protected abstract String doExecute() throws MojoFailureException;
216
217
218
219
220
221
222 protected final MavenEnvironment env() {
223 return this.environment;
224 }
225 }