Skip to content

Commit a7db997

Browse files
added visitor
1 parent d07bf9a commit a7db997

File tree

9 files changed

+182
-0
lines changed

9 files changed

+182
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
}

0 commit comments

Comments
 (0)