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 public class ThreadContext {
30
31 private static final ThreadLocal<ThreadContext> CONTEXT = new ThreadLocal<ThreadContext>() {
32
33 @Override
34 protected ThreadContext initialValue() {
35 return new ThreadContext();
36 }
37
38 };
39
40 public static void remove() {
41 CONTEXT.remove();
42 }
43
44 public static HttpServletRequest getRequest() {
45 return CONTEXT.get().request;
46 }
47
48 public static void setRequest(final HttpServletRequest request) {
49 CONTEXT.get().request = request;
50 }
51
52 public static CubbyConfiguration getConfiguration() {
53 return SingletonS2Container.getComponent(CubbyConfiguration.class);
54 }
55
56 public static ResourceBundle getMessagesResourceBundle() {
57 final ThreadContext context = CONTEXT.get();
58 if (context.resourceBundle == null) {
59 final Locale locale;
60 if (context.request == null) {
61 locale = Locale.getDefault();
62 } else {
63 locale = context.request.getLocale();
64 }
65 context.resourceBundle = ResourceBundleUtil.getBundle(RES_MESSAGES,
66 locale);
67 }
68 return context.resourceBundle;
69 }
70
71 public static Map<?, ?> getMessagesMap() {
72 final ThreadContext context = CONTEXT.get();
73 if (context.messages == null) {
74 final ResourceBundle resourceBundle = getMessagesResourceBundle();
75 context.messages = ResourceBundleUtil.convertMap(resourceBundle);
76 }
77 return context.messages;
78 }
79
80 private ThreadContext() {
81 }
82
83 private HttpServletRequest request;
84
85 private ResourceBundle resourceBundle = null;
86
87 private Map<?, ?> messages = null;
88
89 }