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.RequestDispatcher;
029 import javax.servlet.ServletRequest;
030 import javax.servlet.ServletRequestWrapper;
031 import javax.servlet.http.HttpServletRequest;
032 import javax.servlet.http.HttpSession;
033
034
037 public class ThreadLocalFacadeHttpServletRequestWrapper
038 extends PersistentHttpServletRequestWrapper implements Closeable {
039
040 public ThreadLocalFacadeHttpServletRequestWrapper(
041 ServletRequestWrapper servletRequestWrapper,
042 HttpServletRequest httpServletRequest) {
043
044 super(httpServletRequest);
045
046 _servletRequestWrapper = servletRequestWrapper;
047
048 _nextHttpServletRequestThreadLocal.set(httpServletRequest);
049
050 _locales = new ArrayList<Locale>();
051
052 Enumeration<Locale> enumeration = httpServletRequest.getLocales();
053
054 while (enumeration.hasMoreElements()) {
055 _locales.add(enumeration.nextElement());
056 }
057 }
058
059 @Override
060 public void close() {
061 if (_servletRequestWrapper != null) {
062 HttpServletRequest nextHttpServletRequest =
063 _nextHttpServletRequestThreadLocal.get();
064
065 _servletRequestWrapper.setRequest(nextHttpServletRequest);
066 }
067 }
068
069 @Override
070 public Object getAttribute(String name) {
071 ServletRequest servletRequest = getRequest();
072
073 return servletRequest.getAttribute(name);
074 }
075
076 @Override
077 public Enumeration<String> getAttributeNames() {
078 ServletRequest servletRequest = getRequest();
079
080 return servletRequest.getAttributeNames();
081 }
082
083 @Override
084 public Enumeration<Locale> getLocales() {
085 return Collections.enumeration(_locales);
086 }
087
088 @Override
089 public ServletRequest getRequest() {
090 return _nextHttpServletRequestThreadLocal.get();
091 }
092
093 @Override
094 public RequestDispatcher getRequestDispatcher(String uri) {
095 HttpServletRequest httpServletRequest =
096 _nextHttpServletRequestThreadLocal.get();
097
098 return httpServletRequest.getRequestDispatcher(uri);
099 }
100
101 @Override
102 public HttpSession getSession() {
103 HttpServletRequest httpServletRequest =
104 (HttpServletRequest)getRequest();
105
106 return httpServletRequest.getSession();
107 }
108
109 @Override
110 public HttpSession getSession(boolean create) {
111 HttpServletRequest httpServletRequest =
112 (HttpServletRequest)getRequest();
113
114 return httpServletRequest.getSession(create);
115 }
116
117 @Override
118 public void removeAttribute(String name) {
119 ServletRequest servletRequest = getRequest();
120
121 servletRequest.removeAttribute(name);
122 }
123
124 @Override
125 public void setAttribute(String name, Object o) {
126 ServletRequest servletRequest = getRequest();
127
128 servletRequest.setAttribute(name, o);
129 }
130
131 @Override
132 public void setRequest(ServletRequest servletRequest) {
133 _nextHttpServletRequestThreadLocal.set(
134 (HttpServletRequest)servletRequest);
135 }
136
137 private static ThreadLocal<HttpServletRequest>
138 _nextHttpServletRequestThreadLocal =
139 new AutoResetThreadLocal<HttpServletRequest>(
140 ThreadLocalFacadeHttpServletRequestWrapper.class +
141 "._nextHttpServletRequestThreadLocal") {
142
143 @Override
144 protected HttpServletRequest copy(
145 HttpServletRequest httpServletRequest) {
146
147 return httpServletRequest;
148 }
149
150 };
151
152 private List<Locale> _locales;
153 private ServletRequestWrapper _servletRequestWrapper;
154
155 }