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 getEditPage() {
089 return StrutsUtil.TEXT_HTML_DIR + _editPage;
090 }
091
092 @Override
093 public String getURL() {
094 return _url;
095 }
096
097 public String getViewPath(String portletId, boolean wap) {
098 String path = StrutsUtil.TEXT_HTML_DIR;
099
100 if (wap) {
101 path = StrutsUtil.TEXT_WAP_DIR;
102 }
103
104
105
106 if (Validator.isNotNull(portletId)) {
107 if (_type.equals(LayoutConstants.TYPE_PANEL)) {
108 path += "/portal/layout/view/panel.jsp";
109 }
110 else if (_type.equals(LayoutConstants.TYPE_CONTROL_PANEL)) {
111 path += "/portal/layout/view/control_panel.jsp";
112 }
113 else {
114 path += "/portal/layout/view/portlet.jsp";
115 }
116 }
117 else {
118 path = StrutsUtil.TEXT_HTML_DIR + _viewPage;
119 }
120
121 return path;
122 }
123
124 @Override
125 public boolean includeLayoutContent(
126 HttpServletRequest request, HttpServletResponse response,
127 Layout layout)
128 throws Exception {
129
130 ServletContext servletContext = (ServletContext)request.getAttribute(
131 WebKeys.CTX);
132
133 String portletId = ParamUtil.getString(request, "p_p_id");
134
135 String path = getViewPath(portletId, BrowserSnifferUtil.isWap(request));
136
137 RequestDispatcher requestDispatcher =
138 servletContext.getRequestDispatcher(path);
139
140 UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
141
142 PipingServletResponse pipingServletResponse = new PipingServletResponse(
143 response, unsyncStringWriter);
144
145 String contentType = pipingServletResponse.getContentType();
146
147 requestDispatcher.include(request, pipingServletResponse);
148
149 if (contentType != null) {
150 response.setContentType(contentType);
151 }
152
153 request.setAttribute(
154 WebKeys.LAYOUT_CONTENT, unsyncStringWriter.getStringBundler());
155
156 return false;
157 }
158
159 @Override
160 public boolean isFirstPageable() {
161 return _firstPageable;
162 }
163
164 @Override
165 public boolean isParentable() {
166 return _parentable;
167 }
168
169 @Override
170 public boolean isSitemapable() {
171 return _sitemapable;
172 }
173
174 @Override
175 public boolean isURLFriendliable() {
176 return _urlFriendliable;
177 }
178
179 @Override
180 public boolean matches(
181 HttpServletRequest request, String friendlyURL, Layout layout) {
182
183 try {
184 Map<Locale, String> friendlyURLMap = layout.getFriendlyURLMap();
185
186 Collection<String> values = friendlyURLMap.values();
187
188 return values.contains(friendlyURL);
189 }
190 catch (SystemException e) {
191 throw new RuntimeException(e);
192 }
193 }
194
195 private String[] _configurationActionDelete;
196 private String[] _configurationActionUpdate;
197 private String _editPage;
198 private boolean _firstPageable;
199 private boolean _parentable;
200 private boolean _sitemapable;
201 private String _type;
202 private String _url;
203 private boolean _urlFriendliable;
204 private String _viewPage;
205
206 }