|
1 |
| package com.agical.rdoc.core.model.impl; |
|
2 |
| |
|
3 |
| import com.agical.rdoc.core.model.CodeBlock; |
|
4 |
| import com.agical.rdoc.core.model.CodeBlockBuilder; |
|
5 |
| import com.agical.rdoc.core.model.CodeFormatter; |
|
6 |
| import com.agical.rdoc.core.model.ModelFactory; |
|
7 |
| import com.agical.rdoc.core.model.TDDocCommentBuilder; |
|
8 |
| |
|
9 |
| public class CodeBlockBuilderImpl implements CodeBlockBuilder { |
|
10 |
| private boolean closeBlockOnEnd; |
|
11 |
| private ModelFactory modelFactory; |
|
12 |
| private final CodeBlock codeBlock; |
|
13 |
| private final CodeFormatter codeFormatter; |
|
14 |
| private final StringBuffer tabAndSpaceBuffer = new StringBuffer(); |
|
15 |
| private final StringBuffer newLineBuffer = new StringBuffer(); |
|
16 |
| |
|
17 |
168
| public CodeBlockBuilderImpl(ModelFactory modelFactory, CodeFormatter codeFormatter) {
|
|
18 |
168
| this.codeFormatter = codeFormatter;
|
|
19 |
168
| this.codeBlock = new CodeBlockImpl();
|
|
20 |
168
| closeBlockOnEnd = false;
|
|
21 |
168
| this.modelFactory = modelFactory;
|
|
22 |
| } |
|
23 |
| |
|
24 |
29
| public CodeBlockBuilderImpl(ModelFactory modelFactory, CodeBlock codeBlock, CodeFormatter codeFormatter) {
|
|
25 |
29
| this.codeFormatter = codeFormatter;
|
|
26 |
29
| this.codeBlock = codeBlock;
|
|
27 |
29
| closeBlockOnEnd = true;
|
|
28 |
29
| codeBlock.addCode('{');
|
|
29 |
29
| this.modelFactory = modelFactory;
|
|
30 |
| } |
|
31 |
| |
|
32 |
| |
|
33 |
29
| public CodeBlockBuilder beginBlock() {
|
|
34 |
29
| addCode("");
|
|
35 |
29
| return new CodeBlockBuilderImpl(modelFactory, codeBlock, codeFormatter);
|
|
36 |
| } |
|
37 |
| |
|
38 |
8
| public void primitive(String primitive) {
|
|
39 |
8
| addCode(codeFormatter.primitive(primitive));
|
|
40 |
| } |
|
41 |
| |
|
42 |
14
| public void reservedWord(String keyword) {
|
|
43 |
14
| addCode(codeFormatter.reservedWord(keyword));
|
|
44 |
| } |
|
45 |
| |
|
46 |
868
| public void identifier(String identifier) {
|
|
47 |
868
| addCode(codeFormatter.identifier(identifier));
|
|
48 |
| } |
|
49 |
| |
|
50 |
22
| public void number(String number) {
|
|
51 |
22
| addCode(codeFormatter.number(number));
|
|
52 |
| } |
|
53 |
| |
|
54 |
224
| public void string(String string) {
|
|
55 |
224
| addCode(codeFormatter.stringLiteral(string));
|
|
56 |
| } |
|
57 |
| |
|
58 |
3
| public void charLiteral(String literal) {
|
|
59 |
3
| addCode(codeFormatter.charLiteral(literal));
|
|
60 |
| } |
|
61 |
| |
|
62 |
29
| public void singleLineComment(String comment) {
|
|
63 |
29
| addCode(codeFormatter.singleLineComment(comment));
|
|
64 |
| } |
|
65 |
| |
|
66 |
2
| public void formalComment(String comment) {
|
|
67 |
2
| String formalComment = codeFormatter.formalComment(comment);
|
|
68 |
2
| addCode(formalComment);
|
|
69 |
| } |
|
70 |
| |
|
71 |
3358
| private void addCode(String code) {
|
|
72 |
3358
| codeBlock.addCode(tabAndSpaceBuffer.toString());
|
|
73 |
3358
| codeBlock.addCode(code);
|
|
74 |
3358
| clearTabAndSpaceBuffer();
|
|
75 |
| } |
|
76 |
| |
|
77 |
67
| public TDDocCommentBuilder beginTDDocComment(String identifier) {
|
|
78 |
67
| mark(identifier);
|
|
79 |
67
| return modelFactory.createDocComment(identifier);
|
|
80 |
| } |
|
81 |
| |
|
82 |
32
| public void end() {
|
|
83 |
32
| if (closeBlockOnEnd) {
|
|
84 |
29
| addCode("}");
|
|
85 |
| } |
|
86 |
32
| addCode(newLineBuffer.toString());
|
|
87 |
| } |
|
88 |
| |
|
89 |
10
| public String toString() {
|
|
90 |
10
| return codeBlock.toString();
|
|
91 |
| } |
|
92 |
| |
|
93 |
158
| public CodeBlock getCodeBlock() {
|
|
94 |
158
| return codeBlock;
|
|
95 |
| } |
|
96 |
| |
|
97 |
613
| public void newLine() {
|
|
98 |
613
| if( tabAndSpaceBuffer.length() == 0 ) {
|
|
99 |
441
| addCode(codeFormatter.newLine());
|
|
100 |
441
| clearNewLineBuffer();
|
|
101 |
| } else { |
|
102 |
172
| clearNewLineBuffer();
|
|
103 |
172
| newLineBuffer.append(codeFormatter.newLine());
|
|
104 |
| } |
|
105 |
613
| clearTabAndSpaceBuffer();
|
|
106 |
| } |
|
107 |
| |
|
108 |
3971
| private void clearTabAndSpaceBuffer() {
|
|
109 |
3971
| tabAndSpaceBuffer.delete(0, tabAndSpaceBuffer.length());
|
|
110 |
| } |
|
111 |
| |
|
112 |
613
| private void clearNewLineBuffer() {
|
|
113 |
613
| newLineBuffer.delete(0, newLineBuffer.length());
|
|
114 |
| } |
|
115 |
| |
|
116 |
| |
|
117 |
5035
| public void space() {
|
|
118 |
5035
| tabAndSpaceBuffer.append(codeFormatter.space());
|
|
119 |
| } |
|
120 |
| |
|
121 |
65
| public void tab() {
|
|
122 |
65
| tabAndSpaceBuffer.append(codeFormatter.tab());
|
|
123 |
| } |
|
124 |
| |
|
125 |
68
| public void mark(String mark) {
|
|
126 |
68
| codeBlock.mark(mark);
|
|
127 |
| } |
|
128 |
| |
|
129 |
1657
| public void other(String other) {
|
|
130 |
1657
| addCode(codeFormatter.other(other));
|
|
131 |
| } |
|
132 |
| |
|
133 |
151
| public void setModelFactory(ModelFactory modelFactory) {
|
|
134 |
151
| this.modelFactory = modelFactory;
|
|
135 |
| } |
|
136 |
| } |