001package org.apache.maven.doxia.sink.impl;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *   http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.io.IOException;
023import java.io.Writer;
024
025import org.apache.maven.doxia.sink.SinkEventAttributes;
026import org.apache.maven.doxia.sink.impl.AbstractSink;
027import org.apache.maven.doxia.sink.impl.SinkUtils;
028import org.slf4j.Logger;
029import org.slf4j.LoggerFactory;
030
031/**
032 * A simple text-based implementation of the <code>Sink</code> interface.
033 * Useful for testing purposes.
034 */
035public class TextSink
036    extends AbstractSink
037{
038    private static final Logger LOGGER = LoggerFactory.getLogger( TextSink.class );
039
040    /** For writing the result. */
041    private final Writer out;
042
043    /** Constructor.
044     * @param writer The writer for writing the result.
045     */
046    public TextSink( Writer writer )
047    {
048        this.out = writer;
049    }
050
051
052    @Override
053    public void head()
054    {
055        writeln( "begin:head" );
056    }
057
058    @Override
059    public void head_()
060    {
061        writeln( "end:head" );
062    }
063
064    @Override
065    public void body()
066    {
067        writeln( "begin:body" );
068    }
069
070    @Override
071    public void body_()
072    {
073        writeln( "end:body" );
074    }
075
076    @Override
077    public void article()
078    {
079        writeln( "begin:article" );
080    }
081
082    @Override
083    public void article_()
084    {
085        writeln( "end:article" );
086    }
087
088    @Override
089    public void navigation()
090    {
091        writeln( "begin:navigation" );
092    }
093
094    @Override
095    public void navigation_()
096    {
097        writeln( "end:navigation" );
098    }
099
100    @Override
101    public void sidebar()
102    {
103        writeln( "begin:sidebar" );
104    }
105
106    @Override
107    public void sidebar_()
108    {
109        writeln( "end:sidebar" );
110    }
111
112    @Override
113    public void section1()
114    {
115        write( "begin:section1" );
116    }
117
118    @Override
119    public void section1_()
120    {
121        writeln( "end:section1" );
122    }
123
124    @Override
125    public void section2()
126    {
127        write( "begin:section2" );
128    }
129
130    @Override
131    public void section2_()
132    {
133        writeln( "end:section2" );
134    }
135
136    @Override
137    public void section3()
138    {
139        write( "begin:section3" );
140    }
141
142    @Override
143    public void section3_()
144    {
145        writeln( "end:section3" );
146    }
147
148    @Override
149    public void section4()
150    {
151        write( "begin:section4" );
152    }
153
154    @Override
155    public void section4_()
156    {
157        writeln( "end:section4" );
158    }
159
160    @Override
161    public void section5()
162    {
163        write( "begin:section5" );
164    }
165
166    @Override
167    public void section5_()
168    {
169        writeln( "end:section5" );
170    }
171
172    @Override
173    public void section6()
174    {
175        write( "begin:section6" );
176    }
177
178    @Override
179    public void section6_()
180    {
181        writeln( "end:section6" );
182    }
183
184    @Override
185    public void list()
186    {
187        writeln( "begin:list" );
188    }
189
190    @Override
191    public void list_()
192    {
193        writeln( "end:list" );
194    }
195
196    @Override
197    public void listItem()
198    {
199        write( "begin:listItem" );
200    }
201
202    @Override
203    public void listItem_()
204    {
205        writeln( "end:listItem" );
206    }
207
208    @Override
209    public void numberedList( int numbering )
210    {
211        writeln( "begin:numberedList, numbering: " + numbering );
212    }
213
214    @Override
215    public void numberedList_()
216    {
217        writeln( "end:numberedList" );
218    }
219
220    @Override
221    public void numberedListItem()
222    {
223        write( "begin:numberedListItem" );
224    }
225
226    @Override
227    public void numberedListItem_()
228    {
229        writeln( "end:numberedListItem" );
230    }
231
232    @Override
233    public void definitionList()
234    {
235        writeln( "begin:definitionList" );
236    }
237
238    @Override
239    public void definitionList_()
240    {
241        writeln( "end:definitionList" );
242    }
243
244    @Override
245    public void definitionListItem()
246    {
247        write( "begin:definitionListItem" );
248    }
249
250    @Override
251    public void definitionListItem_()
252    {
253        writeln( "end:definitionListItem" );
254    }
255
256    @Override
257    public void definition()
258    {
259        write( "begin:definition" );
260    }
261
262    @Override
263    public void definition_()
264    {
265        writeln( "end:definition" );
266    }
267
268    @Override
269    public void figure()
270    {
271        write( "begin:figure" );
272    }
273
274    @Override
275    public void figure_()
276    {
277        writeln( "end:figure" );
278    }
279
280    @Override
281    public void table()
282    {
283        writeln( "begin:table" );
284    }
285
286    @Override
287    public void table_()
288    {
289        writeln( "end:table" );
290    }
291
292    @Override
293    public void tableRows( int[] justification, boolean grid )
294    {
295        writeln( "begin:tableRows" );
296    }
297
298    @Override
299    public void tableRows_()
300    {
301        writeln( "end:tableRows" );
302    }
303
304    @Override
305    public void tableRow()
306    {
307        write( "begin:tableRow" );
308    }
309
310    @Override
311    public void tableRow_()
312    {
313        writeln( "end:tableRow" );
314    }
315
316    @Override
317    public void title()
318    {
319        write( "begin:title" );
320    }
321
322    @Override
323    public void title_()
324    {
325        writeln( "end:title" );
326    }
327
328    @Override
329    public void author()
330    {
331        write( "begin:author" );
332    }
333
334    @Override
335    public void author_()
336    {
337        writeln( "end:author" );
338    }
339
340    @Override
341    public void date()
342    {
343        write( "begin:date" );
344    }
345
346    @Override
347    public void date_()
348    {
349        writeln( "end:date" );
350    }
351
352    @Override
353    public void sectionTitle()
354    {
355        write( "begin:sectionTitle" );
356    }
357
358    @Override
359    public void sectionTitle_()
360    {
361        writeln( "end:sectionTitle" );
362    }
363
364    @Override
365    public void sectionTitle1()
366    {
367        write( "begin:sectionTitle1" );
368    }
369
370    @Override
371    public void sectionTitle1_()
372    {
373        writeln( "end:sectionTitle1" );
374    }
375
376    @Override
377    public void sectionTitle2()
378    {
379        write( "begin:sectionTitle2" );
380    }
381
382    @Override
383    public void sectionTitle2_()
384    {
385        writeln( "end:sectionTitle2" );
386    }
387
388    @Override
389    public void sectionTitle3()
390    {
391        write( "begin:sectionTitle3" );
392    }
393
394    @Override
395    public void sectionTitle3_()
396    {
397        writeln( "end:sectionTitle3" );
398    }
399
400    @Override
401    public void sectionTitle4()
402    {
403        write( "begin:sectionTitle4" );
404    }
405
406    @Override
407    public void sectionTitle4_()
408    {
409        writeln( "end:sectionTitle4" );
410    }
411
412    @Override
413    public void sectionTitle5()
414    {
415        write( "begin:sectionTitle5" );
416    }
417
418    @Override
419    public void sectionTitle5_()
420    {
421        writeln( "end:sectionTitle5" );
422    }
423
424    @Override
425    public void sectionTitle6()
426    {
427        write( "begin:sectionTitle6" );
428    }
429
430    @Override
431    public void sectionTitle6_()
432    {
433        writeln( "end:sectionTitle6" );
434    }
435
436    @Override
437    public void header()
438    {
439        write( "begin:header" );
440    }
441
442    @Override
443    public void header_()
444    {
445        writeln( "end:header" );
446    }
447
448    @Override
449    public void content()
450    {
451        write( "begin:content" );
452    }
453
454    @Override
455    public void content_()
456    {
457        writeln( "end:content" );
458    }
459
460    @Override
461    public void footer()
462    {
463        write( "begin:footer" );
464    }
465
466    @Override
467    public void footer_()
468    {
469        writeln( "end:footer" );
470    }
471
472    @Override
473    public void paragraph()
474    {
475        write( "begin:paragraph" );
476    }
477
478    @Override
479    public void paragraph_()
480    {
481        writeln( "end:paragraph" );
482    }
483
484    @Override
485    public void data( String value )
486    {
487        write( "begin:data, value: " + value );
488    }
489
490    @Override
491    public void data_()
492    {
493        writeln( "end:data" );
494    }
495
496    @Override
497    public void time( String datetime )
498    {
499        write( "begin:time, datetime: " + datetime );
500    }
501
502    @Override
503    public void time_()
504    {
505        writeln( "end:time" );
506    }
507
508    @Override
509    public void address()
510    {
511        write( "begin:address" );
512    }
513
514    @Override
515    public void address_()
516    {
517        writeln( "end:address" );
518    }
519
520    @Override
521    public void blockquote()
522    {
523        write( "begin:blockquote" );
524    }
525
526    @Override
527    public void blockquote_()
528    {
529        writeln( "end:blockquote" );
530    }
531
532    @Override
533    public void division()
534    {
535        write( "begin:division" );
536    }
537
538    @Override
539    public void division_()
540    {
541        writeln( "end:division" );
542    }
543
544    @Override
545    public void verbatim_()
546    {
547        writeln( "end:verbatim" );
548    }
549
550    @Override
551    public void definedTerm()
552    {
553        write( "begin:definedTerm" );
554    }
555
556    @Override
557    public void definedTerm_()
558    {
559        writeln( "end:definedTerm" );
560    }
561
562    @Override
563    public void figureCaption()
564    {
565        write( "begin:figureCaption" );
566    }
567
568    @Override
569    public void figureCaption_()
570    {
571        writeln( "end:figureCaption" );
572    }
573
574    @Override
575    public void tableCell()
576    {
577        write( "begin:tableCell" );
578    }
579
580    @Override
581    public void tableCell_()
582    {
583        writeln( "end:tableCell" );
584    }
585
586    @Override
587    public void tableHeaderCell()
588    {
589        write( "begin:tableHeaderCell" );
590    }
591
592    @Override
593    public void tableHeaderCell_()
594    {
595        writeln( "end:tableHeaderCell" );
596    }
597
598    @Override
599    public void tableCaption()
600    {
601        write( "begin:tableCaption" );
602    }
603
604    @Override
605    public void tableCaption_()
606    {
607        writeln( "end:tableCaption" );
608    }
609
610    @Override
611    public void figureGraphics( String name )
612    {
613        write( "figureGraphics, name: " + name );
614    }
615
616    @Override
617    public void horizontalRule()
618    {
619        write( "horizontalRule" );
620    }
621
622    @Override
623    public void pageBreak()
624    {
625        write( "pageBreak" );
626    }
627
628    @Override
629    public void anchor( String name )
630    {
631        write( "begin:anchor, name: " + name  );
632    }
633
634    @Override
635    public void anchor_()
636    {
637        writeln( "end:anchor" );
638    }
639
640    @Override
641    public void link( String name )
642    {
643        write( "begin:link, name: " + name  );
644    }
645
646    @Override
647    public void link_()
648    {
649        writeln( "end:link" );
650    }
651
652    @Override
653    public void inline()
654    {
655        write( "begin:inline" );
656    }
657
658    @Override
659    public void inline_()
660    {
661        writeln( "end:inline" );
662    }
663
664    @Override
665    public void italic()
666    {
667        write( "begin:italic" );
668    }
669
670    @Override
671    public void italic_()
672    {
673        writeln( "end:italic" );
674    }
675
676    @Override
677    public void bold()
678    {
679        write( "begin:bold" );
680    }
681
682    @Override
683    public void bold_()
684    {
685        writeln( "end:bold" );
686    }
687
688    @Override
689    public void monospaced()
690    {
691        write( "begin:monospaced" );
692    }
693
694    @Override
695    public void monospaced_()
696    {
697        writeln( "end:monospaced" );
698    }
699
700    @Override
701    public void lineBreak()
702    {
703        write( "lineBreak" );
704    }
705
706    @Override
707    public void lineBreakOpportunity()
708    {
709        write( "lineBreakOpportunity" );
710    }
711
712    @Override
713    public void nonBreakingSpace()
714    {
715        write( "nonBreakingSpace" );
716    }
717
718    @Override
719    public void text( String text )
720    {
721        write( "text: " + text );
722    }
723
724    @Override
725    public void rawText( String text )
726    {
727        write( "rawText: " + text );
728    }
729
730    @Override
731    public void comment( String comment )
732    {
733        write( "comment: " + comment );
734    }
735
736    @Override
737    public void flush()
738    {
739        try
740        {
741            out.flush();
742        }
743        catch ( IOException e )
744        {
745            LOGGER.warn( "Could not flush sink", e );
746        }
747    }
748
749    @Override
750    public void close()
751    {
752        try
753        {
754            out.close();
755        }
756        catch ( IOException e )
757        {
758            LOGGER.warn( "Could not close sink", e );
759        }
760    }
761
762    @Override
763    public void head( SinkEventAttributes attributes )
764    {
765        head();
766    }
767
768    @Override
769    public void title( SinkEventAttributes attributes )
770    {
771        title();
772    }
773
774    @Override
775    public void author( SinkEventAttributes attributes )
776    {
777        author();
778    }
779
780    @Override
781    public void date( SinkEventAttributes attributes )
782    {
783        date();
784    }
785
786    @Override
787    public void body( SinkEventAttributes attributes )
788    {
789        body();
790    }
791
792    @Override
793    public void article( SinkEventAttributes attributes )
794    {
795        article();
796    }
797
798    @Override
799    public void navigation( SinkEventAttributes attributes )
800    {
801        navigation();
802    }
803
804    @Override
805    public void sidebar( SinkEventAttributes attributes )
806    {
807        sidebar();
808    }
809
810    @Override
811    public void section( int level, SinkEventAttributes attributes )
812    {
813        write( "begin:section" + level );
814    }
815
816    @Override
817    public void section_( int level )
818    {
819        writeln( "end:section" + level );
820    }
821
822    @Override
823    public void sectionTitle( int level, SinkEventAttributes attributes )
824    {
825        write( "begin:sectionTitle" + level );
826    }
827
828    @Override
829    public void sectionTitle_( int level )
830    {
831        writeln( "end:sectionTitle" + level );
832    }
833
834    @Override
835    public void header( SinkEventAttributes attributes )
836    {
837        header();
838    }
839
840    @Override
841    public void content( SinkEventAttributes attributes )
842    {
843        content();
844    }
845
846    @Override
847    public void footer( SinkEventAttributes attributes )
848    {
849        footer();
850    }
851
852    @Override
853    public void list( SinkEventAttributes attributes )
854    {
855        list();
856    }
857
858    @Override
859    public void listItem( SinkEventAttributes attributes )
860    {
861        listItem();
862    }
863
864    @Override
865    public void numberedList( int numbering, SinkEventAttributes attributes )
866    {
867        numberedList( numbering );
868    }
869
870    @Override
871    public void numberedListItem( SinkEventAttributes attributes )
872    {
873        numberedListItem();
874    }
875
876    @Override
877    public void definitionList( SinkEventAttributes attributes )
878    {
879        definitionList();
880    }
881
882    @Override
883    public void definitionListItem( SinkEventAttributes attributes )
884    {
885        definitionListItem();
886    }
887
888    @Override
889    public void definition( SinkEventAttributes attributes )
890    {
891        definition();
892    }
893
894    @Override
895    public void definedTerm( SinkEventAttributes attributes )
896    {
897        definedTerm();
898    }
899
900    @Override
901    public void figure( SinkEventAttributes attributes )
902    {
903        write( "begin:figure" + SinkUtils.getAttributeString( attributes ) );
904    }
905
906    @Override
907    public void figureCaption( SinkEventAttributes attributes )
908    {
909        figureCaption();
910    }
911
912    @Override
913    public void figureGraphics( String src, SinkEventAttributes attributes )
914    {
915        figureGraphics( src );
916    }
917
918    @Override
919    public void table( SinkEventAttributes attributes )
920    {
921        table();
922    }
923
924    @Override
925    public void tableRow( SinkEventAttributes attributes )
926    {
927        tableRow();
928    }
929
930    @Override
931    public void tableCell( SinkEventAttributes attributes )
932    {
933        tableCell();
934    }
935
936    @Override
937    public void tableHeaderCell( SinkEventAttributes attributes )
938    {
939        tableHeaderCell();
940    }
941
942    @Override
943    public void tableCaption( SinkEventAttributes attributes )
944    {
945        tableCaption();
946    }
947
948    @Override
949    public void paragraph( SinkEventAttributes attributes )
950    {
951        paragraph();
952    }
953
954    @Override
955    public void data( String value, SinkEventAttributes attributes )
956    {
957        data( value );
958    }
959
960    @Override
961    public void time( String datetime, SinkEventAttributes attributes )
962    {
963        time( datetime );
964    }
965
966    @Override
967    public void address( SinkEventAttributes attributes )
968    {
969        address();
970    }
971
972    @Override
973    public void blockquote( SinkEventAttributes attributes )
974    {
975        blockquote();
976    }
977
978    @Override
979    public void division( SinkEventAttributes attributes )
980    {
981        division();
982    }
983
984    @Override
985    public void verbatim( SinkEventAttributes attributes )
986    {
987        boolean boxed = false;
988
989        if ( attributes != null && attributes.isDefined( SinkEventAttributes.DECORATION ) )
990        {
991            boxed = "boxed".equals(
992                attributes.getAttribute( SinkEventAttributes.DECORATION ).toString() );
993        }
994
995        write( "begin:verbatim, boxed: " + boxed );
996    }
997
998    @Override
999    public void horizontalRule( SinkEventAttributes attributes )
1000    {
1001        horizontalRule();
1002    }
1003
1004    @Override
1005    public void anchor( String name, SinkEventAttributes attributes )
1006    {
1007        anchor( name );
1008    }
1009
1010    @Override
1011    public void link( String name, SinkEventAttributes attributes )
1012    {
1013        link( name );
1014    }
1015
1016    @Override
1017    public void inline( SinkEventAttributes attributes )
1018    {
1019        inline();
1020    }
1021
1022    @Override
1023    public void lineBreak( SinkEventAttributes attributes )
1024    {
1025        lineBreak();
1026    }
1027
1028    @Override
1029    public void lineBreakOpportunity( SinkEventAttributes attributes )
1030    {
1031        lineBreakOpportunity();
1032    }
1033
1034    @Override
1035    public void text( String text, SinkEventAttributes attributes )
1036    {
1037        text( text );
1038    }
1039
1040    @Override
1041    public void unknown( String name, Object[] requiredParams, SinkEventAttributes attributes )
1042    {
1043        write( "unknown: " + name );
1044    }
1045
1046    /**
1047     * Writes the given string + EOL.
1048     *
1049     * @param text The text to write.
1050     */
1051    private void write( String text )
1052    {
1053        try
1054        {
1055            out.write( text + EOL );
1056        }
1057        catch ( IOException e )
1058        {
1059            LOGGER.warn( "Could not write to sink", e );
1060        }
1061    }
1062
1063    /**
1064     * Writes the given string + two EOLs.
1065     *
1066     * @param text The text to write.
1067     */
1068    private void writeln( String text )
1069    {
1070        write( text );
1071        write( EOL );
1072    }
1073}