001
014
015 package com.liferay.taglib.portletext;
016
017 import com.liferay.portal.kernel.json.JSONFactoryUtil;
018 import com.liferay.portal.kernel.json.JSONObject;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.portlet.PortletContainerUtil;
022 import com.liferay.portal.kernel.portlet.PortletJSONUtil;
023 import com.liferay.portal.kernel.portlet.PortletLayoutListener;
024 import com.liferay.portal.kernel.portlet.PortletParameterUtil;
025 import com.liferay.portal.kernel.portlet.RestrictPortletServletRequest;
026 import com.liferay.portal.kernel.servlet.DynamicServletRequest;
027 import com.liferay.portal.kernel.servlet.PipingServletResponse;
028 import com.liferay.portal.kernel.util.StringPool;
029 import com.liferay.portal.kernel.util.WebKeys;
030 import com.liferay.portal.model.Layout;
031 import com.liferay.portal.model.LayoutTypePortlet;
032 import com.liferay.portal.model.Portlet;
033 import com.liferay.portal.service.PortletLocalServiceUtil;
034 import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
035 import com.liferay.portal.theme.ThemeDisplay;
036 import com.liferay.portal.util.PortletKeys;
037 import com.liferay.portlet.PortletPreferencesFactoryUtil;
038
039 import javax.servlet.http.HttpServletRequest;
040 import javax.servlet.http.HttpServletResponse;
041 import javax.servlet.jsp.JspException;
042 import javax.servlet.jsp.PageContext;
043 import javax.servlet.jsp.tagext.TagSupport;
044
045
048 public class RuntimeTag extends TagSupport {
049
050 public static void doTag(
051 String portletName, PageContext pageContext,
052 HttpServletRequest request, HttpServletResponse response)
053 throws Exception {
054
055 doTag(portletName, null, pageContext, request, response);
056 }
057
058 public static void doTag(
059 String portletName, String queryString, PageContext pageContext,
060 HttpServletRequest request, HttpServletResponse response)
061 throws Exception {
062
063 doTag(portletName, queryString, null, pageContext, request, response);
064 }
065
066 public static void doTag(
067 String portletName, String queryString, String defaultPreferences,
068 PageContext pageContext, HttpServletRequest request,
069 HttpServletResponse response)
070 throws Exception {
071
072 if (pageContext != null) {
073 response = new PipingServletResponse(
074 response, pageContext.getOut());
075 }
076
077 String portletId = portletName;
078
079 RestrictPortletServletRequest restrictPortletServletRequest =
080 new RestrictPortletServletRequest(request);
081
082 queryString = PortletParameterUtil.addNamespace(portletId, queryString);
083
084 request = DynamicServletRequest.addQueryString(
085 restrictPortletServletRequest, queryString);
086
087 try {
088 request.setAttribute(WebKeys.RENDER_PORTLET_RESOURCE, Boolean.TRUE);
089
090 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
091 WebKeys.THEME_DISPLAY);
092
093 if (themeDisplay.isStateMaximized()) {
094 LayoutTypePortlet layoutTypePortlet =
095 themeDisplay.getLayoutTypePortlet();
096
097 if (layoutTypePortlet.hasStateMaxPortletId(portletId)) {
098
099
100
101
102 return;
103 }
104 }
105
106 Layout layout = themeDisplay.getLayout();
107
108 Portlet portlet = getPortlet(
109 themeDisplay.getCompanyId(), portletId);
110
111 if ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
112 PortletKeys.PREFS_OWNER_TYPE_LAYOUT, themeDisplay.getPlid(),
113 portletId) < 1) ||
114 layout.isTypeControlPanel() ||
115 layout.isTypePanel()) {
116
117 PortletPreferencesFactoryUtil.getPortletSetup(
118 request, portletId, defaultPreferences);
119
120 PortletLayoutListener portletLayoutListener =
121 portlet.getPortletLayoutListenerInstance();
122
123 if (portletLayoutListener != null) {
124 portletLayoutListener.onAddToLayout(
125 portletId, themeDisplay.getPlid());
126 }
127 }
128
129 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
130
131 PortletJSONUtil.populatePortletJSONObject(
132 request, StringPool.BLANK, portlet, jsonObject);
133
134 PortletJSONUtil.writeHeaderPaths(response, jsonObject);
135
136 PortletContainerUtil.render(request, response, portlet);
137
138 PortletJSONUtil.writeFooterPaths(response, jsonObject);
139 }
140 finally {
141 restrictPortletServletRequest.mergeSharedAttributes();
142 }
143 }
144
145 @Override
146 public int doEndTag() throws JspException {
147 try {
148 HttpServletRequest request =
149 (HttpServletRequest)pageContext.getRequest();
150
151 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
152
153 if (layout == null) {
154 return EVAL_PAGE;
155 }
156
157 HttpServletResponse response =
158 (HttpServletResponse)pageContext.getResponse();
159
160 doTag(
161 _portletName, _queryString, _defaultPreferences, pageContext,
162 request, response);
163
164 return EVAL_PAGE;
165 }
166 catch (Exception e) {
167 _log.error(e, e);
168
169 throw new JspException(e);
170 }
171 }
172
173 public void setDefaultPreferences(String defaultPreferences) {
174 _defaultPreferences = defaultPreferences;
175 }
176
177 public void setPortletName(String portletName) {
178 _portletName = portletName;
179 }
180
181 public void setQueryString(String queryString) {
182 _queryString = queryString;
183 }
184
185
189 protected static Portlet getPortlet(long companyId, String portletId)
190 throws Exception {
191
192 Portlet portlet = PortletLocalServiceUtil.getPortletById(
193 companyId, portletId);
194
195
196
197
198 if (!portlet.isInstanceable()) {
199 portlet = (Portlet)portlet.clone();
200 }
201
202 portlet.setStatic(true);
203
204 return portlet;
205 }
206
207 private static Log _log = LogFactoryUtil.getLog(RuntimeTag.class);
208
209 private String _defaultPreferences;
210 private String _portletName;
211 private String _queryString;
212
213 }