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 public void destroy() {
046 }
047
048 public void doFilter(
049 RenderRequest renderRequest, RenderResponse renderResponse,
050 FilterChain filterChain)
051 throws IOException, PortletException {
052
053 filterChain.doFilter(renderRequest, renderResponse);
054
055 HttpServletRequest request = PortalUtil.getHttpServletRequest(
056 renderRequest);
057
058 ScriptData scriptData = (ScriptData)request.getAttribute(
059 WebKeys.AUI_SCRIPT_DATA);
060
061 if (scriptData == null) {
062 return;
063 }
064
065 ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
066 WebKeys.THEME_DISPLAY);
067
068 if (themeDisplay.isIsolated() || themeDisplay.isStateExclusive()) {
069 _flushScriptData(
070 request, scriptData, (MimeResponseImpl)renderResponse);
071 }
072 }
073
074 public void doFilter(
075 ResourceRequest resourceRequest, ResourceResponse resourceResponse,
076 FilterChain filterChain)
077 throws IOException, PortletException {
078
079 filterChain.doFilter(resourceRequest, resourceResponse);
080
081 HttpServletRequest request = PortalUtil.getHttpServletRequest(
082 resourceRequest);
083
084 ScriptData scriptData = (ScriptData)request.getAttribute(
085 WebKeys.AUI_SCRIPT_DATA);
086
087 if (scriptData == null) {
088 return;
089 }
090
091 _flushScriptData(
092 request, scriptData, (MimeResponseImpl)resourceResponse);
093 }
094
095 public void init(FilterConfig filterConfig) {
096 }
097
098 private void _flushScriptData(
099 HttpServletRequest request, ScriptData scriptData,
100 MimeResponseImpl mimeResponseImpl)
101 throws IOException {
102
103 if (mimeResponseImpl.isCalledGetPortletOutputStream()) {
104 OutputStream outputStream =
105 mimeResponseImpl.getPortletOutputStream();
106
107 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
108 outputStream);
109
110 scriptData.writeTo(request, outputStreamWriter);
111
112 outputStreamWriter.flush();
113 }
114 else {
115 scriptData.writeTo(request, mimeResponseImpl.getWriter());
116 }
117 }
118
119 }