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