001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.io.OutputStreamWriter;
018 import com.liferay.portal.kernel.servlet.taglib.aui.ScriptData;
019 import com.liferay.portal.kernel.util.WebKeys;
020 import com.liferay.portal.theme.ThemeDisplay;
021 import com.liferay.portal.util.PortalUtil;
022
023 import java.io.IOException;
024 import java.io.OutputStream;
025
026 import javax.portlet.PortletException;
027 import javax.portlet.RenderRequest;
028 import javax.portlet.RenderResponse;
029 import javax.portlet.ResourceRequest;
030 import javax.portlet.ResourceResponse;
031 import javax.portlet.filter.FilterChain;
032 import javax.portlet.filter.FilterConfig;
033 import javax.portlet.filter.RenderFilter;
034 import javax.portlet.filter.ResourceFilter;
035
036 import javax.servlet.http.HttpServletRequest;
037
038
043 public class ScriptDataPortletFilter implements RenderFilter, ResourceFilter {
044
045 @Override
046 public void destroy() {
047 }
048
049 @Override
050 public void doFilter(
051 RenderRequest renderRequest, RenderResponse renderResponse,
052 FilterChain filterChain)
053 throws IOException, PortletException {
054
055 filterChain.doFilter(renderRequest, renderResponse);
056
057 HttpServletRequest request = PortalUtil.getHttpServletRequest(
058 renderRequest);
059
060 ScriptData scriptData = (ScriptData)request.getAttribute(
061 WebKeys.AUI_SCRIPT_DATA);
062
063 if (scriptData == null) {
064 return;
065 }
066
067 ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
068 WebKeys.THEME_DISPLAY);
069
070 if (themeDisplay.isIsolated() || themeDisplay.isStateExclusive()) {
071 _flushScriptData(
072 request, scriptData, (MimeResponseImpl)renderResponse);
073 }
074 }
075
076 @Override
077 public void doFilter(
078 ResourceRequest resourceRequest, ResourceResponse resourceResponse,
079 FilterChain filterChain)
080 throws IOException, PortletException {
081
082 filterChain.doFilter(resourceRequest, resourceResponse);
083
084 HttpServletRequest request = PortalUtil.getHttpServletRequest(
085 resourceRequest);
086
087 ScriptData scriptData = (ScriptData)request.getAttribute(
088 WebKeys.AUI_SCRIPT_DATA);
089
090 if (scriptData == null) {
091 return;
092 }
093
094 _flushScriptData(
095 request, scriptData, (MimeResponseImpl)resourceResponse);
096 }
097
098 @Override
099 public void init(FilterConfig filterConfig) {
100 }
101
102 private void _flushScriptData(
103 HttpServletRequest request, ScriptData scriptData,
104 MimeResponseImpl mimeResponseImpl)
105 throws IOException {
106
107 if (mimeResponseImpl.isCalledGetPortletOutputStream()) {
108 OutputStream outputStream =
109 mimeResponseImpl.getPortletOutputStream();
110
111 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
112 outputStream);
113
114 scriptData.writeTo(request, outputStreamWriter);
115
116 outputStreamWriter.flush();
117 }
118 else {
119 scriptData.writeTo(request, mimeResponseImpl.getWriter());
120 }
121 }
122
123 }