001
014
015 package com.liferay.portal.servlet;
016
017 import com.liferay.portal.kernel.servlet.PersistentHttpServletRequestWrapper;
018 import com.liferay.portal.kernel.util.AutoResetThreadLocal;
019
020 import java.io.Closeable;
021
022 import java.util.ArrayList;
023 import java.util.Collections;
024 import java.util.Enumeration;
025 import java.util.List;
026 import java.util.Locale;
027
028 import javax.servlet.ServletRequest;
029 import javax.servlet.ServletRequestWrapper;
030 import javax.servlet.http.HttpServletRequest;
031
032
035 public class ThreadLocalFacadeHttpServletRequestWrapper
036 extends PersistentHttpServletRequestWrapper implements Closeable {
037
038 public ThreadLocalFacadeHttpServletRequestWrapper(
039 ServletRequestWrapper servletRequestWrapper,
040 HttpServletRequest httpServletRequest) {
041
042 super(httpServletRequest);
043
044 _servletRequestWrapper = servletRequestWrapper;
045
046 _nextHttpServletRequestThreadLocal.set(httpServletRequest);
047
048 _locales = new ArrayList<Locale>();
049
050 Enumeration<Locale> enumeration = httpServletRequest.getLocales();
051
052 while (enumeration.hasMoreElements()) {
053 _locales.add(enumeration.nextElement());
054 }
055 }
056
057 @Override
058 public void close() {
059 if (_servletRequestWrapper != null) {
060 HttpServletRequest nextHttpServletRequest =
061 _nextHttpServletRequestThreadLocal.get();
062
063 _servletRequestWrapper.setRequest(nextHttpServletRequest);
064 }
065 }
066
067 @Override
068 public Object getAttribute(String name) {
069 ServletRequest servletRequest = getRequest();
070
071 return servletRequest.getAttribute(name);
072 }
073
074 @Override
075 public Enumeration<String> getAttributeNames() {
076 ServletRequest servletRequest = getRequest();
077
078 return servletRequest.getAttributeNames();
079 }
080
081 @Override
082 public Enumeration<Locale> getLocales() {
083 return Collections.enumeration(_locales);
084 }
085
086 @Override
087 public ServletRequest getRequest() {
088 return _nextHttpServletRequestThreadLocal.get();
089 }
090
091 @Override
092 public void removeAttribute(String name) {
093 ServletRequest servletRequest = getRequest();
094
095 servletRequest.removeAttribute(name);
096 }
097
098 @Override
099 public void setAttribute(String name, Object o) {
100 ServletRequest servletRequest = getRequest();
101
102 servletRequest.setAttribute(name, o);
103 }
104
105 @Override
106 public void setRequest(ServletRequest servletRequest) {
107 _nextHttpServletRequestThreadLocal.set(
108 (HttpServletRequest)servletRequest);
109 }
110
111 private static ThreadLocal<HttpServletRequest>
112 _nextHttpServletRequestThreadLocal =
113 new AutoResetThreadLocal<HttpServletRequest>(
114 ThreadLocalFacadeHttpServletRequestWrapper.class +
115 "._nextHttpServletRequestThreadLocal") {
116
117 @Override
118 protected HttpServletRequest copy(
119 HttpServletRequest httpServletRequest) {
120
121 return httpServletRequest;
122 }
123
124 };
125
126 private List<Locale> _locales;
127 private ServletRequestWrapper _servletRequestWrapper;
128
129 }