View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  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,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.doxia.sink.impl;
20  
21  import java.io.IOException;
22  import java.io.Writer;
23  
24  import org.apache.maven.doxia.sink.SinkEventAttributes;
25  import org.slf4j.Logger;
26  import org.slf4j.LoggerFactory;
27  
28  /**
29   * A simple text-based implementation of the <code>Sink</code> interface.
30   * Useful for testing purposes.
31   */
32  public class TextSink extends AbstractSink {
33      private static final Logger LOGGER = LoggerFactory.getLogger(TextSink.class);
34  
35      /** For writing the result. */
36      private final Writer out;
37  
38      /** Constructor.
39       * @param writer The writer for writing the result.
40       */
41      public TextSink(Writer writer) {
42          this.out = writer;
43      }
44  
45      @Override
46      public void head_() {
47          writeln("end:head");
48      }
49  
50      @Override
51      public void body_() {
52          writeln("end:body");
53      }
54  
55      @Override
56      public void article_() {
57          writeln("end:article");
58      }
59  
60      @Override
61      public void navigation_() {
62          writeln("end:navigation");
63      }
64  
65      @Override
66      public void sidebar_() {
67          writeln("end:sidebar");
68      }
69  
70      @Override
71      public void list_() {
72          writeln("end:list");
73      }
74  
75      @Override
76      public void listItem_() {
77          writeln("end:listItem");
78      }
79  
80      @Override
81      public void numberedList_() {
82          writeln("end:numberedList");
83      }
84  
85      @Override
86      public void numberedListItem_() {
87          writeln("end:numberedListItem");
88      }
89  
90      @Override
91      public void definitionList_() {
92          writeln("end:definitionList");
93      }
94  
95      @Override
96      public void definitionListItem_() {
97          writeln("end:definitionListItem");
98      }
99  
100     @Override
101     public void definition_() {
102         writeln("end:definition");
103     }
104 
105     @Override
106     public void figure_() {
107         writeln("end:figure");
108     }
109 
110     @Override
111     public void table_() {
112         writeln("end:table");
113     }
114 
115     @Override
116     public void tableRows_() {
117         writeln("end:tableRows");
118     }
119 
120     @Override
121     public void tableRow_() {
122         writeln("end:tableRow");
123     }
124 
125     @Override
126     public void title_() {
127         writeln("end:title");
128     }
129 
130     @Override
131     public void author_() {
132         writeln("end:author");
133     }
134 
135     @Override
136     public void date_() {
137         writeln("end:date");
138     }
139 
140     @Override
141     public void header_() {
142         writeln("end:header");
143     }
144 
145     @Override
146     public void content_() {
147         writeln("end:content");
148     }
149 
150     @Override
151     public void footer_() {
152         writeln("end:footer");
153     }
154 
155     @Override
156     public void paragraph_() {
157         writeln("end:paragraph");
158     }
159 
160     @Override
161     public void data_() {
162         writeln("end:data");
163     }
164 
165     @Override
166     public void time_() {
167         writeln("end:time");
168     }
169 
170     @Override
171     public void address_() {
172         writeln("end:address");
173     }
174 
175     @Override
176     public void blockquote_() {
177         writeln("end:blockquote");
178     }
179 
180     @Override
181     public void division_() {
182         writeln("end:division");
183     }
184 
185     @Override
186     public void verbatim_() {
187         writeln("end:verbatim");
188     }
189 
190     @Override
191     public void definedTerm_() {
192         writeln("end:definedTerm");
193     }
194 
195     @Override
196     public void figureCaption_() {
197         writeln("end:figureCaption");
198     }
199 
200     @Override
201     public void tableCell_() {
202         writeln("end:tableCell");
203     }
204 
205     @Override
206     public void tableHeaderCell_() {
207         writeln("end:tableHeaderCell");
208     }
209 
210     @Override
211     public void tableCaption_() {
212         writeln("end:tableCaption");
213     }
214 
215     @Override
216     public void pageBreak() {
217         write("pageBreak");
218     }
219 
220     @Override
221     public void anchor_() {
222         writeln("end:anchor");
223     }
224 
225     @Override
226     public void link_() {
227         writeln("end:link");
228     }
229 
230     @Override
231     public void inline_() {
232         writeln("end:inline");
233     }
234 
235     @Override
236     public void italic() {
237         write("begin:italic");
238     }
239 
240     @Override
241     public void italic_() {
242         writeln("end:italic");
243     }
244 
245     @Override
246     public void bold() {
247         write("begin:bold");
248     }
249 
250     @Override
251     public void bold_() {
252         writeln("end:bold");
253     }
254 
255     @Override
256     public void monospaced() {
257         write("begin:monospaced");
258     }
259 
260     @Override
261     public void monospaced_() {
262         writeln("end:monospaced");
263     }
264 
265     @Override
266     public void nonBreakingSpace() {
267         write("nonBreakingSpace");
268     }
269 
270     @Override
271     public void rawText(String text) {
272         write("rawText: " + text);
273     }
274 
275     @Override
276     public void comment(String comment) {
277         write("comment: " + comment);
278     }
279 
280     @Override
281     public void flush() {
282         try {
283             out.flush();
284         } catch (IOException e) {
285             LOGGER.warn("Could not flush sink", e);
286         }
287     }
288 
289     @Override
290     public void close() {
291         try {
292             out.close();
293         } catch (IOException e) {
294             LOGGER.warn("Could not close sink", e);
295         }
296     }
297 
298     @Override
299     public void head(SinkEventAttributes attributes) {
300         writeln("begin:head");
301     }
302 
303     @Override
304     public void title(SinkEventAttributes attributes) {
305         writeln("begin:title");
306     }
307 
308     @Override
309     public void author(SinkEventAttributes attributes) {
310         writeln("begin:author");
311     }
312 
313     @Override
314     public void date(SinkEventAttributes attributes) {
315         writeln("begin:date");
316     }
317 
318     @Override
319     public void body(SinkEventAttributes attributes) {
320         writeln("begin:body");
321     }
322 
323     @Override
324     public void article(SinkEventAttributes attributes) {
325         writeln("begin:article");
326     }
327 
328     @Override
329     public void navigation(SinkEventAttributes attributes) {
330         writeln("begin:navigation");
331     }
332 
333     @Override
334     public void sidebar(SinkEventAttributes attributes) {
335         writeln("begin:head");
336     }
337 
338     @Override
339     public void section(int level, SinkEventAttributes attributes) {
340         write("begin:section" + level);
341     }
342 
343     @Override
344     public void section_(int level) {
345         writeln("end:section" + level);
346     }
347 
348     @Override
349     public void sectionTitle(int level, SinkEventAttributes attributes) {
350         write("begin:sectionTitle" + level);
351     }
352 
353     @Override
354     public void sectionTitle_(int level) {
355         writeln("end:sectionTitle" + level);
356     }
357 
358     @Override
359     public void header(SinkEventAttributes attributes) {
360         write("begin:header");
361     }
362 
363     @Override
364     public void content(SinkEventAttributes attributes) {
365         write("begin:content");
366     }
367 
368     @Override
369     public void footer(SinkEventAttributes attributes) {
370         write("begin:footer");
371     }
372 
373     @Override
374     public void list(SinkEventAttributes attributes) {
375         writeln("begin:list");
376     }
377 
378     @Override
379     public void listItem(SinkEventAttributes attributes) {
380         write("begin:listItem");
381     }
382 
383     @Override
384     public void numberedList(int numbering, SinkEventAttributes attributes) {
385         writeln("begin:numberedList, numbering: " + numbering);
386     }
387 
388     @Override
389     public void numberedListItem(SinkEventAttributes attributes) {
390         write("begin:numberedListItem");
391     }
392 
393     @Override
394     public void definitionList(SinkEventAttributes attributes) {
395         writeln("begin:definitionList");
396     }
397 
398     @Override
399     public void definitionListItem(SinkEventAttributes attributes) {
400         write("begin:definitionListItem");
401     }
402 
403     @Override
404     public void definition(SinkEventAttributes attributes) {
405         write("begin:definition");
406     }
407 
408     @Override
409     public void definedTerm(SinkEventAttributes attributes) {
410         write("begin:definedTerm");
411     }
412 
413     @Override
414     public void figure(SinkEventAttributes attributes) {
415         write("begin:figure" + SinkUtils.getAttributeString(attributes));
416     }
417 
418     @Override
419     public void figureCaption(SinkEventAttributes attributes) {
420         write("begin:figureCaption");
421     }
422 
423     @Override
424     public void figureGraphics(String src, SinkEventAttributes attributes) {
425         write("figureGraphics, name: " + src);
426     }
427 
428     @Override
429     public void table(SinkEventAttributes attributes) {
430         writeln("begin:table");
431     }
432 
433     @Override
434     public void tableRows(int[] justification, boolean grid) {
435         writeln("begin:tableRows");
436     }
437 
438     @Override
439     public void tableRow(SinkEventAttributes attributes) {
440         write("begin:tableRow");
441     }
442 
443     @Override
444     public void tableCell(SinkEventAttributes attributes) {
445         write("begin:tableCell");
446     }
447 
448     @Override
449     public void tableHeaderCell(SinkEventAttributes attributes) {
450         write("begin:tableHeaderCell");
451     }
452 
453     @Override
454     public void tableCaption(SinkEventAttributes attributes) {
455         write("begin:tableCaption");
456     }
457 
458     @Override
459     public void paragraph(SinkEventAttributes attributes) {
460         write("begin:paragraph");
461     }
462 
463     @Override
464     public void data(String value, SinkEventAttributes attributes) {
465         write("begin:data, value: " + value);
466     }
467 
468     @Override
469     public void time(String datetime, SinkEventAttributes attributes) {
470         write("begin:time, datetime: " + datetime);
471     }
472 
473     @Override
474     public void address(SinkEventAttributes attributes) {
475         write("begin:address");
476     }
477 
478     @Override
479     public void blockquote(SinkEventAttributes attributes) {
480         write("begin:blockquote");
481     }
482 
483     @Override
484     public void division(SinkEventAttributes attributes) {
485         write("begin:division");
486     }
487 
488     @Override
489     public void verbatim(SinkEventAttributes attributes) {
490         boolean source = false;
491 
492         if (attributes != null && attributes.isDefined(SinkEventAttributes.DECORATION)) {
493             source = "source"
494                     .equals(attributes
495                             .getAttribute(SinkEventAttributes.DECORATION)
496                             .toString());
497         }
498 
499         write("begin:verbatim, source: " + source);
500     }
501 
502     @Override
503     public void horizontalRule(SinkEventAttributes attributes) {
504         write("horizontalRule");
505     }
506 
507     @Override
508     public void anchor(String name, SinkEventAttributes attributes) {
509         write("begin:anchor, name: " + name);
510     }
511 
512     @Override
513     public void link(String name, SinkEventAttributes attributes) {
514         write("begin:link, name: " + name);
515     }
516 
517     @Override
518     public void inline(SinkEventAttributes attributes) {
519         write("begin:inline");
520     }
521 
522     @Override
523     public void lineBreak(SinkEventAttributes attributes) {
524         write("lineBreak");
525     }
526 
527     @Override
528     public void lineBreakOpportunity(SinkEventAttributes attributes) {
529         write("lineBreakOpportunity");
530     }
531 
532     @Override
533     public void text(String text, SinkEventAttributes attributes) {
534         write("text: " + text);
535     }
536 
537     @Override
538     public void unknown(String name, Object[] requiredParams, SinkEventAttributes attributes) {
539         write("unknown: " + name);
540     }
541 
542     /**
543      * Writes the given string + EOL.
544      *
545      * @param text The text to write.
546      */
547     private void write(String text) {
548         try {
549             out.write(text + EOL);
550         } catch (IOException e) {
551             LOGGER.warn("Could not write to sink", e);
552         }
553     }
554 
555     /**
556      * Writes the given string + two EOLs.
557      *
558      * @param text The text to write.
559      */
560     private void writeln(String text) {
561         write(text);
562         write(EOL);
563     }
564 }