Skip to content

Commit d555e94

Browse files
committed
PR review
1 parent 02405fb commit d555e94

File tree

2 files changed

+84
-44
lines changed

2 files changed

+84
-44
lines changed

src/main/java/fr/wseduc/webutils/http/ProcessTemplateContext.java

Lines changed: 69 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,51 +9,82 @@
99
import java.util.Map;
1010

1111
/**
12-
* Container for all parameters needed for the template processinf
12+
* Container for all parameters needed for the template processing
1313
*/
14-
public class ProcessTemplateContext {
15-
16-
private HttpServerRequest request;
17-
private JsonObject params;
18-
private String templateString;
19-
private Reader reader;
20-
private boolean escapeHtml;
21-
private String defaultValue;
22-
private final Map<String, Mustache.Lambda> lambdas = new HashMap<>();
23-
24-
public ProcessTemplateContext request(HttpServerRequest request) {
14+
public final class ProcessTemplateContext {
15+
16+
private final HttpServerRequest request;
17+
private final JsonObject params;
18+
private final String templateString;
19+
private final Reader reader;
20+
private final boolean escapeHtml;
21+
private final String defaultValue;
22+
private final Map<String, Mustache.Lambda> lambdas;
23+
24+
private ProcessTemplateContext(HttpServerRequest request, JsonObject params, String templateString, Reader reader,
25+
boolean escapeHtml, String defaultValue, Map<String, Mustache.Lambda> lambdas) {
2526
this.request = request;
26-
return this;
27-
}
28-
29-
public ProcessTemplateContext escapeHtml(boolean escapeHtml) {
30-
this.escapeHtml = escapeHtml;
31-
return this;
32-
}
33-
34-
public ProcessTemplateContext setDefaultValue(String defaultValue) {
35-
this.defaultValue = defaultValue;
36-
return this;
37-
}
38-
39-
public ProcessTemplateContext params(JsonObject params) {
4027
this.params = params;
41-
return this;
42-
}
43-
44-
public ProcessTemplateContext templateString(String templateString) {
4528
this.templateString = templateString;
46-
return this;
47-
}
48-
49-
public ProcessTemplateContext reader(Reader reader) {
5029
this.reader = reader;
51-
return this;
30+
this.escapeHtml = escapeHtml;
31+
this.defaultValue = defaultValue;
32+
this.lambdas = new HashMap<>(lambdas);
5233
}
5334

54-
public ProcessTemplateContext lambdas(Map<String, Mustache.Lambda> lambdas) {
55-
this.lambdas.putAll(lambdas);
56-
return this;
35+
public static class Builder {
36+
37+
private HttpServerRequest request;
38+
private JsonObject params;
39+
private String templateString;
40+
private Reader reader;
41+
private boolean escapeHtml;
42+
private String defaultValue;
43+
private final Map<String, Mustache.Lambda> lambdas = new HashMap<>();
44+
45+
public Builder request(HttpServerRequest request) {
46+
this.request = request;
47+
return this;
48+
}
49+
50+
public Builder escapeHtml(boolean escapeHtml) {
51+
this.escapeHtml = escapeHtml;
52+
return this;
53+
}
54+
55+
public Builder setDefaultValue(String defaultValue) {
56+
this.defaultValue = defaultValue;
57+
return this;
58+
}
59+
60+
public Builder params(JsonObject params) {
61+
this.params = params;
62+
return this;
63+
}
64+
65+
public Builder templateString(String templateString) {
66+
this.templateString = templateString;
67+
return this;
68+
}
69+
70+
public Builder reader(Reader reader) {
71+
this.reader = reader;
72+
return this;
73+
}
74+
75+
public Builder lambdas(Map<String, Mustache.Lambda> lambdas) {
76+
this.lambdas.putAll(lambdas);
77+
return this;
78+
}
79+
80+
public HttpServerRequest request() {
81+
return request;
82+
}
83+
84+
public ProcessTemplateContext build() {
85+
return new ProcessTemplateContext(request, params, templateString, reader, escapeHtml, defaultValue, lambdas);
86+
}
87+
5788
}
5889

5990
public HttpServerRequest request() {

src/main/java/fr/wseduc/webutils/http/Renders.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ protected void setLambdaTemplateRequest(final HttpServerRequest request) {
119119
this.templateProcessor.setLambda("datetime", new LocaleDateLambda(I18n.acceptLanguage(request)));
120120
}
121121

122+
/**
123+
* Create lambda from request for mustache. These lambdas should be used with TemplateProcessorContext and method
124+
* that use it in order to avoid race condition on template processing
125+
* @param request HttpRequest of the user to set various dependent request lambda (host, domain, language, etc..)
126+
* @return Map with request dependent lambda
127+
*/
122128
protected Map<String, Mustache.Lambda> getLambdasFromRequest(final HttpServerRequest request) {
123129
Map<String, Mustache.Lambda> lambdas = new HashMap<>();
124130

@@ -166,12 +172,15 @@ public void renderTemplateView(final HttpServerRequest request, JsonObject param
166172
mergeLambdas.putAll(lambdas);
167173
mergeLambdas.putAll(staticLambdas);
168174

169-
ProcessTemplateContext context = new ProcessTemplateContext()
175+
ProcessTemplateContext.Builder context = new ProcessTemplateContext.Builder()
170176
.escapeHtml(true)
171177
.reader(r)
172178
.lambdas( mergeLambdas)
173179
.request(request);
174-
processTemplateWithLambdas(context, resourceName,writer -> {
180+
181+
context.templateString(genTemplateName(resourceName, request));
182+
183+
templateProcessor.processTemplate(context.build(), writer -> {
175184
if (writer != null) {
176185
request.response().putHeader("content-type", "text/html; charset=utf-8");
177186
request.response().setStatusCode(status);
@@ -274,15 +283,15 @@ public void processTemplate(final HttpServerRequest request, JsonObject p, Strin
274283
this.templateProcessor.escapeHTML(escapeHTML).processTemplate(this.genTemplateName(resourceName, request), p, handler);
275284
}
276285

277-
public void processTemplateWithLambdas(ProcessTemplateContext context, Handler<Writer> handler) {
286+
public void processTemplateWithLambdas(ProcessTemplateContext.Builder context, Handler<Writer> handler) {
278287
context.lambdas(getLambdasFromRequest(context.request()));
279-
this.templateProcessor.processTemplate(context, handler);
288+
this.templateProcessor.processTemplate(context.build(), handler);
280289
}
281290

282-
public void processTemplateWithLambdas(ProcessTemplateContext context, String resourceName, Handler<Writer> handler) {
291+
public void processTemplateWithLambdas(ProcessTemplateContext.Builder context, String resourceName, Handler<Writer> handler) {
283292
context.lambdas(getLambdasFromRequest(context.request()));
284293
context.templateString(genTemplateName(resourceName, context.request()));
285-
this.templateProcessor.processTemplate(context, handler);
294+
this.templateProcessor.processTemplate(context.build(), handler);
286295
}
287296

288297
private String genTemplateName(final String resourceName, final HttpServerRequest request) {

0 commit comments

Comments
 (0)