1 package org.apache.maven.plugin.checkstyle;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.net.URL;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Locale;
28 import java.util.Map;
29
30 import org.apache.maven.model.Resource;
31 import org.apache.maven.plugin.checkstyle.exec.CheckstyleExecutorRequest;
32 import org.apache.maven.plugins.annotations.Mojo;
33 import org.apache.maven.plugins.annotations.Parameter;
34 import org.apache.maven.plugins.annotations.ResolutionScope;
35 import org.apache.maven.project.MavenProject;
36 import org.apache.maven.reporting.MavenReportException;
37 import org.codehaus.plexus.util.StringUtils;
38
39
40
41
42
43
44
45
46
47
48 @Mojo( name = "checkstyle", requiresDependencyResolution = ResolutionScope.COMPILE, threadSafe = true )
49 public class CheckstyleReport
50 extends AbstractCheckstyleReport
51 {
52
53
54
55 private static final Map<String, String> FORMAT_TO_CONFIG_LOCATION;
56
57 static
58 {
59 Map<String, String> fmt2Cfg = new HashMap<String, String>();
60
61 fmt2Cfg.put( "sun", "config/sun_checks.xml" );
62 fmt2Cfg.put( "turbine", "config/turbine_checks.xml" );
63 fmt2Cfg.put( "avalon", "config/avalon_checks.xml" );
64 fmt2Cfg.put( "maven", "config/maven_checks.xml" );
65
66 FORMAT_TO_CONFIG_LOCATION = Collections.unmodifiableMap( fmt2Cfg );
67 }
68
69
70
71
72
73
74
75 @Parameter( defaultValue = "sun" )
76 private String format;
77
78
79
80
81
82
83
84 @Parameter
85 private File propertiesFile;
86
87
88
89
90
91
92
93 @Parameter
94 private URL propertiesURL;
95
96
97
98
99
100
101
102
103 @Parameter( defaultValue = "${basedir}/LICENSE.txt" )
104 private File headerFile;
105
106
107
108
109
110
111
112
113
114
115 @Parameter
116 private String suppressionsFile;
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 @Parameter
135 private String packageNamesLocation;
136
137
138
139
140
141
142
143 @Parameter
144 private String packageNamesFile;
145
146
147 protected MavenProject getProject()
148 {
149 return project;
150 }
151
152
153 public void executeReport( Locale locale )
154 throws MavenReportException
155 {
156 mergeDeprecatedInfo();
157 super.executeReport( locale );
158 }
159
160
161
162
163 protected CheckstyleExecutorRequest createRequest()
164 throws MavenReportException
165 {
166 CheckstyleExecutorRequest request = new CheckstyleExecutorRequest();
167 request.setConsoleListener( getConsoleListener() ).setConsoleOutput( consoleOutput )
168 .setExcludes( excludes ).setFailsOnError( failsOnError ).setIncludes( includes )
169 .setResourceIncludes( resourceIncludes )
170 .setResourceExcludes( resourceExcludes )
171 .setIncludeResources( includeResources )
172 .setIncludeTestResources( includeTestResources )
173 .setIncludeTestSourceDirectory( includeTestSourceDirectory ).setListener( getListener() )
174 .setLog( getLog() ).setProject( project ).setSourceDirectories( getSourceDirectories() ).setResources( resources )
175 .setStringOutputStream( stringOutputStream ).setSuppressionsLocation( suppressionsLocation )
176 .setTestSourceDirectories( getTestSourceDirectories() ).setConfigLocation( configLocation )
177 .setPropertyExpansion( propertyExpansion ).setHeaderLocation( headerLocation )
178 .setCacheFile( cacheFile ).setSuppressionsFileExpression( suppressionsFileExpression )
179 .setEncoding( encoding ).setPropertiesLocation( propertiesLocation );
180 return request;
181 }
182
183
184 public String getOutputName()
185 {
186 return "checkstyle";
187 }
188
189
190 public boolean canGenerateReport()
191 {
192 if ( skip )
193 {
194 return false;
195 }
196
197
198 for ( File sourceDirectory : getSourceDirectories() )
199 {
200 if ( sourceDirectory.exists() )
201 {
202 return true;
203 }
204 }
205
206 if ( includeTestSourceDirectory )
207 {
208 for ( File testSourceDirectory : getTestSourceDirectories() )
209 {
210 if ( testSourceDirectory.exists() )
211 {
212 return true;
213 }
214 }
215 }
216
217 return ( ( includeResources && hasResources( resources ) )
218 || ( includeTestResources && hasResources( testResources ) )
219 );
220 }
221
222
223
224
225
226
227 private boolean hasResources( List<Resource> resources )
228 {
229 for ( Resource resource : resources )
230 {
231 if ( new File( resource.getDirectory() ).exists() )
232 {
233 return true;
234 }
235 }
236 return false;
237 }
238
239
240
241
242
243
244
245 private void mergeDeprecatedInfo()
246 {
247 if ( "config/sun_checks.xml".equals( configLocation ) && !"sun".equals( format ) )
248 {
249 configLocation = FORMAT_TO_CONFIG_LOCATION.get( format );
250 }
251
252 if ( StringUtils.isEmpty( propertiesLocation ) )
253 {
254 if ( propertiesFile != null )
255 {
256 propertiesLocation = propertiesFile.getPath();
257 }
258 else if ( propertiesURL != null )
259 {
260 propertiesLocation = propertiesURL.toExternalForm();
261 }
262 }
263
264 if ( "LICENSE.txt".equals( headerLocation ) )
265 {
266 File defaultHeaderFile = new File( project.getBasedir(), "LICENSE.txt" );
267 if ( !defaultHeaderFile.equals( headerFile ) )
268 {
269 headerLocation = headerFile.getPath();
270 }
271 }
272
273 if ( StringUtils.isEmpty( suppressionsLocation ) )
274 {
275 suppressionsLocation = suppressionsFile;
276 }
277
278 if ( StringUtils.isEmpty( packageNamesLocation ) )
279 {
280 packageNamesLocation = packageNamesFile;
281 }
282 }
283
284 }