1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.james.mailet;
21
22 import org.apache.commons.collections.CollectionUtils;
23 import org.apache.commons.collections.Predicate;
24 import org.apache.maven.doxia.siterenderer.Renderer;
25 import org.apache.maven.project.MavenProject;
26 import org.apache.maven.reporting.AbstractMavenReport;
27 import org.apache.maven.reporting.MavenReportException;
28
29 import java.io.File;
30 import java.util.Collections;
31 import java.util.Comparator;
32 import java.util.List;
33 import java.util.Locale;
34
35
36
37
38
39
40
41
42
43
44
45
46 public class MailetdocsMojo extends AbstractMavenReport {
47
48
49
50
51
52
53 private Renderer siteRenderer;
54
55
56
57
58
59
60
61
62 private MavenProject project;
63
64
65
66
67
68
69
70
71 private File outputDirectory;
72
73
74
75
76 private static final class TypePredicate implements Predicate {
77 private int type;
78
79 public TypePredicate(int typeMatcher) {
80 this.type = typeMatcher;
81 }
82
83 public boolean evaluate(Object arg0) {
84 return ((MailetMatcherDescriptor) arg0).getType() == type;
85 }
86 }
87
88 protected void executeReport(Locale locale) throws MavenReportException {
89
90 List descriptors = new DefaultDescriptorsExtractor().extractDescriptors(project, getLog());
91
92 Collections.sort(descriptors, new Comparator() {
93
94 public int compare(Object arg0, Object arg1) {
95 return ((MailetMatcherDescriptor) arg0).getName().compareTo(
96 ((MailetMatcherDescriptor) arg1).getName());
97 }
98
99 });
100
101 getLog().info("Executing Mailets/Matchers Report");
102
103 getSink().head();
104 getSink().title();
105 getSink().text("Mailet and Matchers Reference");
106 getSink().title_();
107 getSink().head_();
108
109 getSink().body();
110
111 List matchers = (List) CollectionUtils.select(descriptors,
112 new TypePredicate(MailetMatcherDescriptor.TYPE_MATCHER));
113 List mailets = (List) CollectionUtils.select(descriptors,
114 new TypePredicate(MailetMatcherDescriptor.TYPE_MAILET));
115
116 getSink().section1();
117 getSink().sectionTitle1();
118 getSink().text("Mailets and Matchers Reference");
119 getSink().sectionTitle1_();
120 getSink().section1_();
121
122 if (matchers.size() > 0 && mailets.size() > 0) {
123 getSink().table();
124 getSink().tableRow();
125 getSink().tableCell();
126 }
127 if (matchers.size() > 0) {
128 outputDescriptorIndex(matchers, "Matchers");
129 }
130 if (matchers.size() > 0 && mailets.size() > 0) {
131 getSink().tableCell_();
132 getSink().tableCell();
133 }
134 if (mailets.size() > 0) {
135 outputDescriptorIndex(mailets, "Mailets");
136 }
137 if (matchers.size() > 0 && mailets.size() > 0) {
138 getSink().tableCell_();
139 getSink().tableRow_();
140 getSink().table_();
141 }
142
143 if (matchers.size() > 0) {
144 outputDescriptorList(matchers, "Matchers");
145 }
146 if (mailets.size() > 0) {
147 outputDescriptorList(mailets, "Mailets");
148 }
149
150 getSink().body_();
151
152 getSink().flush();
153 getSink().close();
154
155
156
157
158
159
160
161
162
163
164
165 }
166
167 private void outputDescriptorIndex(List descriptors, String title) {
168 getSink().section2();
169 getSink().sectionTitle2();
170 getSink().text(title);
171 getSink().sectionTitle2_();
172
173 getSink().list();
174 for (int i = 0; i < descriptors.size(); i++) {
175 getSink().listItem();
176 getSink().link("#"+((MailetMatcherDescriptor) descriptors.get(i)).getName());
177 getSink().text(
178 ((MailetMatcherDescriptor) descriptors.get(i)).getName());
179 getSink().link_();
180 getSink().listItem_();
181 }
182 getSink().list_();
183
184 getSink().section2_();
185 }
186
187 private void outputDescriptorList(List descriptors, String title) {
188 getSink().section1();
189 getSink().sectionTitle1();
190 getSink().text(title);
191 getSink().sectionTitle1_();
192
193 for (int i = 0; i < descriptors.size(); i++) {
194 getSink().section2();
195
196 getSink().sectionTitle2();
197 getSink().anchor(((MailetMatcherDescriptor) descriptors.get(i)).getName());
198 getSink().text(
199 ((MailetMatcherDescriptor) descriptors.get(i)).getName());
200 getSink().anchor_();
201 getSink().sectionTitle2_();
202
203 if (((MailetMatcherDescriptor) descriptors.get(i)).getInfo() != null) {
204 getSink().paragraph();
205 if (((MailetMatcherDescriptor) descriptors.get(i)).getType() == MailetMatcherDescriptor.TYPE_MAILET) {
206 getSink().text("Mailet Info: ");
207 } else if (((MailetMatcherDescriptor) descriptors.get(i)).getType() == MailetMatcherDescriptor.TYPE_MATCHER) {
208 getSink().text("Matcher Info: ");
209 } else {
210 getSink().text("Info: ");
211 }
212 getSink().bold();
213 getSink().text(
214 ((MailetMatcherDescriptor) descriptors.get(i)).getInfo());
215 getSink().bold_();
216 getSink().lineBreak();
217 getSink().paragraph_();
218 }
219
220 getSink().paragraph();
221 getSink().rawText(
222 ((MailetMatcherDescriptor) descriptors.get(i))
223 .getClassDocs());
224 getSink().paragraph_();
225
226 getSink().section2_();
227
228 }
229
230 getSink().section1_();
231 }
232
233 protected String getOutputDirectory() {
234 return outputDirectory.getAbsolutePath();
235 }
236
237
238
239
240 public Renderer getSiteRenderer() {
241 return siteRenderer;
242 }
243
244 protected MavenProject getProject() {
245 return project;
246 }
247
248 public String getDescription(Locale arg0) {
249 return "Documentation about bundled mailets";
250 }
251
252 public String getName(Locale arg0) {
253 return "Mailet Reference";
254 }
255
256 public String getOutputName() {
257 return "mailet-report";
258 }
259
260
261
262
263
264 public void setSiteRenderer(Renderer siteRenderer) {
265 this.siteRenderer = siteRenderer;
266 }
267
268
269
270
271
272
273
274 public void setProject(MavenProject project) {
275 this.project = project;
276 }
277
278 }