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