Index: D:/APT/projects/maven/plugins/maven-changelog-plugin/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java =================================================================== --- D:/APT/projects/maven/plugins/maven-changelog-plugin/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java (revision 560535) +++ D:/APT/projects/maven/plugins/maven-changelog-plugin/src/main/java/org/apache/maven/plugin/changelog/ChangeLogReport.java (working copy) @@ -19,6 +19,7 @@ * under the License. */ +import org.apache.maven.model.Developer; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; @@ -291,12 +292,25 @@ */ protected String displayFileDetailUrl; + /** + * List of developers to be shown on the report. + * + * @parameter expression="${project.developers}" + */ + 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). * @@ -318,8 +332,10 @@ return; } + initialiseDeveloperMaps(); + verifySCMTypeParams(); - + if ( systemProperties != null ) { // Add all system properties configured by the user @@ -341,6 +357,27 @@ } /** + * Creates maps of the project developers by developer Id and developer Name + * for quick lookups. + */ + private void initialiseDeveloperMaps() + { + 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 * @@ -1073,7 +1110,9 @@ sink.tableCell_(); sink.tableCell(); - sink.text( entry.getAuthor() ); + + sinkAuthorDetails( sink, entry.getAuthor() ); + sink.tableCell_(); sink.tableCell(); @@ -1124,6 +1163,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() Index: D:/APT/projects/maven/plugins/maven-changelog-plugin/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java =================================================================== --- D:/APT/projects/maven/plugins/maven-changelog-plugin/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java (revision 560535) +++ D:/APT/projects/maven/plugins/maven-changelog-plugin/src/main/java/org/apache/maven/plugin/changelog/DeveloperActivityReport.java (working copy) @@ -42,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; @@ -199,44 +192,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(); + + LinkedList devCommits = (LinkedList) commits.get( author ); + HashMap devFiles = (HashMap) files.get( author ); - String name = developer.getName(); - - String id = developer.getId(); - - LinkedList devCommits; - HashMap devFiles; - - if ( !commits.containsKey( name ) ) - { - if ( !commits.containsKey( id ) ) - { - continue; - } - else - { - devCommits = (LinkedList) commits.get( id ); - - devFiles = (HashMap) files.get( id ); - } - } - else - { - devCommits = (LinkedList) commits.get( name ); - - devFiles = (HashMap) files.get( name ); - } - sink.tableRow(); - sink.tableCell(); - sink.link( "team-list.html#" + developer.getId() ); - sink.text( name ); - sink.link_(); + + sinkAuthorDetails( sink, author ); + sink.tableCell_(); sink.tableCell(); @@ -247,7 +214,7 @@ sink.text( "" + devFiles.size() ); sink.tableCell_(); - sink.tableRow_(); + sink.tableRow_(); } }