1 package org.apache.maven.plugin.trac;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.net.MalformedURLException;
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Locale;
26 import java.util.Map;
27 import java.util.ResourceBundle;
28
29 import org.apache.maven.plugin.changes.AbstractChangesReport;
30 import org.apache.maven.plugin.changes.ProjectUtils;
31 import org.apache.maven.plugin.issues.IssuesReportGenerator;
32 import org.apache.maven.plugin.issues.IssuesReportHelper;
33 import org.apache.maven.reporting.MavenReportException;
34 import org.apache.xmlrpc.XmlRpcException;
35
36
37
38
39
40
41
42
43
44
45
46 public class TracMojo
47 extends AbstractChangesReport
48 {
49
50
51
52 private static Map<String,Integer> DEPRECATED_TRAC_COLUMNS = new HashMap<String,Integer>();
53
54
55
56
57 private static Map<String,Integer> TRAC_COLUMNS = new HashMap<String,Integer>();
58
59 static
60 {
61 DEPRECATED_TRAC_COLUMNS.put( "changed", new Integer( IssuesReportHelper.COLUMN_UPDATED ) );
62 DEPRECATED_TRAC_COLUMNS.put( "component", new Integer( IssuesReportHelper.COLUMN_COMPONENT ) );
63 DEPRECATED_TRAC_COLUMNS.put( "created", new Integer( IssuesReportHelper.COLUMN_CREATED ) );
64 DEPRECATED_TRAC_COLUMNS.put( "id", new Integer( IssuesReportHelper.COLUMN_ID ) );
65 DEPRECATED_TRAC_COLUMNS.put( "milestone", new Integer( IssuesReportHelper.COLUMN_FIX_VERSION ) );
66 DEPRECATED_TRAC_COLUMNS.put( "owner", new Integer( IssuesReportHelper.COLUMN_ASSIGNEE ) );
67 DEPRECATED_TRAC_COLUMNS.put( "priority", new Integer( IssuesReportHelper.COLUMN_PRIORITY ) );
68 DEPRECATED_TRAC_COLUMNS.put( "reporter", new Integer( IssuesReportHelper.COLUMN_REPORTER ) );
69 DEPRECATED_TRAC_COLUMNS.put( "resolution", new Integer( IssuesReportHelper.COLUMN_RESOLUTION ) );
70 DEPRECATED_TRAC_COLUMNS.put( "status", new Integer( IssuesReportHelper.COLUMN_STATUS ) );
71 DEPRECATED_TRAC_COLUMNS.put( "summary", new Integer( IssuesReportHelper.COLUMN_SUMMARY ) );
72 DEPRECATED_TRAC_COLUMNS.put( "type", new Integer( IssuesReportHelper.COLUMN_TYPE ) );
73
74 TRAC_COLUMNS.put( "Assignee", new Integer( IssuesReportHelper.COLUMN_ASSIGNEE ) );
75 TRAC_COLUMNS.put( "Component", new Integer( IssuesReportHelper.COLUMN_COMPONENT ) );
76 TRAC_COLUMNS.put( "Created", new Integer( IssuesReportHelper.COLUMN_CREATED ) );
77 TRAC_COLUMNS.put( "Fix Version", new Integer( IssuesReportHelper.COLUMN_FIX_VERSION ) );
78 TRAC_COLUMNS.put( "Id", new Integer( IssuesReportHelper.COLUMN_ID ) );
79 TRAC_COLUMNS.put( "Priority", new Integer( IssuesReportHelper.COLUMN_PRIORITY ) );
80 TRAC_COLUMNS.put( "Reporter", new Integer( IssuesReportHelper.COLUMN_REPORTER ) );
81 TRAC_COLUMNS.put( "Resolution", new Integer( IssuesReportHelper.COLUMN_RESOLUTION ) );
82 TRAC_COLUMNS.put( "Status", new Integer( IssuesReportHelper.COLUMN_STATUS ) );
83 TRAC_COLUMNS.put( "Summary", new Integer( IssuesReportHelper.COLUMN_SUMMARY ) );
84 TRAC_COLUMNS.put( "Type", new Integer( IssuesReportHelper.COLUMN_TYPE ) );
85 TRAC_COLUMNS.put( "Updated", new Integer( IssuesReportHelper.COLUMN_UPDATED ) );
86 }
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 private String columnNames;
104
105
106
107
108
109
110 private String query;
111
112
113
114
115
116
117
118 private String tracPassword;
119
120
121
122
123
124
125
126 private String tracUser;
127
128
129
130
131
132
133
134
135 public boolean canGenerateReport()
136 {
137 return ProjectUtils.validateIfIssueManagementComplete( project, "Trac", "Trac Report", getLog() );
138 }
139
140 public void executeReport( Locale locale )
141 throws MavenReportException
142 {
143
144 List<Integer> columnIds = IssuesReportHelper.getColumnIds( columnNames, TRAC_COLUMNS, DEPRECATED_TRAC_COLUMNS,
145 getLog() );
146 if ( columnIds.size() == 0 )
147 {
148
149 throw new MavenReportException(
150 "maven-changes-plugin: None of the configured columnNames '" + columnNames + "' are valid." );
151 }
152
153 try
154 {
155
156 TracDownloader issueDownloader = new TracDownloader();
157 configureIssueDownloader( issueDownloader );
158
159 List issueList = issueDownloader.getIssueList();
160
161
162 IssuesReportGenerator report = new IssuesReportGenerator( IssuesReportHelper.toIntArray( columnIds ) );
163
164 if ( issueList.isEmpty() )
165 {
166 report.doGenerateEmptyReport( getBundle( locale ), getSink() );
167 getLog().warn( "No ticket has matched." );
168 }
169 else
170 {
171 report.doGenerateReport( getBundle( locale ), getSink(), issueList );
172 }
173 }
174 catch ( MalformedURLException e )
175 {
176
177 throw new MavenReportException( "The Trac URL is incorrect." );
178 }
179 catch ( XmlRpcException e )
180 {
181
182 throw new MavenReportException( "XmlRpc Error.", e );
183 }
184 catch ( Exception e )
185 {
186 e.printStackTrace();
187 }
188 }
189
190 public String getDescription( Locale locale )
191 {
192 return getBundle( locale ).getString( "report.issues.description" );
193 }
194
195 public String getName( Locale locale )
196 {
197 return getBundle( locale ).getString( "report.issues.name" );
198 }
199
200 public String getOutputName()
201 {
202 return "trac-report";
203 }
204
205
206
207
208
209 private ResourceBundle getBundle( Locale locale )
210 {
211 return ResourceBundle.getBundle( "trac-report", locale, this.getClass().getClassLoader() );
212 }
213
214 private void configureIssueDownloader( TracDownloader issueDownloader )
215 {
216 issueDownloader.setProject( project );
217
218 issueDownloader.setQuery( query );
219
220 issueDownloader.setTracPassword( tracPassword );
221
222 issueDownloader.setTracUser( tracUser );
223 }
224 }