1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.tiles.mvel;
23
24 import java.util.Map;
25
26 import org.apache.tiles.context.TilesRequestContextHolder;
27 import org.apache.tiles.request.Request;
28 import org.mvel2.integration.VariableResolver;
29
30
31
32
33
34
35
36 public class ScopeVariableResolverFactory extends
37 ReadOnlyVariableResolverFactory {
38
39
40
41
42 private static final int SCOPE_SUFFIX_LENGTH = 5;
43
44
45
46
47
48
49
50 public ScopeVariableResolverFactory(TilesRequestContextHolder requestHolder) {
51 super(requestHolder);
52 }
53
54
55 @Override
56 public VariableResolver createVariableResolver(String name) {
57 return new ScopeVariableResolver(name);
58 }
59
60
61 public boolean isTarget(String name) {
62 Request request = requestHolder.getTilesRequestContext();
63 if (name.endsWith("Scope")) {
64 String scopeName = name.substring(0, name.length() - SCOPE_SUFFIX_LENGTH);
65 for (String availableScope : request.getAvailableScopes()) {
66 if (scopeName.equals(availableScope)) {
67 return true;
68 }
69 }
70 }
71 return false;
72 }
73
74
75
76
77
78
79
80 private class ScopeVariableResolver extends ReadOnlyVariableResolver {
81
82
83
84
85
86
87
88 public ScopeVariableResolver(String name) {
89 super(name);
90 }
91
92
93 @SuppressWarnings("rawtypes")
94 public Class getType() {
95 return Map.class;
96 }
97
98
99 public Object getValue() {
100 Request request = requestHolder.getTilesRequestContext();
101 return request.getContext(name.substring(0, name.length() - SCOPE_SUFFIX_LENGTH));
102 }
103 }
104 }