001
014
015 package com.liferay.portal.struts;
016
017 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
018 import com.liferay.portal.kernel.util.ContentTypes;
019 import com.liferay.portal.util.PortalUtil;
020
021 import java.io.OutputStream;
022
023 import javax.portlet.ActionRequest;
024 import javax.portlet.ActionResponse;
025 import javax.portlet.PortletConfig;
026 import javax.portlet.ResourceRequest;
027 import javax.portlet.ResourceResponse;
028
029 import javax.servlet.http.HttpServletRequest;
030 import javax.servlet.http.HttpServletResponse;
031
032 import org.apache.struts.action.ActionForm;
033 import org.apache.struts.action.ActionForward;
034 import org.apache.struts.action.ActionMapping;
035
036
039 public class RSSAction extends PortletAction {
040
041 @Override
042 public void processAction(
043 ActionMapping actionMapping, ActionForm actionForm,
044 PortletConfig portletConfig, ActionRequest actionRequest,
045 ActionResponse actionResponse)
046 throws Exception {
047
048 if (!PortalUtil.isRSSFeedsEnabled()) {
049 PortalUtil.sendRSSFeedsDisabledError(actionRequest, actionResponse);
050
051 return;
052 }
053
054 try {
055 HttpServletRequest request = PortalUtil.getHttpServletRequest(
056 actionRequest);
057 HttpServletResponse response = PortalUtil.getHttpServletResponse(
058 actionResponse);
059
060 ServletResponseUtil.sendFile(
061 request, response, null, getRSS(request),
062 ContentTypes.TEXT_XML_UTF8);
063
064 setForward(actionRequest, ActionConstants.COMMON_NULL);
065 }
066 catch (Exception e) {
067 PortalUtil.sendError(e, actionRequest, actionResponse);
068 }
069 }
070
071 @Override
072 public void serveResource(
073 ActionMapping actionMapping, ActionForm actionForm,
074 PortletConfig portletConfig, ResourceRequest resourceRequest,
075 ResourceResponse resourceResponse)
076 throws Exception {
077
078 if (!PortalUtil.isRSSFeedsEnabled()) {
079 PortalUtil.sendRSSFeedsDisabledError(
080 resourceRequest, resourceResponse);
081
082 return;
083 }
084
085 resourceResponse.setContentType(ContentTypes.TEXT_XML_UTF8);
086
087 try (OutputStream outputStream =
088 resourceResponse.getPortletOutputStream()) {
089
090 byte[] bytes = getRSS(resourceRequest, resourceResponse);
091
092 outputStream.write(bytes);
093 }
094 }
095
096 @Override
097 public ActionForward strutsExecute(
098 ActionMapping actionMapping, ActionForm actionForm,
099 HttpServletRequest request, HttpServletResponse response)
100 throws Exception {
101
102 if (!PortalUtil.isRSSFeedsEnabled()) {
103 PortalUtil.sendRSSFeedsDisabledError(request, response);
104
105 return null;
106 }
107
108 try {
109 ServletResponseUtil.sendFile(
110 request, response, null, getRSS(request),
111 ContentTypes.TEXT_XML_UTF8);
112
113 return null;
114 }
115 catch (Exception e) {
116 PortalUtil.sendError(e, request, response);
117
118 return null;
119 }
120 }
121
122 protected byte[] getRSS(HttpServletRequest request) throws Exception {
123 throw new UnsupportedOperationException();
124 }
125
126 protected byte[] getRSS(
127 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
128 throws Exception {
129
130 HttpServletRequest request = PortalUtil.getHttpServletRequest(
131 resourceRequest);
132
133 return getRSS(request);
134 }
135
136 @Override
137 protected boolean isCheckMethodOnProcessAction() {
138 return _CHECK_METHOD_ON_PROCESS_ACTION;
139 }
140
141 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
142
143 }