001
014
015 package com.liferay.portal.model.impl;
016
017 import com.liferay.portal.kernel.configuration.Filter;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
020 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.kernel.util.ParamUtil;
023 import com.liferay.portal.kernel.util.PropsKeys;
024 import com.liferay.portal.kernel.util.StringUtil;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.model.Layout;
027 import com.liferay.portal.model.LayoutConstants;
028 import com.liferay.portal.model.LayoutTypeController;
029 import com.liferay.portal.struts.StrutsUtil;
030 import com.liferay.portal.util.PropsUtil;
031 import com.liferay.portal.util.WebKeys;
032 import com.liferay.taglib.servlet.PipingServletResponse;
033
034 import java.util.Collection;
035 import java.util.Locale;
036 import java.util.Map;
037
038 import javax.servlet.RequestDispatcher;
039 import javax.servlet.ServletContext;
040 import javax.servlet.http.HttpServletRequest;
041 import javax.servlet.http.HttpServletResponse;
042
043
046 public class LayoutTypeControllerImpl implements LayoutTypeController {
047
048 public LayoutTypeControllerImpl(String type) {
049 _type = type;
050
051 Filter filter = new Filter(type);
052
053 _configurationActionDelete = StringUtil.split(
054 GetterUtil.getString(
055 PropsUtil.get(
056 PropsKeys.LAYOUT_CONFIGURATION_ACTION_DELETE, filter)));
057 _configurationActionUpdate = StringUtil.split(
058 GetterUtil.getString(
059 PropsUtil.get(
060 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE, filter)));
061 _editPage = GetterUtil.getString(
062 PropsUtil.get(PropsKeys.LAYOUT_EDIT_PAGE, filter));
063 _firstPageable = GetterUtil.getBoolean(
064 PropsUtil.get(PropsKeys.LAYOUT_FIRST_PAGEABLE, filter));
065 _parentable = GetterUtil.getBoolean(
066 PropsUtil.get(PropsKeys.LAYOUT_PARENTABLE, filter), true);
067 _sitemapable = GetterUtil.getBoolean(
068 PropsUtil.get(PropsKeys.LAYOUT_SITEMAPABLE, filter), true);
069 _url = GetterUtil.getString(
070 PropsUtil.get(PropsKeys.LAYOUT_URL, filter));
071 _urlFriendliable = GetterUtil.getBoolean(
072 PropsUtil.get(PropsKeys.LAYOUT_URL_FRIENDLIABLE, filter), true);
073 _viewPage = GetterUtil.getString(
074 PropsUtil.get(PropsKeys.LAYOUT_VIEW_PAGE, filter));
075 }
076
077 @Override
078 public String[] getConfigurationActionDelete() {
079 return _configurationActionDelete;
080 }
081
082 @Override
083 public String[] getConfigurationActionUpdate() {
084 return _configurationActionUpdate;
085 }
086
087 @Override
088 public String getURL() {
089 return _url;
090 }
091
092 public String getViewPath(String portletId, boolean wap) {
093 String path = StrutsUtil.TEXT_HTML_DIR;
094
095 if (wap) {
096 path = StrutsUtil.TEXT_WAP_DIR;
097 }
098
099
100
101 if (Validator.isNotNull(portletId)) {
102 if (_type.equals(LayoutConstants.TYPE_PANEL)) {
103 path += "/portal/layout/view/panel.jsp";
104 }
105 else if (_type.equals(LayoutConstants.TYPE_CONTROL_PANEL)) {
106 path += "/portal/layout/view/control_panel.jsp";
107 }
108 else {
109 path += "/portal/layout/view/portlet.jsp";
110 }
111 }
112 else {
113 path = StrutsUtil.TEXT_HTML_DIR + _viewPage;
114 }
115
116 return path;
117 }
118
119 @Override
120 public String includeEditContent(
121 HttpServletRequest request, HttpServletResponse response,
122 Layout layout)
123 throws Exception {
124
125 ServletContext servletContext = (ServletContext)request.getAttribute(
126 WebKeys.CTX);
127
128 RequestDispatcher requestDispatcher =
129 servletContext.getRequestDispatcher(getEditPage());
130
131 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
132
133 PipingServletResponse pipingServletResponse = new PipingServletResponse(
134 response, unsyncStringWriter);
135
136 requestDispatcher.include(request, pipingServletResponse);
137
138 return unsyncStringWriter.toString();
139 }
140
141 @Override
142 public boolean includeLayoutContent(
143 HttpServletRequest request, HttpServletResponse response,
144 Layout layout)
145 throws Exception {
146
147 ServletContext servletContext = (ServletContext)request.getAttribute(
148 WebKeys.CTX);
149
150 String portletId = ParamUtil.getString(request, "p_p_id");
151
152 String path = getViewPath(portletId, BrowserSnifferUtil.isWap(request));
153
154 RequestDispatcher requestDispatcher =
155 servletContext.getRequestDispatcher(path);
156
157 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
158
159 PipingServletResponse pipingServletResponse = new PipingServletResponse(
160 response, unsyncStringWriter);
161
162 String contentType = pipingServletResponse.getContentType();
163
164 requestDispatcher.include(request, pipingServletResponse);
165
166 if (contentType != null) {
167 response.setContentType(contentType);
168 }
169
170 request.setAttribute(
171 WebKeys.LAYOUT_CONTENT, unsyncStringWriter.getStringBundler());
172
173 return false;
174 }
175
176 @Override
177 public boolean isFirstPageable() {
178 return _firstPageable;
179 }
180
181 @Override
182 public boolean isParentable() {
183 return _parentable;
184 }
185
186 @Override
187 public boolean isSitemapable() {
188 return _sitemapable;
189 }
190
191 @Override
192 public boolean isURLFriendliable() {
193 return _urlFriendliable;
194 }
195
196 @Override
197 public boolean matches(
198 HttpServletRequest request, String friendlyURL, Layout layout) {
199
200 try {
201 Map<Locale, String> friendlyURLMap = layout.getFriendlyURLMap();
202
203 Collection<String> values = friendlyURLMap.values();
204
205 return values.contains(friendlyURL);
206 }
207 catch (SystemException e) {
208 throw new RuntimeException(e);
209 }
210 }
211
212 protected String getEditPage() {
213 return StrutsUtil.TEXT_HTML_DIR + _editPage;
214 }
215
216 private final String[] _configurationActionDelete;
217 private final String[] _configurationActionUpdate;
218 private final String _editPage;
219 private final boolean _firstPageable;
220 private final boolean _parentable;
221 private final boolean _sitemapable;
222 private final String _type;
223 private final String _url;
224 private final boolean _urlFriendliable;
225 private final String _viewPage;
226
227 }