1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.controller;
17
18 import java.util.Map;
19 import java.util.ResourceBundle;
20
21 import javax.servlet.http.HttpServletRequest;
22
23 import org.seasar.cubby.controller.impl.DefaultMessagesBehaviour;
24 import org.seasar.framework.container.S2Container;
25 import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
26
27
28
29
30
31
32
33 public class ThreadContext {
34
35
36 private static final MessagesBehaviour DEFAULT_MESSAGES_BEHAVIOUR = new DefaultMessagesBehaviour();
37
38
39 private static final ThreadLocal<ThreadContext> CONTEXT = new ThreadLocal<ThreadContext>() {
40
41 @Override
42 protected ThreadContext initialValue() {
43 return new ThreadContext();
44 }
45
46 };
47
48
49
50
51 public static void remove() {
52 CONTEXT.remove();
53 }
54
55
56
57
58
59
60 public static HttpServletRequest getRequest() {
61 return CONTEXT.get().request;
62 }
63
64
65
66
67
68
69
70 public static void setRequest(final HttpServletRequest request) {
71 CONTEXT.get().request = request;
72 }
73
74
75
76
77
78
79 public static CubbyConfiguration getConfiguration() {
80 final S2Container container = SingletonS2ContainerFactory
81 .getContainer();
82 return (CubbyConfiguration) container
83 .getComponent(CubbyConfiguration.class);
84 }
85
86
87
88
89
90
91 public static ResourceBundle getMessagesResourceBundle() {
92 final ThreadContext context = CONTEXT.get();
93 if (context.messagesResourceBundle == null) {
94 final MessagesBehaviour messagesBehaviour = getMessagesBehaviour(context);
95 context.messagesResourceBundle = messagesBehaviour
96 .getBundle(context.request == null ? null : context.request
97 .getLocale());
98 }
99 return context.messagesResourceBundle;
100 }
101
102
103
104
105
106
107
108 public static Map<String, String> getMessagesMap() {
109 final ThreadContext context = CONTEXT.get();
110 if (context.messages == null) {
111 final ResourceBundle bundle = getMessagesResourceBundle();
112 final MessagesBehaviour messagesBehaviour = getMessagesBehaviour(context);
113 context.messages = messagesBehaviour.toMap(bundle);
114 }
115 return context.messages;
116 }
117
118
119
120
121
122
123
124
125 private static MessagesBehaviour getMessagesBehaviour(
126 final ThreadContext context) {
127 if (context.messagesBehaviour == null) {
128 final S2Container container = SingletonS2ContainerFactory
129 .getContainer();
130 if (container.hasComponentDef(MessagesBehaviour.class)) {
131 context.messagesBehaviour = (MessagesBehaviour) container
132 .getComponent(MessagesBehaviour.class);
133 } else {
134 context.messagesBehaviour = DEFAULT_MESSAGES_BEHAVIOUR;
135 }
136 }
137 return context.messagesBehaviour;
138 }
139
140
141
142
143 private ThreadContext() {
144 }
145
146
147 private HttpServletRequest request;
148
149
150 private ResourceBundle messagesResourceBundle = null;
151
152
153 private Map<String, String> messages = null;
154
155
156 private MessagesBehaviour messagesBehaviour;
157
158 }