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