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 public void close() {
058 if (_servletRequestWrapper != null) {
059 HttpServletRequest nextHttpServletRequest =
060 _nextHttpServletRequestThreadLocal.get();
061
062 _servletRequestWrapper.setRequest(nextHttpServletRequest);
063 }
064 }
065
066 @Override
067 public Object getAttribute(String name) {
068 ServletRequest servletRequest = getRequest();
069
070 return servletRequest.getAttribute(name);
071 }
072
073 @Override
074 public Enumeration<String> getAttributeNames() {
075 ServletRequest servletRequest = getRequest();
076
077 return servletRequest.getAttributeNames();
078 }
079
080 @Override
081 public Enumeration<Locale> getLocales() {
082 return Collections.enumeration(_locales);
083 }
084
085 @Override
086 public ServletRequest getRequest() {
087 return _nextHttpServletRequestThreadLocal.get();
088 }
089
090 @Override
091 public void removeAttribute(String name) {
092 ServletRequest servletRequest = getRequest();
093
094 servletRequest.removeAttribute(name);
095 }
096
097 @Override
098 public void setAttribute(String name, Object o) {
099 ServletRequest servletRequest = getRequest();
100
101 servletRequest.setAttribute(name, o);
102 }
103
104 @Override
105 public void setRequest(ServletRequest servletRequest) {
106 _nextHttpServletRequestThreadLocal.set(
107 (HttpServletRequest)servletRequest);
108 }
109
110 private static ThreadLocal<HttpServletRequest>
111 _nextHttpServletRequestThreadLocal =
112 new AutoResetThreadLocal<HttpServletRequest>(
113 ThreadLocalFacadeHttpServletRequestWrapper.class +
114 "._nextHttpServletRequestThreadLocal") {
115
116 @Override
117 protected HttpServletRequest copy(
118 HttpServletRequest httpServletRequest) {
119
120 return httpServletRequest;
121 }
122
123 };
124
125 private List<Locale> _locales;
126 private ServletRequestWrapper _servletRequestWrapper;
127
128 }