1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.controller;
17
18 import static org.seasar.cubby.CubbyConstants.RES_MESSAGES;
19
20 import java.util.Locale;
21 import java.util.Map;
22 import java.util.ResourceBundle;
23
24 import javax.servlet.http.HttpServletRequest;
25
26 import org.seasar.framework.container.SingletonS2Container;
27 import org.seasar.framework.util.ResourceBundleUtil;
28
29
30
31
32
33
34
35 public class ThreadContext {
36
37
38 private static final ThreadLocal<ThreadContext> CONTEXT = new ThreadLocal<ThreadContext>() {
39
40 @Override
41 protected ThreadContext initialValue() {
42 return new ThreadContext();
43 }
44
45 };
46
47
48
49
50 public static void remove() {
51 CONTEXT.remove();
52 }
53
54
55
56
57
58
59 public static HttpServletRequest getRequest() {
60 return CONTEXT.get().request;
61 }
62
63
64
65
66
67
68
69 public static void setRequest(final HttpServletRequest request) {
70 CONTEXT.get().request = request;
71 }
72
73
74
75
76
77
78 public static CubbyConfiguration getConfiguration() {
79 return SingletonS2Container.getComponent(CubbyConfiguration.class);
80 }
81
82
83
84
85
86
87 public static ResourceBundle getMessagesResourceBundle() {
88 final ThreadContext context = CONTEXT.get();
89 if (context.resourceBundle == null) {
90 final Locale locale;
91 if (context.request == null) {
92 locale = Locale.getDefault();
93 } else {
94 locale = context.request.getLocale();
95 }
96 context.resourceBundle = ResourceBundleUtil.getBundle(RES_MESSAGES,
97 locale);
98 }
99 return context.resourceBundle;
100 }
101
102
103
104
105
106
107
108 public static Map<?, ?> getMessagesMap() {
109 final ThreadContext context = CONTEXT.get();
110 if (context.messages == null) {
111 final ResourceBundle resourceBundle = getMessagesResourceBundle();
112 context.messages = ResourceBundleUtil.convertMap(resourceBundle);
113 }
114 return context.messages;
115 }
116
117
118
119
120 private ThreadContext() {
121 }
122
123
124 private HttpServletRequest request;
125
126
127 private ResourceBundle resourceBundle = null;
128
129
130 private Map<?, ?> messages = null;
131
132 }