1
2
3
4
5
6
7 package com.varmateo.yawg.spi;
8
9 import java.nio.file.Path;
10 import java.util.Objects;
11 import java.util.Optional;
12 import java.util.function.Function;
13
14
15
16
17
18 public final class PageContextBuilder {
19
20
21 private String _dirUrl;
22 private Function<Path, Optional<Template>> _templateFetcher;
23 private String _rootRelativeUrl;
24 private PageVarsBuilder _pageVarsBuilder;
25 private String _bakeId;
26
27
28
29
30
31 private PageContextBuilder() {
32
33 _dirUrl = null;
34 _templateFetcher = (path -> Optional.empty());
35 _rootRelativeUrl = null;
36 _pageVarsBuilder = PageVarsBuilder.create();
37 _bakeId = null;
38 }
39
40
41
42
43
44 private PageContextBuilder(final PageContext data) {
45
46 _dirUrl = data.dirUrl();
47 _templateFetcher = data::templateFor;
48 _rootRelativeUrl = data.rootRelativeUrl();
49 _pageVarsBuilder = PageVarsBuilder.create(data.pageVars());
50 _bakeId = data.bakeId();
51 }
52
53
54
55
56
57
58
59 public static PageContextBuilder create() {
60
61 return new PageContextBuilder();
62 }
63
64
65
66
67
68
69
70
71
72
73
74
75 public static PageContextBuilder create(final PageContext initialData) {
76
77 return new PageContextBuilder(initialData);
78 }
79
80
81
82
83
84 public PageContextBuilder dirUrl(final String dirUrl) {
85
86 _dirUrl = dirUrl;
87 return this;
88 }
89
90
91
92
93
94
95
96
97 public PageContextBuilder templateFetcher(
98 final Function<Path, Optional<Template>> templateFetcher) {
99
100 _templateFetcher = templateFetcher;
101 return this;
102 }
103
104
105
106
107
108 public PageContextBuilder rootRelativeUrl(final String rootRelativeUrl) {
109
110 _rootRelativeUrl = rootRelativeUrl;
111 return this;
112 }
113
114
115
116
117
118 public PageContextBuilder pageVars(final PageVars pageVars) {
119
120 _pageVarsBuilder = PageVarsBuilder.create(pageVars);
121 return this;
122 }
123
124
125
126
127
128
129
130
131
132
133
134
135
136 public PageContextBuilder addPageVars(final PageVars pageVars) {
137
138 _pageVarsBuilder.addPageVars(pageVars);
139 return this;
140 }
141
142
143
144
145
146
147
148
149
150
151
152
153
154 public PageContextBuilder addVar(
155 final String varName,
156 final Object varValue) {
157
158 _pageVarsBuilder.addVar(varName, varValue);
159 return this;
160 }
161
162
163
164
165
166 public PageContextBuilder bakeId(final String bakeId) {
167
168 _bakeId = bakeId;
169 return this;
170 }
171
172
173
174
175
176
177
178
179 public PageContext build() {
180
181 return new PageContextImpl(this);
182 }
183
184
185
186
187
188 private static final class PageContextImpl
189 implements PageContext {
190
191
192 private final String _dirUrl;
193 private final Function<Path, Optional<Template>> _templateFetcher;
194 private final PageVars _pageVars;
195 private final String _rootRelativeUrl;
196 private final String _bakeId;
197
198
199
200
201
202 PageContextImpl(final PageContextBuilder builder) {
203
204 _dirUrl = Objects.requireNonNull(builder._dirUrl);
205 _templateFetcher = builder._templateFetcher;
206 _rootRelativeUrl = Objects.requireNonNull(builder._rootRelativeUrl);
207 _pageVars = builder._pageVarsBuilder.build();
208 _bakeId = Objects.requireNonNull(builder._bakeId);
209 }
210
211
212
213
214
215 @Override
216 public String dirUrl() {
217 return _dirUrl;
218 }
219
220
221
222
223
224 @Override
225 public Optional<Template> templateFor(final Path path) {
226 return _templateFetcher.apply(path);
227 }
228
229
230
231
232
233 @Override
234 public PageVars pageVars() {
235 return _pageVars;
236 }
237
238
239
240
241
242 @Override
243 public String rootRelativeUrl() {
244 return _rootRelativeUrl;
245 }
246
247
248
249
250
251 @Override
252 public String bakeId() {
253 return _bakeId;
254 }
255
256 }
257
258 }