View Javadoc

1   package org.apache.maven.plugin.issues;
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 org.apache.maven.doxia.sink.Sink;
23  
24  import java.text.DateFormat;
25  import java.util.List;
26  import java.util.Locale;
27  import java.util.ResourceBundle;
28  
29  /**
30   * Generates a report on issues.
31   *
32   * @author Noriko Kinugasa
33   * @author Dennis Lundberg
34   * @version $Id: IssuesReportGenerator.html 816601 2012-05-08 12:50:18Z hboutemy $
35   * @since 2.4
36   */
37  public class IssuesReportGenerator extends AbstractIssuesReportGenerator
38  {
39      /**
40       * Fallback value that is used if date field are not available.
41       */
42      private static final String NOT_AVAILABLE = "n/a";
43  
44      /**
45       * Holds the id:s for the columns to include in the report, in the order
46       * that they should appear in the report.
47       */
48      private int[] columns;
49  
50      /**
51       * @param includedColumns The id:s of the columns to include in the report
52       */
53      public IssuesReportGenerator( int[] includedColumns )
54      {
55          this.columns = includedColumns;
56      }
57  
58      public void doGenerateEmptyReport( ResourceBundle bundle, Sink sink )
59      {
60          sinkBeginReport( sink, bundle );
61  
62          sink.paragraph();
63  
64          sink.text( bundle.getString( "report.issues.error" ) );
65  
66          sink.paragraph_();
67  
68          sinkEndReport( sink );
69      }
70  
71      public void doGenerateReport( ResourceBundle bundle, Sink sink, List issueList )
72      {
73          sinkBeginReport( sink, bundle );
74  
75          constructHeaderRow( sink, issueList, bundle );
76  
77          // Always use the international date format as recommended by the W3C:
78          // http://www.w3.org/QA/Tips/iso-date
79          // This date format is used in the Swedish locale.
80          constructDetailRows( sink, issueList, bundle, new Locale( "sv" ) );
81  
82          sinkEndReport( sink );
83      }
84  
85      private void constructHeaderRow( Sink sink, List issueList, ResourceBundle bundle )
86      {
87          if ( issueList == null )
88          {
89              return;
90          }
91  
92          sink.table();
93  
94          sink.tableRow();
95  
96          for ( int columnIndex = 0; columnIndex < columns.length; columnIndex++ )
97          {
98              switch ( columns[columnIndex] )
99              {
100                 case IssuesReportHelper.COLUMN_ASSIGNEE:
101                     sinkHeader( sink, bundle.getString( "report.issues.label.assignee" ) );
102                     break;
103 
104                 case IssuesReportHelper.COLUMN_COMPONENT:
105                     sinkHeader( sink, bundle.getString( "report.issues.label.component" ) );
106                     break;
107 
108                 case IssuesReportHelper.COLUMN_CREATED:
109                     sinkHeader( sink, bundle.getString( "report.issues.label.created" ) );
110                     break;
111 
112                 case IssuesReportHelper.COLUMN_FIX_VERSION:
113                     sinkHeader( sink, bundle.getString( "report.issues.label.fixVersion" ) );
114                     break;
115 
116                 case IssuesReportHelper.COLUMN_ID:
117                     sinkHeader( sink, bundle.getString( "report.issues.label.id" ) );
118                     break;
119 
120                 case IssuesReportHelper.COLUMN_KEY:
121                     sinkHeader( sink, bundle.getString( "report.issues.label.key" ) );
122                     break;
123 
124                 case IssuesReportHelper.COLUMN_PRIORITY:
125                     sinkHeader( sink, bundle.getString( "report.issues.label.priority" ) );
126                     break;
127 
128                 case IssuesReportHelper.COLUMN_REPORTER:
129                     sinkHeader( sink, bundle.getString( "report.issues.label.reporter" ) );
130                     break;
131 
132                 case IssuesReportHelper.COLUMN_RESOLUTION:
133                     sinkHeader( sink, bundle.getString( "report.issues.label.resolution" ) );
134                     break;
135 
136                 case IssuesReportHelper.COLUMN_STATUS:
137                     sinkHeader( sink, bundle.getString( "report.issues.label.status" ) );
138                     break;
139 
140                 case IssuesReportHelper.COLUMN_SUMMARY:
141                     sinkHeader( sink, bundle.getString( "report.issues.label.summary" ) );
142                     break;
143 
144                 case IssuesReportHelper.COLUMN_TYPE:
145                     sinkHeader( sink, bundle.getString( "report.issues.label.type" ) );
146                     break;
147 
148                 case IssuesReportHelper.COLUMN_UPDATED:
149                     sinkHeader( sink, bundle.getString( "report.issues.label.updated" ) );
150                     break;
151 
152                 case IssuesReportHelper.COLUMN_VERSION:
153                     sinkHeader( sink, bundle.getString( "report.issues.label.version" ) );
154                     break;
155 
156                 default:
157                     // Do not add a header for this column
158                     break;
159             }
160         }
161 
162         sink.tableRow_();
163     }
164 
165     private void constructDetailRows( Sink sink, List issueList, ResourceBundle bundle, Locale locale )
166     {
167         if ( issueList == null )
168         {
169             return;
170         }
171 
172         for ( int idx = 0; idx < issueList.size(); idx++ )
173         {
174             // Use a DateFormat based on the Locale
175             DateFormat df = DateFormat.getDateInstance( DateFormat.SHORT, locale );
176 
177             Issue issue = (Issue) issueList.get( idx );
178 
179             sink.tableRow();
180 
181             for ( int columnIndex = 0; columnIndex < columns.length; columnIndex++ )
182             {
183                 switch ( columns[columnIndex] )
184                 {
185                     case IssuesReportHelper.COLUMN_ASSIGNEE:
186                         sinkCell( sink, issue.getAssignee() );
187                         break;
188 
189                     case IssuesReportHelper.COLUMN_COMPONENT:
190                         sinkCell( sink, IssuesReportHelper.printValues( issue.getComponents() ) );
191                         break;
192 
193                     case IssuesReportHelper.COLUMN_CREATED:
194                         String created = NOT_AVAILABLE;
195                         if ( issue.getCreated() != null )
196                         {
197                             created = df.format( issue.getCreated() );
198                         }
199                         sinkCell( sink, created );
200                         break;
201 
202                     case IssuesReportHelper.COLUMN_FIX_VERSION:
203                         sinkCell( sink, IssuesReportHelper.printValues( issue.getFixVersions() ) );
204                         break;
205 
206                     case IssuesReportHelper.COLUMN_ID:
207                         sink.tableCell();
208                         sink.link( issue.getLink() );
209                         sink.text( issue.getId() );
210                         sink.link_();
211                         sink.tableCell_();
212                         break;
213 
214                     case IssuesReportHelper.COLUMN_KEY:
215                         sink.tableCell();
216                         sink.link( issue.getLink() );
217                         sink.text( issue.getKey() );
218                         sink.link_();
219                         sink.tableCell_();
220                         break;
221 
222                     case IssuesReportHelper.COLUMN_PRIORITY:
223                         sinkCell( sink, issue.getPriority() );
224                         break;
225 
226                     case IssuesReportHelper.COLUMN_REPORTER:
227                         sinkCell( sink, issue.getReporter() );
228                         break;
229 
230                     case IssuesReportHelper.COLUMN_RESOLUTION:
231                         sinkCell( sink, issue.getResolution() );
232                         break;
233 
234                     case IssuesReportHelper.COLUMN_STATUS:
235                         sinkCell( sink, issue.getStatus() );
236                         break;
237 
238                     case IssuesReportHelper.COLUMN_SUMMARY:
239                         sinkCell( sink, issue.getSummary() );
240                         break;
241 
242                     case IssuesReportHelper.COLUMN_TYPE:
243                         sinkCell( sink, issue.getType() );
244                         break;
245 
246                     case IssuesReportHelper.COLUMN_UPDATED:
247                         String updated = NOT_AVAILABLE;
248                         if ( issue.getUpdated() != null )
249                         {
250                             updated = df.format( issue.getUpdated() );
251                         }
252                         sinkCell( sink, updated );
253                         break;
254 
255                     case IssuesReportHelper.COLUMN_VERSION:
256                         sinkCell( sink, issue.getVersion() );
257                         break;
258 
259                     default:
260                         // Do not add this column
261                         break;
262                 }
263             }
264 
265             sink.tableRow_();
266         }
267 
268         sink.table_();
269     }
270 }