001
014
015 package com.liferay.portal.servlet.filters.themepreview;
016
017 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
018 import com.liferay.portal.kernel.servlet.StringServletResponse;
019 import com.liferay.portal.kernel.util.ParamUtil;
020 import com.liferay.portal.servlet.filters.BasePortalFilter;
021 import com.liferay.portal.servlet.filters.strip.StripFilter;
022 import com.liferay.portal.theme.ThemeDisplay;
023 import com.liferay.portal.util.WebKeys;
024
025 import java.util.regex.Matcher;
026 import java.util.regex.Pattern;
027
028 import javax.servlet.FilterChain;
029 import javax.servlet.http.HttpServletRequest;
030 import javax.servlet.http.HttpServletResponse;
031
032
035 public class ThemePreviewFilter extends BasePortalFilter {
036
037 @Override
038 public boolean isFilterEnabled(
039 HttpServletRequest request, HttpServletResponse response) {
040
041 if (isThemePreview(request)) {
042 return true;
043 }
044 else {
045 return false;
046 }
047 }
048
049 protected String getContent(HttpServletRequest request, String content) {
050 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
051 WebKeys.THEME_DISPLAY);
052
053 Pattern cssPattern = Pattern.compile(themeDisplay.getPathThemeCss());
054
055 Matcher cssMatcher = cssPattern.matcher(content);
056
057 content = cssMatcher.replaceAll("css");
058
059 Pattern imagePattern = Pattern.compile(
060 themeDisplay.getPathThemeImages());
061
062 Matcher imageMatcher = imagePattern.matcher(content);
063
064 content = imageMatcher.replaceAll("images");
065
066 return content;
067 }
068
069 protected boolean isThemePreview(HttpServletRequest request) {
070 if (ParamUtil.getBoolean(request, _THEME_PREVIEW)) {
071 return true;
072 }
073 else {
074 return false;
075 }
076 }
077
078 @Override
079 protected void processFilter(
080 HttpServletRequest request, HttpServletResponse response,
081 FilterChain filterChain)
082 throws Exception {
083
084 request.setAttribute(StripFilter.SKIP_FILTER, Boolean.TRUE);
085
086 StringServletResponse stringServerResponse = new StringServletResponse(
087 response);
088
089 processFilter(
090 ThemePreviewFilter.class, request, stringServerResponse,
091 filterChain);
092
093 String content = getContent(request, stringServerResponse.getString());
094
095 ServletResponseUtil.write(response, content);
096 }
097
098 private static final String _THEME_PREVIEW = "themePreview";
099
100 }