001
014
015 package com.liferay.taglib.portletext;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.servlet.PipingServletResponse;
020 import com.liferay.portal.kernel.util.JavaConstants;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.kernel.util.WebKeys;
023 import com.liferay.portal.model.Layout;
024 import com.liferay.portlet.PortletPreferencesFactoryUtil;
025 import com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil;
026
027 import java.util.HashSet;
028 import java.util.Set;
029
030 import javax.portlet.PortletRequest;
031 import javax.portlet.PortletResponse;
032 import javax.portlet.RenderRequest;
033 import javax.portlet.RenderResponse;
034
035 import javax.servlet.ServletContext;
036 import javax.servlet.http.HttpServletRequest;
037 import javax.servlet.http.HttpServletResponse;
038 import javax.servlet.jsp.JspException;
039 import javax.servlet.jsp.PageContext;
040 import javax.servlet.jsp.tagext.TagSupport;
041
042
045 public class RuntimeTag extends TagSupport {
046
047 public static void doTag(
048 String portletName, PageContext pageContext,
049 ServletContext servletContext, HttpServletRequest request,
050 HttpServletResponse response)
051 throws Exception {
052
053 doTag(
054 portletName, null, pageContext, servletContext, request, response);
055 }
056
057 public static void doTag(
058 String portletName, String queryString, PageContext pageContext,
059 ServletContext servletContext, HttpServletRequest request,
060 HttpServletResponse response)
061 throws Exception {
062
063 doTag(
064 portletName, queryString, null, pageContext, servletContext,
065 request, response);
066 }
067
068 public static void doTag(
069 String portletName, String queryString, String defaultPreferences,
070 PageContext pageContext, ServletContext servletContext,
071 HttpServletRequest request, HttpServletResponse response)
072 throws Exception {
073
074 if (pageContext != null) {
075 response = new PipingServletResponse(
076 response, pageContext.getOut());
077 }
078
079 PortletRequest portletRequest = (PortletRequest)request.getAttribute(
080 JavaConstants.JAVAX_PORTLET_REQUEST);
081
082 RenderRequest renderRequest = null;
083
084 if ((portletRequest != null) &&
085 (portletRequest instanceof RenderRequest)) {
086
087 renderRequest = (RenderRequest)portletRequest;
088 }
089
090 PortletResponse portletResponse = (PortletResponse)request.getAttribute(
091 JavaConstants.JAVAX_PORTLET_RESPONSE);
092
093 RenderResponse renderResponse = null;
094
095 if ((portletResponse != null) &&
096 (portletResponse instanceof RenderResponse)) {
097
098 renderResponse = (RenderResponse)portletResponse;
099 }
100
101 String portletId = portletName;
102
103 try {
104 request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
105
106 if (Validator.isNotNull(defaultPreferences)) {
107 PortletPreferencesFactoryUtil.getPortletSetup(
108 request, portletId, defaultPreferences);
109 }
110
111 RuntimePortletUtil.processPortlet(
112 servletContext, request, response, renderRequest,
113 renderResponse, portletId, queryString, true);
114
115 Set<String> runtimePortletIds = (Set<String>)request.getAttribute(
116 WebKeys.RUNTIME_PORTLET_IDS);
117
118 if (runtimePortletIds == null) {
119 runtimePortletIds = new HashSet<String>();
120 }
121
122 runtimePortletIds.add(portletName);
123
124 request.setAttribute(
125 WebKeys.RUNTIME_PORTLET_IDS, runtimePortletIds);
126 }
127 finally {
128 request.removeAttribute(WebKeys.RENDER_PORTLET_RESOURCE);
129 }
130 }
131
132 @Override
133 public int doEndTag() throws JspException {
134 try {
135 HttpServletRequest request =
136 (HttpServletRequest)pageContext.getRequest();
137
138 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
139
140 if (layout == null) {
141 return EVAL_PAGE;
142 }
143
144 ServletContext servletContext =
145 (ServletContext)request.getAttribute(WebKeys.CTX);
146
147 HttpServletResponse response =
148 (HttpServletResponse)pageContext.getResponse();
149
150 doTag(
151 _portletName, _queryString, _defaultPreferences, pageContext,
152 servletContext, request, response);
153
154 return EVAL_PAGE;
155 }
156 catch (Exception e) {
157 _log.error(e, e);
158
159 throw new JspException(e);
160 }
161 }
162
163 public void setDefaultPreferences(String defaultPreferences) {
164 _defaultPreferences = defaultPreferences;
165 }
166
167 public void setPortletName(String portletName) {
168 _portletName = portletName;
169 }
170
171 public void setQueryString(String queryString) {
172 _queryString = queryString;
173 }
174
175 private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
176
177 private String _defaultPreferences;
178 private String _portletName;
179 private String _queryString;
180
181 }