Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
TestJavadocReport |
|
| 0.0;0 |
1 | package org.apache.maven.plugin.javadoc; | |
2 | ||
3 | /* | |
4 | * Licensed to the Apache Software Foundation (ASF) under one | |
5 | * or more contributor license agreements. See the NOTICE file | |
6 | * distributed with this work for additional information | |
7 | * regarding copyright ownership. The ASF licenses this file | |
8 | * to you under the Apache License, Version 2.0 (the | |
9 | * "License"); you may not use this file except in compliance | |
10 | * with the License. You may obtain a copy of the License at | |
11 | * | |
12 | * http://www.apache.org/licenses/LICENSE-2.0 | |
13 | * | |
14 | * Unless required by applicable law or agreed to in writing, | |
15 | * software distributed under the License is distributed on an | |
16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
17 | * KIND, either express or implied. See the License for the | |
18 | * specific language governing permissions and limitations | |
19 | * under the License. | |
20 | */ | |
21 | ||
22 | import java.io.File; | |
23 | import java.util.ArrayList; | |
24 | import java.util.Collections; | |
25 | import java.util.LinkedList; | |
26 | import java.util.List; | |
27 | import java.util.Locale; | |
28 | import java.util.ResourceBundle; | |
29 | ||
30 | import org.apache.maven.artifact.resolver.ArtifactResolutionResult; | |
31 | import org.apache.maven.plugin.javadoc.resolver.SourceResolverConfig; | |
32 | import org.apache.maven.project.MavenProject; | |
33 | import org.apache.maven.reporting.MavenReportException; | |
34 | import org.codehaus.plexus.util.StringUtils; | |
35 | ||
36 | /** | |
37 | * Generates documentation for the <code>Java Test code</code> in an <b>NON aggregator</b> project using the standard | |
38 | * <a href="http://java.sun.com/j2se/javadoc/">Javadoc Tool</a>. | |
39 | * | |
40 | * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a> | |
41 | * @version $Id: org.apache.maven.plugin.javadoc.TestJavadocReport.html 829396 2012-08-19 17:35:19Z hboutemy $ | |
42 | * @since 2.3 | |
43 | * @goal test-javadoc | |
44 | * @execute phase=generate-test-sources | |
45 | * @requiresDependencyResolution test | |
46 | * @see <a href="http://java.sun.com/j2se/javadoc/">Javadoc Tool</a> | |
47 | * @see <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#options">Javadoc Options </a> | |
48 | */ | |
49 | 1 | public class TestJavadocReport |
50 | extends JavadocReport | |
51 | { | |
52 | // ---------------------------------------------------------------------- | |
53 | // Javadoc Options (should be inline with options defined in TestJavadocJar) | |
54 | // ---------------------------------------------------------------------- | |
55 | ||
56 | /** | |
57 | * Specifies the Test title to be placed near the top of the overview summary file. | |
58 | * <br/> | |
59 | * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#doctitle">doctitle</a>. | |
60 | * <br/> | |
61 | * | |
62 | * @parameter expression="${testDoctitle}" alias="doctitle" | |
63 | * default-value="${project.name} ${project.version} Test API" | |
64 | * @since 2.5 | |
65 | */ | |
66 | private String testDoctitle; | |
67 | ||
68 | /** | |
69 | * Specifies that Javadoc should retrieve the text for the Test overview documentation from the "source" file | |
70 | * specified by path/filename and place it on the Overview page (overview-summary.html). | |
71 | * <br/> | |
72 | * <b>Note</b>: could be in conflict with <nooverview/>. | |
73 | * <br/> | |
74 | * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#overview">overview</a>. | |
75 | * <br/> | |
76 | * | |
77 | * @parameter expression="${testOverview}" alias="overview" | |
78 | * default-value="${basedir}/src/test/javadoc/overview.html" | |
79 | * @since 2.5 | |
80 | */ | |
81 | private File testOverview; | |
82 | ||
83 | /** | |
84 | * Specifies the Test title to be placed in the HTML title tag. | |
85 | * <br/> | |
86 | * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/javadoc.html#windowtitle">windowtitle</a>. | |
87 | * <br/> | |
88 | * | |
89 | * @parameter expression="${testWindowtitle}" alias="windowtitle" | |
90 | * default-value="${project.name} ${project.version} Test API" | |
91 | * @since 2.5 | |
92 | */ | |
93 | private String testWindowtitle; | |
94 | ||
95 | // ---------------------------------------------------------------------- | |
96 | // Mojo Parameters (should be inline with options defined in TestJavadocJar) | |
97 | // ---------------------------------------------------------------------- | |
98 | ||
99 | /** | |
100 | * Specifies the destination directory where test Javadoc saves the generated HTML files. | |
101 | * | |
102 | * @parameter expression="${reportTestOutputDirectory}" default-value="${project.reporting.outputDirectory}/testapidocs" | |
103 | * @required | |
104 | */ | |
105 | private File reportOutputDirectory; | |
106 | ||
107 | /** | |
108 | * The name of the destination directory. | |
109 | * <br/> | |
110 | * | |
111 | * @parameter expression="${destDir}" default-value="testapidocs" | |
112 | */ | |
113 | private String destDir; | |
114 | ||
115 | /** | |
116 | * Specifies the Test Javadoc resources directory to be included in the Javadoc (i.e. package.html, images...). | |
117 | * <br/> | |
118 | * Could be used in addition of <code>docfilessubdirs</code> parameter. | |
119 | * <br/> | |
120 | * See <a href="#docfilessubdirs">docfilessubdirs</a>. | |
121 | * | |
122 | * @parameter expression="${basedir}/src/test/javadoc" alias="javadocDirectory" | |
123 | * @since 2.5 | |
124 | */ | |
125 | private File testJavadocDirectory; | |
126 | ||
127 | // ---------------------------------------------------------------------- | |
128 | // Report Mojo Parameters | |
129 | // ---------------------------------------------------------------------- | |
130 | ||
131 | /** | |
132 | * The name of the Test Javadoc report to be displayed in the Maven Generated Reports page | |
133 | * (i.e. <code>project-reports.html</code>). | |
134 | * | |
135 | * @parameter expression="${testName}" alias="name" | |
136 | * @since 2.5 | |
137 | */ | |
138 | private String testName; | |
139 | ||
140 | /** | |
141 | * The description of the Test Javadoc report to be displayed in the Maven Generated Reports page | |
142 | * (i.e. <code>project-reports.html</code>). | |
143 | * | |
144 | * @parameter expression="${testDescription}" alias="description" | |
145 | * @since 2.5 | |
146 | */ | |
147 | private String testDescription; | |
148 | ||
149 | // ---------------------------------------------------------------------- | |
150 | // Report public methods | |
151 | // ---------------------------------------------------------------------- | |
152 | ||
153 | /** {@inheritDoc} */ | |
154 | protected void executeReport( Locale unusedLocale ) | |
155 | throws MavenReportException | |
156 | { | |
157 | 1 | addMainJavadocLink(); |
158 | ||
159 | 1 | super.executeReport( unusedLocale ); |
160 | 1 | } |
161 | ||
162 | /** {@inheritDoc} */ | |
163 | public String getName( Locale locale ) | |
164 | { | |
165 | 0 | if ( StringUtils.isEmpty( testName ) ) |
166 | { | |
167 | 0 | return getBundle( locale ).getString( "report.test-javadoc.name" ); |
168 | } | |
169 | ||
170 | 0 | return testName; |
171 | } | |
172 | ||
173 | /** {@inheritDoc} */ | |
174 | public String getDescription( Locale locale ) | |
175 | { | |
176 | 0 | if ( StringUtils.isEmpty( testDescription ) ) |
177 | { | |
178 | 0 | return getBundle( locale ).getString( "report.test-javadoc.description" ); |
179 | } | |
180 | ||
181 | 0 | return testDescription; |
182 | } | |
183 | ||
184 | /** {@inheritDoc} */ | |
185 | public String getOutputName() | |
186 | { | |
187 | 1 | return destDir + "/index"; |
188 | } | |
189 | ||
190 | /** {@inheritDoc} */ | |
191 | public File getReportOutputDirectory() | |
192 | { | |
193 | 2 | if ( reportOutputDirectory == null ) |
194 | { | |
195 | 2 | return outputDirectory; |
196 | } | |
197 | ||
198 | 0 | return reportOutputDirectory; |
199 | } | |
200 | ||
201 | /** | |
202 | * Method to set the directory where the generated reports will be put | |
203 | * | |
204 | * @param reportOutputDirectory the directory file to be set | |
205 | */ | |
206 | public void setReportOutputDirectory( File reportOutputDirectory ) | |
207 | { | |
208 | 0 | updateReportOutputDirectory( reportOutputDirectory, destDir ); |
209 | 0 | } |
210 | ||
211 | public void setDestDir( String destDir ) | |
212 | { | |
213 | 0 | this.destDir = destDir; |
214 | 0 | updateReportOutputDirectory( reportOutputDirectory, destDir ); |
215 | 0 | } |
216 | ||
217 | private void updateReportOutputDirectory( File reportOutputDirectory, String destDir ) | |
218 | { | |
219 | 0 | if ( reportOutputDirectory != null && destDir != null |
220 | && !reportOutputDirectory.getAbsolutePath().endsWith( destDir ) ) | |
221 | { | |
222 | 0 | this.reportOutputDirectory = new File( reportOutputDirectory, destDir ); |
223 | } | |
224 | else | |
225 | { | |
226 | 0 | this.reportOutputDirectory = reportOutputDirectory; |
227 | } | |
228 | 0 | } |
229 | ||
230 | // ---------------------------------------------------------------------- | |
231 | // Protected methods | |
232 | // Important Note: should be inline with methods defined in TestJavadocJar | |
233 | // ---------------------------------------------------------------------- | |
234 | ||
235 | /** {@inheritDoc} */ | |
236 | protected List getProjectBuildOutputDirs( MavenProject p ) | |
237 | { | |
238 | 1 | List dirs = new ArrayList(); |
239 | 1 | if ( StringUtils.isNotEmpty( p.getBuild().getOutputDirectory() ) ) |
240 | { | |
241 | 1 | dirs.add( p.getBuild().getOutputDirectory() ); |
242 | } | |
243 | 1 | if ( StringUtils.isNotEmpty( p.getBuild().getTestOutputDirectory() ) ) |
244 | { | |
245 | 1 | dirs.add( p.getBuild().getTestOutputDirectory() ); |
246 | } | |
247 | ||
248 | 1 | return dirs; |
249 | } | |
250 | ||
251 | /** {@inheritDoc} */ | |
252 | protected List getProjectSourceRoots( MavenProject p ) | |
253 | { | |
254 | 1 | if ( "pom".equals( p.getPackaging().toLowerCase() ) ) |
255 | { | |
256 | 0 | return Collections.EMPTY_LIST; |
257 | } | |
258 | ||
259 | 1 | return ( p.getTestCompileSourceRoots() == null ? Collections.EMPTY_LIST |
260 | : new LinkedList( p.getTestCompileSourceRoots() ) ); | |
261 | } | |
262 | ||
263 | /** {@inheritDoc} */ | |
264 | protected List getExecutionProjectSourceRoots( MavenProject p ) | |
265 | { | |
266 | 1 | if ( "pom".equals( p.getExecutionProject().getPackaging().toLowerCase() ) ) |
267 | { | |
268 | 0 | return Collections.EMPTY_LIST; |
269 | } | |
270 | ||
271 | 1 | return ( p.getExecutionProject().getTestCompileSourceRoots() == null ? Collections.EMPTY_LIST |
272 | : new LinkedList( p.getExecutionProject().getTestCompileSourceRoots() ) ); | |
273 | } | |
274 | ||
275 | /** {@inheritDoc} */ | |
276 | protected List getProjectArtifacts( MavenProject p ) | |
277 | { | |
278 | 1 | return ( p.getTestArtifacts() == null ? Collections.EMPTY_LIST : new LinkedList( p.getTestArtifacts() ) ); |
279 | } | |
280 | ||
281 | /** {@inheritDoc} */ | |
282 | protected File getJavadocDirectory() | |
283 | { | |
284 | 2 | return testJavadocDirectory; |
285 | } | |
286 | ||
287 | /** {@inheritDoc} */ | |
288 | protected String getDoctitle() | |
289 | { | |
290 | 1 | return testDoctitle; |
291 | } | |
292 | ||
293 | /** {@inheritDoc} */ | |
294 | protected File getOverview() | |
295 | { | |
296 | 2 | return testOverview; |
297 | } | |
298 | ||
299 | /** {@inheritDoc} */ | |
300 | protected String getWindowtitle() | |
301 | { | |
302 | 1 | return testWindowtitle; |
303 | } | |
304 | ||
305 | /** {@inheritDoc} */ | |
306 | protected List getCompileArtifacts( ArtifactResolutionResult result ) | |
307 | { | |
308 | 0 | return JavadocUtil.getCompileArtifacts( result.getArtifacts(), true ); |
309 | } | |
310 | ||
311 | /** | |
312 | * Gets the resource bundle for the specified locale. | |
313 | * | |
314 | * @param locale The locale of the currently generated report. | |
315 | * @return The resource bundle for the requested locale. | |
316 | */ | |
317 | private ResourceBundle getBundle( Locale locale ) | |
318 | { | |
319 | 0 | return ResourceBundle.getBundle( "test-javadoc-report", locale, getClass().getClassLoader() ); |
320 | } | |
321 | ||
322 | /** | |
323 | * Add the <code>../apidocs</code> to the links parameter so Test report could be linked to the Main report. | |
324 | */ | |
325 | private void addMainJavadocLink() | |
326 | { | |
327 | 1 | if ( links == null ) |
328 | { | |
329 | 1 | links = new ArrayList<String>(); |
330 | } | |
331 | ||
332 | // TODO the prerequisite is that the main report is in apidocs | |
333 | 1 | File apidocs = new File( getReportOutputDirectory().getParentFile(), "apidocs" ); |
334 | 1 | if ( apidocs.isDirectory() && !links.contains( "../apidocs" ) ) |
335 | { | |
336 | 1 | links.add( "../apidocs" ); |
337 | } | |
338 | 1 | } |
339 | ||
340 | /** | |
341 | * Overriden to enable the resolution of -test-sources jar files. | |
342 | * | |
343 | * {@inheritDoc} | |
344 | */ | |
345 | protected SourceResolverConfig configureDependencySourceResolution( final SourceResolverConfig config ) | |
346 | { | |
347 | 0 | return super.configureDependencySourceResolution( config ).withoutCompileSources().withTestSources(); |
348 | } | |
349 | } |