Coverage Report - org.apache.maven.changes.ChangesReportGenerator
 
Classes in this File Line Coverage Branch Coverage Complexity
ChangesReportGenerator
0% 
0% 
1,545
 
 1  
 package org.apache.maven.changes;
 2  
 
 3  
 /*
 4  
  * Copyright 2001-2006 The Apache Software Foundation.
 5  
  *
 6  
  * Licensed under the Apache License, Version 2.0 (the "License");
 7  
  * you may not use this file except in compliance with the License.
 8  
  * You may obtain a copy of the License at
 9  
  *
 10  
  *      http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 
 19  
 import org.apache.maven.doxia.sink.Sink;
 20  
 import org.apache.maven.plugin.logging.Log;
 21  
 import org.apache.maven.reporting.MavenReportException;
 22  
 
 23  
 import java.util.List;
 24  
 import java.util.ResourceBundle;
 25  
 
 26  
 /**
 27  
  * Generates a changes report.
 28  
  *
 29  
  * @version $Id: org.apache.maven.changes.ChangesReportGenerator.html 816584 2012-05-08 12:33:35Z hboutemy $
 30  
  */
 31  
 public class ChangesReportGenerator
 32  
 {
 33  
     private ChangesXML report;
 34  0
 
 35  0
     private String issueLink;
 36  0
 
 37  
     private String url;
 38  0
 
 39  0
     public ChangesReportGenerator()
 40  0
     {
 41  0
     }
 42  0
 
 43  0
     public ChangesReportGenerator( String xmlPath, Log log )
 44  0
     {
 45  0
         report = new ChangesXML( xmlPath, log );
 46  0
     }
 47  
 
 48  
     public void setIssueLink( String issueLink )
 49  0
     {
 50  0
         this.issueLink = issueLink;
 51  0
     }
 52  
 
 53  
     public String getIssueLink()
 54  0
     {
 55  0
         return issueLink;
 56  0
     }
 57  
 
 58  
     public void setUrl( String url )
 59  0
     {
 60  0
         this.url = url;
 61  0
     }
 62  
 
 63  
     public String getUrl()
 64  0
     {
 65  0
         return url;
 66  0
     }
 67  0
 
 68  0
     public void doGenerateEmptyReport( ResourceBundle bundle, Sink sink, String message )
 69  0
     {
 70  0
         sinkBeginReport( sink, bundle );
 71  0
 
 72  0
         sink.text( message );
 73  0
 
 74  0
         sinkEndReport( sink );
 75  0
     }
 76  0
 
 77  0
     public void doGenerateReport( ResourceBundle bundle, Sink sink )
 78  0
         throws MavenReportException
 79  0
     {
 80  0
         sinkBeginReport( sink, bundle );
 81  0
 
 82  0
         constructReleaseHistory( sink, bundle );
 83  0
 
 84  0
         constructReleases( sink, bundle );
 85  0
 
 86  0
         sinkEndReport( sink );
 87  0
     }
 88  0
 
 89  0
     private void constructActions( Sink sink, List actionList, ResourceBundle bundle )
 90  0
     {
 91  0
         sink.table();
 92  0
 
 93  0
         sink.tableRow();
 94  0
 
 95  0
         sinkHeader( sink, bundle.getString( "report.changes.label.type" ) );
 96  0
 
 97  0
         sinkHeader( sink, bundle.getString( "report.changes.label.changes" ) );
 98  0
 
 99  0
         sinkHeader( sink, bundle.getString( "report.changes.label.by" ) );
 100  0
 
 101  0
         sink.tableRow_();
 102  0
 
 103  0
         for ( int idx = 0; idx < actionList.size(); idx++ )
 104  0
         {
 105  0
             Action action = (Action) actionList.get( idx );
 106  0
 
 107  0
             sink.tableRow();
 108  0
 
 109  0
             sinkShowTypeIcon( sink, action.getType() );
 110  0
 
 111  0
             sink.tableCell();
 112  0
 
 113  0
             sink.rawText( action.getAction() );
 114  0
 
 115  0
             if ( action.getIssue() != null )
 116  0
             {
 117  0
                 sink.text( " " + bundle.getString( "report.changes.text.fixes" ) + " " );
 118  0
 
 119  0
                 if ( this.url == null || this.url.trim().equals( "" ) )
 120  0
                 {
 121  0
                     sink.text( action.getIssue() );
 122  0
 
 123  0
                 }
 124  0
                 else
 125  0
                 {
 126  0
                     sink.link( parseIssueLink( action.getIssue() ) );
 127  0
 
 128  0
                     sink.text( action.getIssue() );
 129  0
 
 130  0
                     sinkFigure( "images/external.png", sink );
 131  0
 
 132  0
                     sink.link_();
 133  0
 
 134  0
                 }
 135  0
                 sink.text( "." );
 136  0
             }
 137  0
 
 138  0
             if ( action.getDueTo() != null )
 139  0
             {
 140  0
                 sink.text( " " + bundle.getString( "report.changes.text.thanx" ) + " " );
 141  0
 
 142  0
                 if ( action.getDueToEmail() != null )
 143  0
                 {
 144  0
                     sinkLink( sink, action.getDueTo(), "mailto:" + action.getDueToEmail() );
 145  0
                 }
 146  0
                 else
 147  0
                 {
 148  0
                     sink.text( action.getDueTo() );
 149  0
                 }
 150  0
 
 151  0
                 sink.text( "." );
 152  0
             }
 153  0
 
 154  0
             sink.tableCell_();
 155  0
 
 156  0
             sinkCellLink( sink, action.getDev(), "team-list.html#" + action.getDev() );
 157  0
 
 158  0
             sink.tableRow_();
 159  0
         }
 160  0
 
 161  0
         sink.table();
 162  0
     }
 163  0
 
 164  0
     private void constructReleaseHistory( Sink sink, ResourceBundle bundle )
 165  0
     {
 166  0
         sinkSectionTitle2Anchor( sink, bundle.getString( "report.changes.label.releasehistory" ), bundle
 167  0
             .getString( "report.changes.label.releasehistory" ) );
 168  0
 
 169  0
         List releaseList = report.getReleaseList();
 170  0
 
 171  0
         sink.table();
 172  0
 
 173  0
         sink.tableRow();
 174  0
 
 175  0
         sinkHeader( sink, bundle.getString( "report.changes.label.version" ) );
 176  0
 
 177  0
         sinkHeader( sink, bundle.getString( "report.changes.label.date" ) );
 178  0
 
 179  0
         sinkHeader( sink, bundle.getString( "report.changes.label.description" ) );
 180  0
 
 181  0
         sink.tableRow_();
 182  0
 
 183  0
         for ( int idx = 0; idx < releaseList.size(); idx++ )
 184  0
         {
 185  0
             Release release = (Release) releaseList.get( idx );
 186  0
 
 187  0
             sink.tableRow();
 188  0
 
 189  0
             sinkCellLink( sink, release.getVersion(), "#" + release.getVersion() );
 190  0
 
 191  0
             sinkCell( sink, release.getDateRelease() );
 192  0
 
 193  0
             sinkCell( sink, release.getDescription() );
 194  0
 
 195  0
             sink.tableRow_();
 196  0
         }
 197  0
 
 198  0
         sink.table_();
 199  0
 
 200  0
         sink.lineBreak();
 201  0
 
 202  0
         // @todo Temporarily commented out until MCHANGES-46 is completely solved
 203  0
 //        sink.rawText( bundle.getString( "report.changes.text.rssfeed" ) );
 204  0
 //        sink.text( " " );
 205  0
 //        sink.link( "changes.rss" );
 206  0
 //        sinkFigure( "images/rss.png", sink );
 207  0
 //        sink.link_();
 208  0
 //
 209  0
 //        sink.lineBreak();
 210  0
 
 211  0
         sink.lineBreak();
 212  0
     }
 213  0
 
 214  0
     private void constructReleases( Sink sink, ResourceBundle bundle )
 215  0
     {
 216  0
         List releaseList = report.getReleaseList();
 217  0
 
 218  0
         for ( int idx = 0; idx < releaseList.size(); idx++ )
 219  0
         {
 220  0
             Release release = (Release) releaseList.get( idx );
 221  0
 
 222  0
             sinkSectionTitle2Anchor( sink, bundle.getString( "report.changes.label.release" ) + " "
 223  0
                 + release.getVersion() + " - " + release.getDateRelease(), release.getVersion() );
 224  0
 
 225  0
             constructActions( sink, release.getAction(), bundle );
 226  0
         }
 227  0
     }
 228  0
 
 229  0
     private String parseIssueLink( String issue )
 230  0
     {
 231  0
         String parseLink = "";
 232  0
 
 233  0
         String url = this.url.substring( 0, this.url.lastIndexOf( "/" ) );
 234  0
 
 235  0
         parseLink = this.issueLink.replaceFirst( "%ISSUE%", issue );
 236  0
 
 237  0
         parseLink = parseLink.replaceFirst( "%URL%", url );
 238  0
 
 239  0
         return parseLink;
 240  0
     }
 241  0
 
 242  0
     private void sinkBeginReport( Sink sink, ResourceBundle bundle )
 243  0
     {
 244  0
         sink.head();
 245  0
 
 246  0
         sink.text( bundle.getString( "report.changes.header" ) );
 247  0
 
 248  0
         sink.head_();
 249  0
 
 250  0
         sink.body();
 251  0
 
 252  0
         sinkSectionTitle1Anchor( sink, bundle.getString( "report.changes.header" ), bundle
 253  0
             .getString( "report.changes.header" ) );
 254  0
     }
 255  0
 
 256  0
     private void sinkCell( Sink sink, String text )
 257  0
     {
 258  0
         sink.tableCell();
 259  0
 
 260  0
         sink.text( text );
 261  0
 
 262  0
         sink.tableCell_();
 263  0
     }
 264  0
 
 265  0
     private void sinkCellLink( Sink sink, String text, String link )
 266  0
     {
 267  0
         sink.tableCell();
 268  0
 
 269  0
         sinkLink( sink, text, link );
 270  0
 
 271  0
         sink.tableCell_();
 272  0
     }
 273  0
 
 274  0
     private void sinkEndReport( Sink sink )
 275  0
     {
 276  0
         sink.body_();
 277  0
 
 278  0
         sink.flush();
 279  0
 
 280  0
         sink.close();
 281  0
     }
 282  0
 
 283  0
     private void sinkFigure( String image, Sink sink )
 284  0
     {
 285  0
         sink.figure();
 286  0
 
 287  0
         sink.figureGraphics( image );
 288  0
 
 289  0
         sink.figure_();
 290  0
     }
 291  0
 
 292  0
     private void sinkHeader( Sink sink, String header )
 293  0
     {
 294  0
         sink.tableHeaderCell();
 295  0
 
 296  0
         sink.text( header );
 297  0
 
 298  0
         sink.tableHeaderCell_();
 299  0
     }
 300  0
 
 301  0
     private void sinkLink( Sink sink, String text, String link )
 302  0
     {
 303  0
         sink.link( link );
 304  0
 
 305  0
         sink.text( text );
 306  0
 
 307  0
         sink.link_();
 308  0
     }
 309  0
 
 310  0
     private void sinkSectionTitle1Anchor( Sink sink, String text, String anchor )
 311  0
     {
 312  0
         sink.sectionTitle1();
 313  0
         sink.text( text );
 314  0
         sink.sectionTitle1_();
 315  0
     }
 316  0
 
 317  0
     private void sinkSectionTitle2Anchor( Sink sink, String text, String anchor )
 318  0
     {
 319  0
         sink.sectionTitle2();
 320  0
         sink.anchor( anchor );
 321  0
         sink.anchor_();
 322  0
         sink.text( text );
 323  0
         sink.sectionTitle2_();
 324  0
     }
 325  0
 
 326  0
     private void sinkShowTypeIcon( Sink sink, String type )
 327  0
     {
 328  0
         String image = "";
 329  0
 
 330  0
         if ( type == null )
 331  0
         {
 332  0
             image = "images/icon_help_sml.gif";
 333  0
         }
 334  0
         else if ( type.equals( "fix" ) )
 335  0
         {
 336  0
             image = "images/fix.gif";
 337  0
         }
 338  0
         else if ( type.equals( "update" ) )
 339  0
         {
 340  0
             image = "images/update.gif";
 341  0
         }
 342  0
         else if ( type.equals( "add" ) )
 343  0
         {
 344  0
             image = "images/add.gif";
 345  0
         }
 346  0
         else if ( type.equals( "remove" ) )
 347  0
         {
 348  0
             image = "images/remove.gif";
 349  0
         }
 350  0
 
 351  0
         sink.tableCell();
 352  0
 
 353  0
         sinkFigure( image, sink );
 354  0
 
 355  0
         sink.tableCell_();
 356  0
     }
 357  
 
 358  
 }