View Javadoc

1   package org.apache.maven.plugin.trac;
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 java.text.SimpleDateFormat;
23  import java.util.ArrayList;
24  import java.util.List;
25  import java.util.ResourceBundle;
26  
27  import org.apache.maven.doxia.sink.Sink;
28  
29  /**
30   * Generates a Trac report.
31   * 
32   * @author Noriko Kinugasa
33   * @version $Id: TracReportGenerator.html 816588 2012-05-08 12:37:27Z hboutemy $
34   */
35  public class TracReportGenerator
36  {
37  
38      public TracReportGenerator()
39      {
40          // nothing here
41      }
42  
43      public void doGenerateEmptyReport( ResourceBundle bundle, Sink sink )
44      {
45          sinkBeginReport( sink, bundle );
46  
47          sink.text( bundle.getString( "report.trac.error" ) );
48  
49          sinkEndReport( sink );
50      }
51  
52      public void doGenerateReport( ResourceBundle bundle, Sink sink, ArrayList ticketList )
53      {
54  
55          sinkBeginReport( sink, bundle );
56  
57          constructHeaderRow( sink, ticketList, bundle );
58  
59          constructDetailRows( sink, ticketList, bundle );
60  
61          sinkEndReport( sink );
62      }
63  
64      private void constructHeaderRow( Sink sink, List ticketList, ResourceBundle bundle )
65      {
66          if ( ticketList == null )
67          {
68              return;
69          }
70  
71          sink.table();
72  
73          sink.tableRow();
74  
75          sinkHeader( sink, bundle.getString( "report.trac.label.id" ) );
76  
77          sinkHeader( sink, bundle.getString( "report.trac.label.type" ) );
78  
79          sinkHeader( sink, bundle.getString( "report.trac.label.summary" ) );
80  
81          sinkHeader( sink, bundle.getString( "report.trac.label.owner" ) );
82  
83          sinkHeader( sink, bundle.getString( "report.trac.label.reporter" ) );
84  
85          sinkHeader( sink, bundle.getString( "report.trac.label.priority" ) );
86  
87          sinkHeader( sink, bundle.getString( "report.trac.label.status" ) );
88  
89          sinkHeader( sink, bundle.getString( "report.trac.label.resolution" ) );
90  
91          sinkHeader( sink, bundle.getString( "report.trac.label.created" ) );
92  
93          sinkHeader( sink, bundle.getString( "report.trac.label.changed" ) );
94  
95          sink.tableRow_();
96      }
97  
98      private void constructDetailRows( Sink sink, List ticketList, ResourceBundle bundle )
99      {
100         if ( ticketList == null )
101         {
102             return;
103         }
104 
105         for ( int idx = 0; idx < ticketList.size(); idx++ )
106         {
107             SimpleDateFormat sdf = new SimpleDateFormat( bundle.getString( "report.trac.dateformat" ) );
108 
109             TracTicket ticket = (TracTicket) ticketList.get( idx );
110 
111             sink.tableRow();
112 
113             sink.tableCell();
114 
115             sink.link( ticket.getLink() );
116 
117             sink.text( ticket.getId() );
118 
119             sink.link_();
120 
121             sink.tableCell_();
122 
123             sinkCell( sink, ticket.getType() );
124 
125             sinkCell( sink, ticket.getSummary() );
126 
127             sinkCell( sink, ticket.getOwner() );
128 
129             sinkCell( sink, ticket.getReporter() );
130 
131             sinkCell( sink, ticket.getPriority() );
132 
133             sinkCell( sink, ticket.getStatus() );
134 
135             sinkCell( sink, ticket.getResolution() );
136 
137             sinkCell( sink, sdf.format( ticket.getTimeCreated() ) );
138 
139             sinkCell( sink, sdf.format( ticket.getTimeChanged() ) );
140 
141             sink.tableRow_();
142         }
143 
144         sink.table_();
145     }
146 
147     private void sinkBeginReport( Sink sink, ResourceBundle bundle )
148     {
149         sink.head();
150 
151         sink.text( bundle.getString( "report.trac.header" ) );
152 
153         sink.head_();
154 
155         sink.body();
156 
157         sinkSectionTitle1( sink, bundle.getString( "report.trac.header" ) );
158 
159     }
160 
161     private void sinkEndReport( Sink sink )
162     {
163         sink.body_();
164 
165         sink.flush();
166 
167         sink.close();
168     }
169 
170     private void sinkFigure( Sink sink, String image )
171     {
172         sink.figure();
173 
174         sink.figureGraphics( image );
175 
176         sink.figure_();
177     }
178 
179     private void sinkHeader( Sink sink, String header )
180     {
181         sink.tableHeaderCell();
182 
183         sink.text( header );
184 
185         sink.tableHeaderCell_();
186     }
187 
188     private void sinkCell( Sink sink, String text )
189     {
190         sink.tableCell();
191 
192         if ( text != null )
193         {
194             sink.rawText( text );
195         }
196         else
197         {
198             sink.rawText( "&nbsp;" );
199         }
200 
201         sink.tableCell_();
202     }
203 
204     private void sinkSectionTitle1( Sink sink, String text )
205     {
206         sink.sectionTitle1();
207 
208         sink.text( text );
209 
210         sink.sectionTitle1_();
211     }
212 }