[MCHANGELOG-69] Print developer names regardless of whether they're listed in the POM
[MCHANGELOG-73] Print developer names in the change report for known developers and make them links to the team page.
Submitted by: John Allen
Reviewed by: Dennis Lundberg
Applied with modifications.
git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@939126 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java b/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
index 3f49cf6..7748418 100644
--- a/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
+++ b/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java
@@ -48,6 +48,7 @@
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.model.Developer;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.AbstractMavenReport;
@@ -382,12 +383,26 @@
*/
protected String displayFileRevDetailUrl;
+ /**
+ * List of developers to be shown on the report.
+ *
+ * @parameter expression="${project.developers}"
+ * @since 2.2
+ */
+ protected List developers;
+
// temporary field holder while generating the report
private String rptRepository, rptOneRepoParam, rptMultiRepoParam;
// field for SCM Connection URL
private String connection;
+ // field used to hold a map of the developers by Id
+ private HashMap developersById;
+
+ // field used to hold a map of the developers by Name
+ private HashMap developersByName;
+
/**
* The system properties to use (needed by the perforce scm provider).
*
@@ -407,7 +422,9 @@
return;
}
- intializeDefaultConfigurationParameters();
+ initializeDefaultConfigurationParameters();
+
+ initializeDeveloperMaps();
verifySCMTypeParams();
@@ -435,7 +452,7 @@
* Initializes any configuration parameters that have not/can not be defined
* or defaulted by the Mojo API.
*/
- private void intializeDefaultConfigurationParameters()
+ private void initializeDefaultConfigurationParameters()
{
if ( displayFileRevDetailUrl == null || displayFileRevDetailUrl.length() == 0 )
{
@@ -444,6 +461,27 @@
}
/**
+ * Creates maps of the project developers by developer Id and developer Name
+ * for quick lookups.
+ */
+ private void initializeDeveloperMaps()
+ {
+ developersById = new HashMap();
+ developersByName = new HashMap();
+
+ if ( developers != null )
+ {
+ for ( Iterator i = developers.iterator(); i.hasNext(); )
+ {
+ Developer developer = (Developer) i.next();
+
+ developersById.put( developer.getId(), developer );
+ developersByName.put( developer.getName(), developer );
+ }
+ }
+ }
+
+ /**
* populates the changedSets field by either connecting to the SCM or using an existing XML generated in a previous
* run of the report
*
@@ -1190,7 +1228,9 @@
sink.tableCell_();
sink.tableCell();
- sink.text( entry.getAuthor() );
+
+ sinkAuthorDetails( sink, entry.getAuthor() );
+
sink.tableCell_();
sink.tableCell();
@@ -1311,6 +1351,35 @@
}
/**
+ * If the supplied author is a known developer this method outputs a
+ * link to the team members report, or alternatively, if the supplied
+ * author is unknown, outputs the author's name as plain text.
+ *
+ * @param sink Sink to use for outputting
+ * @param author The author's name.
+ */
+ protected void sinkAuthorDetails( Sink sink, String author )
+ {
+ Developer developer = (Developer) developersById.get( author );
+
+ if ( developer == null )
+ {
+ developer = (Developer) developersByName.get( author );
+ }
+
+ if ( developer != null )
+ {
+ sink.link( "team-list.html#" + developer.getId() );
+ sink.text( developer.getName() );
+ sink.link_();
+ }
+ else
+ {
+ sink.text( author );
+ }
+ }
+
+ /**
* populates the report url used to create links from certain elements of the report
*/
protected void initReportUrls()
diff --git a/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java b/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java
index d4e218a..b230e8e 100644
--- a/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java
+++ b/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java
@@ -20,7 +20,6 @@
*/
import org.apache.maven.doxia.sink.Sink;
-import org.apache.maven.model.Developer;
import org.apache.maven.scm.ChangeFile;
import org.apache.maven.scm.ChangeSet;
import org.apache.maven.scm.command.changelog.ChangeLogSet;
@@ -43,13 +42,6 @@
extends ChangeLogReport
{
/**
- * List of developers to be shown on the report.
- *
- * @parameter expression="${project.developers}"
- */
- private List developers;
-
- /**
* Used to hold data while creating the report
*/
private HashMap commits;
@@ -183,42 +175,18 @@
{
initDeveloperDetails( set );
- //for( Iterator i=commits.keySet().iterator(); i.hasNext(); )
- for ( Iterator i = developers.iterator(); i.hasNext(); )
+ for( Iterator i = commits.keySet().iterator(); i.hasNext(); )
{
- Developer developer = (Developer) i.next();
+ String author = (String) i.next();
- String name = developer.getName();
-
- String id = developer.getId();
-
- LinkedList devCommits;
- HashMap devFiles;
-
- if ( !commits.containsKey( name ) )
- {
- if ( !commits.containsKey( id ) )
- {
- continue;
- }
-
- devCommits = (LinkedList) commits.get( id );
-
- devFiles = (HashMap) files.get( id );
- }
- else
- {
- devCommits = (LinkedList) commits.get( name );
-
- devFiles = (HashMap) files.get( name );
- }
+ LinkedList devCommits = (LinkedList) commits.get( author );
+ HashMap devFiles = (HashMap) files.get( author );
sink.tableRow();
-
sink.tableCell();
- sink.link( "team-list.html#" + developer.getId() );
- sink.text( name );
- sink.link_();
+
+ sinkAuthorDetails( sink, author );
+
sink.tableCell_();
sink.tableCell();