1 package org.seasar.cubby.controller; 2 3 import static org.seasar.cubby.CubbyConstants.RES_MESSAGES; 4 5 import java.util.Locale; 6 import java.util.Map; 7 import java.util.ResourceBundle; 8 9 import javax.servlet.http.HttpServletRequest; 10 11 import org.seasar.framework.util.ResourceBundleUtil; 12 13 public class ThreadContext { 14 15 private static final ThreadLocal<ThreadContext> CONTEXT = new ThreadLocal<ThreadContext>() { 16 17 @Override 18 protected ThreadContext initialValue() { 19 return new ThreadContext(); 20 } 21 22 }; 23 24 public static void remove() { 25 CONTEXT.remove(); 26 } 27 28 public static HttpServletRequest getRequest() { 29 return CONTEXT.get().request; 30 } 31 32 public static void setRequest(final HttpServletRequest request) { 33 CONTEXT.get().request = request; 34 } 35 36 public static ResourceBundle getMessagesResourceBundle() { 37 final ThreadContext context = CONTEXT.get(); 38 if (context.resourceBundle == null) { 39 final Locale locale; 40 if (context.request == null) { 41 locale = Locale.getDefault(); 42 } else { 43 locale = context.request.getLocale(); 44 } 45 context.resourceBundle = ResourceBundleUtil.getBundle(RES_MESSAGES, 46 locale); 47 } 48 return context.resourceBundle; 49 } 50 51 public static Map<?, ?> getMessagesMap() { 52 final ThreadContext context = CONTEXT.get(); 53 if (context.messages == null) { 54 final ResourceBundle resourceBundle = getMessagesResourceBundle(); 55 context.messages = ResourceBundleUtil.convertMap(resourceBundle); 56 } 57 return context.messages; 58 } 59 60 private ThreadContext() { 61 } 62 63 private HttpServletRequest request; 64 65 private ResourceBundle resourceBundle = null; 66 67 private Map<?, ?> messages = null; 68 69 }