1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.tiles.request.freemarker.autotag;
22
23 import java.util.Map;
24
25 import org.apache.tiles.autotag.core.runtime.ModelBody;
26 import org.apache.tiles.autotag.core.runtime.AutotagRuntime;
27 import org.apache.tiles.request.Request;
28 import org.apache.tiles.request.freemarker.FreemarkerRequest;
29 import org.apache.tiles.request.freemarker.FreemarkerRequestUtil;
30
31 import freemarker.core.Environment;
32 import freemarker.template.TemplateDirectiveBody;
33 import freemarker.template.TemplateDirectiveModel;
34 import freemarker.template.TemplateModel;
35
36
37
38
39 public class FreemarkerAutotagRuntime implements AutotagRuntime<Request>, TemplateDirectiveModel {
40
41 private Environment env;
42 private TemplateDirectiveBody body;
43 private Map<String, TemplateModel> params;
44
45
46 @SuppressWarnings("unchecked")
47 @Override
48 public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) {
49 this.env = env;
50 this.body = body;
51 this.params = params;
52 }
53
54
55 @Override
56 public Request createRequest() {
57 return FreemarkerRequest.createServletFreemarkerRequest(FreemarkerRequestUtil.getApplicationContext(env), env);
58 }
59
60
61 @Override
62 public ModelBody createModelBody() {
63 return new FreemarkerModelBody(env.getOut(), body);
64 }
65
66
67 @Override
68 public <T> T getParameter(String name, Class<T> type, T defaultValue) {
69 return FreemarkerUtil.getAsObject((TemplateModel)params.get(name), type, defaultValue);
70 }
71 }