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