1 package org.apache.maven.report.projectinfo;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.Comparator;
25 import java.util.List;
26 import java.util.Locale;
27
28 import org.apache.maven.artifact.Artifact;
29 import org.apache.maven.artifact.factory.ArtifactFactory;
30 import org.apache.maven.artifact.repository.ArtifactRepository;
31 import org.apache.maven.artifact.versioning.VersionRange;
32 import org.apache.maven.doxia.sink.Sink;
33 import org.apache.maven.model.Plugin;
34 import org.apache.maven.plugin.logging.Log;
35 import org.apache.maven.project.MavenProject;
36 import org.apache.maven.project.MavenProjectBuilder;
37 import org.apache.maven.project.ProjectBuildingException;
38 import org.codehaus.plexus.i18n.I18N;
39 import org.codehaus.plexus.util.StringUtils;
40
41
42
43
44
45
46
47
48
49
50 public class PluginManagementReport
51 extends AbstractProjectInfoReport
52 {
53
54
55
56
57
58
59
60
61
62 private MavenProjectBuilder mavenProjectBuilder;
63
64
65
66
67
68
69 private ArtifactFactory artifactFactory;
70
71
72
73
74
75 @Override
76 public void executeReport( Locale locale )
77 {
78 PluginManagementRenderer r = new PluginManagementRenderer( getLog(), getSink(), locale, getI18N( locale ), project
79 .getPluginManagement().getPlugins(), project, mavenProjectBuilder, artifactFactory, localRepository );
80 r.render();
81 }
82
83
84 public String getOutputName()
85 {
86 return "plugin-management";
87 }
88
89 @Override
90 protected String getI18Nsection()
91 {
92 return "pluginManagement";
93 }
94
95 @Override
96 public boolean canGenerateReport()
97 {
98 return project.getPluginManagement() != null && project.getPluginManagement().getPlugins() != null
99 && !project.getPluginManagement().getPlugins().isEmpty();
100 }
101
102
103
104
105
106
107
108
109
110
111 protected static class PluginManagementRenderer
112 extends AbstractProjectInfoRenderer
113 {
114 private final Log log;
115
116 private final List<Plugin> pluginManagement;
117
118 private final MavenProject project;
119
120 private final MavenProjectBuilder mavenProjectBuilder;
121
122 private final ArtifactFactory artifactFactory;
123
124 private final ArtifactRepository localRepository;
125
126
127
128
129
130
131
132
133
134
135
136
137 public PluginManagementRenderer( Log log, Sink sink, Locale locale, I18N i18n, List<Plugin> plugins,
138 MavenProject project, MavenProjectBuilder mavenProjectBuilder,
139 ArtifactFactory artifactFactory, ArtifactRepository localRepository )
140 {
141 super( sink, i18n, locale );
142
143 this.log = log;
144
145 this.pluginManagement = plugins;
146
147 this.project = project;
148
149 this.mavenProjectBuilder = mavenProjectBuilder;
150
151 this.artifactFactory = artifactFactory;
152
153 this.localRepository = localRepository;
154 }
155
156 @Override
157 protected String getI18Nsection()
158 {
159 return "pluginManagement";
160 }
161
162 @Override
163 public void renderBody()
164 {
165
166 renderSectionPluginManagement();
167 }
168
169 private void renderSectionPluginManagement()
170 {
171 String[] tableHeader = getPluginTableHeader();
172
173 startSection( getTitle() );
174
175
176 Collections.sort( pluginManagement, getPluginComparator() );
177
178 startTable();
179 tableHeader( tableHeader );
180
181 for ( Plugin plugin : pluginManagement )
182 {
183 VersionRange versionRange;
184 if ( StringUtils.isEmpty( plugin.getVersion() ) )
185 {
186 versionRange = VersionRange.createFromVersion( Artifact.RELEASE_VERSION );
187 }
188 else
189 {
190 versionRange = VersionRange.createFromVersion( plugin.getVersion() );
191 }
192
193 Artifact pluginArtifact = artifactFactory.createParentArtifact( plugin.getGroupId(), plugin
194 .getArtifactId(), versionRange.toString() );
195 @SuppressWarnings( "unchecked" )
196 List<ArtifactRepository> artifactRepositories = project.getPluginArtifactRepositories();
197 if ( artifactRepositories == null )
198 {
199 artifactRepositories = new ArrayList<ArtifactRepository>();
200 }
201 try
202 {
203 MavenProject pluginProject = mavenProjectBuilder.buildFromRepository( pluginArtifact,
204 artifactRepositories,
205 localRepository );
206 tableRow( getPluginRow( pluginProject.getGroupId(), pluginProject.getArtifactId(), pluginProject
207 .getVersion(), pluginProject.getUrl() ) );
208 }
209 catch ( ProjectBuildingException e )
210 {
211 log.info( "Could not build project for: " + plugin.getArtifactId() + ":" + e.getMessage(), e );
212 tableRow( getPluginRow( plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion(), null ) );
213 }
214
215 }
216 endTable();
217
218 endSection();
219 }
220
221
222
223
224
225 private String[] getPluginTableHeader()
226 {
227
228 String groupId = getI18nString( "dependencyManagement", "column.groupId" );
229 String artifactId = getI18nString( "dependencyManagement", "column.artifactId" );
230 String version = getI18nString( "dependencyManagement", "column.version" );
231 return new String[] { groupId, artifactId, version };
232 }
233
234 private String[] getPluginRow( String groupId, String artifactId, String version, String link )
235 {
236 artifactId = ProjectInfoReportUtils.getArtifactIdCell( artifactId, link );
237 return new String[] { groupId, artifactId, version };
238 }
239
240 private Comparator<Plugin> getPluginComparator()
241 {
242 return new Comparator<Plugin>()
243 {
244
245 public int compare( Plugin a1, Plugin a2 )
246 {
247 int result = a1.getGroupId().compareTo( a2.getGroupId() );
248 if ( result == 0 )
249 {
250 result = a1.getArtifactId().compareTo( a2.getArtifactId() );
251 }
252 return result;
253 }
254 };
255 }
256 }
257 }