File tree Expand file tree Collapse file tree 9 files changed +182
-0
lines changed
main/java/in/ashwanik/pdp/visitor
test/java/in/ashwanik/pdp/visitor Expand file tree Collapse file tree 9 files changed +182
-0
lines changed Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ public class BoldText extends DocumentPart {
4
+ BoldText (String text ) {
5
+ super (text );
6
+ }
7
+
8
+ @ Override
9
+ void accept (Visitor visitor ) {
10
+ visitor .visit (this );
11
+ }
12
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ import java .util .ArrayList ;
4
+ import java .util .List ;
5
+
6
+ class Document {
7
+ private List <DocumentPart > parts ;
8
+
9
+ Document () {
10
+ parts = new ArrayList <>();
11
+ }
12
+
13
+ void add (DocumentPart documentPart ) {
14
+ parts .add (documentPart );
15
+ }
16
+
17
+ void clear () {
18
+ parts .clear ();
19
+ }
20
+
21
+ void generate (Visitor visitor ) {
22
+ parts .forEach (x -> x .accept (visitor ));
23
+ }
24
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ import lombok .Getter ;
4
+
5
+ @ Getter
6
+ abstract class DocumentPart {
7
+ private final String text ;
8
+
9
+ DocumentPart (String text ) {
10
+ this .text = text ;
11
+ }
12
+
13
+ abstract void accept (Visitor visitor );
14
+
15
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ public class HtmlVisitor implements Visitor {
4
+
5
+ private StringBuilder output ;
6
+
7
+ HtmlVisitor () {
8
+ output = new StringBuilder ();
9
+ }
10
+
11
+ String getOutput () {
12
+ return output .toString ();
13
+ }
14
+
15
+ @ Override
16
+ public void visit (PlainText plainText ) {
17
+ output .append (plainText .getText ());
18
+ }
19
+
20
+ @ Override
21
+ public void visit (BoldText boldText ) {
22
+ output .append ("<b>" );
23
+ output .append (boldText );
24
+ output .append ("</b>" );
25
+ }
26
+
27
+ @ Override
28
+ public void visit (HyperLink hyperLink ) {
29
+ output .append ("<a" );
30
+ output .append (" href='" );
31
+ output .append (hyperLink .getUrl ());
32
+ output .append ("'> " );
33
+ output .append (hyperLink .getText ());
34
+ output .append ("</a>" );
35
+ }
36
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ import lombok .Getter ;
4
+
5
+ @ Getter
6
+ class HyperLink extends DocumentPart {
7
+ private String url ;
8
+
9
+ HyperLink (String text ,
10
+ String url ) {
11
+ super (text );
12
+ this .url = url ;
13
+ }
14
+
15
+ @ Override
16
+ void accept (Visitor visitor ) {
17
+ visitor .visit (this );
18
+ }
19
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ public class MarkDownVisitor implements Visitor {
4
+
5
+ private StringBuilder output ;
6
+
7
+ MarkDownVisitor () {
8
+ output = new StringBuilder ();
9
+ }
10
+
11
+ String getOutput () {
12
+ return output .toString ();
13
+ }
14
+
15
+ @ Override
16
+ public void visit (PlainText plainText ) {
17
+ output .append (plainText .getText ());
18
+ }
19
+
20
+ @ Override
21
+ public void visit (BoldText boldText ) {
22
+ output .append ("**" );
23
+ output .append (boldText );
24
+ output .append ("**" );
25
+ }
26
+
27
+ @ Override
28
+ public void visit (HyperLink hyperLink ) {
29
+ output .append ("[" );
30
+ output .append (hyperLink .getUrl ());
31
+ output .append ("]" );
32
+ output .append ("(" );
33
+ output .append (hyperLink .getText ());
34
+ output .append (")" );
35
+ }
36
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ public class PlainText extends DocumentPart {
4
+ PlainText (String text ) {
5
+ super (text );
6
+ }
7
+
8
+ @ Override
9
+ void accept (Visitor visitor ) {
10
+ visitor .visit (this );
11
+ }
12
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ interface Visitor {
4
+ void visit (PlainText plainText );
5
+
6
+ void visit (BoldText boldText );
7
+
8
+ void visit (HyperLink hyperLink );
9
+ }
Original file line number Diff line number Diff line change
1
+ package in .ashwanik .pdp .visitor ;
2
+
3
+ import org .junit .Test ;
4
+
5
+ import static org .assertj .core .api .AssertionsForClassTypes .assertThat ;
6
+
7
+ public class DocumentUnitTest {
8
+ @ Test
9
+ public void testDocumentConverter () {
10
+ Document document = new Document ();
11
+ document .add (new PlainText ("hello" ));
12
+ document .add (new BoldText ("hello" ));
13
+ document .add (new HyperLink ("hello" , "http://google.com" ));
14
+
15
+ HtmlVisitor visitor = new HtmlVisitor ();
16
+ document .generate (visitor );
17
+ assertThat (visitor .getOutput ()).isNotBlank ();
18
+ }
19
+ }
You can’t perform that action at this time.
0 commit comments