001
014
015 package com.liferay.portlet.wiki.action;
016
017 import com.liferay.portal.kernel.flash.FlashMagicBytesUtil;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.repository.model.FileEntry;
021 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
022 import com.liferay.portal.kernel.util.FileUtil;
023 import com.liferay.portal.kernel.util.ParamUtil;
024 import com.liferay.portal.kernel.util.StringPool;
025 import com.liferay.portal.kernel.workflow.WorkflowConstants;
026 import com.liferay.portal.portletfilerepository.PortletFileRepositoryUtil;
027 import com.liferay.portal.struts.ActionConstants;
028 import com.liferay.portal.struts.PortletAction;
029 import com.liferay.portal.util.PortalUtil;
030 import com.liferay.portlet.documentlibrary.NoSuchFileException;
031 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
032 import com.liferay.portlet.trash.util.TrashUtil;
033 import com.liferay.portlet.wiki.NoSuchPageException;
034 import com.liferay.portlet.wiki.importers.mediawiki.MediaWikiImporter;
035 import com.liferay.portlet.wiki.model.WikiPage;
036 import com.liferay.portlet.wiki.service.WikiPageServiceUtil;
037
038 import java.io.InputStream;
039
040 import javax.portlet.PortletConfig;
041 import javax.portlet.ResourceRequest;
042 import javax.portlet.ResourceResponse;
043
044 import javax.servlet.http.HttpServletRequest;
045 import javax.servlet.http.HttpServletResponse;
046
047 import org.apache.struts.action.ActionForm;
048 import org.apache.struts.action.ActionForward;
049 import org.apache.struts.action.ActionMapping;
050
051
054 public class GetPageAttachmentAction extends PortletAction {
055
056 @Override
057 public void serveResource(
058 ActionMapping actionMapping, ActionForm actionForm,
059 PortletConfig portletConfig, ResourceRequest resourceRequest,
060 ResourceResponse resourceResponse)
061 throws Exception {
062
063 HttpServletRequest request = PortalUtil.getHttpServletRequest(
064 resourceRequest);
065 HttpServletResponse response = PortalUtil.getHttpServletResponse(
066 resourceResponse);
067
068 try {
069 long nodeId = ParamUtil.getLong(resourceRequest, "nodeId");
070 String title = ParamUtil.getString(resourceRequest, "title");
071 String fileName = ParamUtil.getString(resourceRequest, "fileName");
072 int status = ParamUtil.getInteger(
073 resourceRequest, "status", WorkflowConstants.STATUS_APPROVED);
074
075 getFile(nodeId, title, fileName, status, request, response);
076
077 setForward(resourceRequest, ActionConstants.COMMON_NULL);
078 }
079 catch (Exception e) {
080 PortalUtil.sendError(e, request, response);
081 }
082 }
083
084 @Override
085 public ActionForward strutsExecute(
086 ActionMapping actionMapping, ActionForm actionForm,
087 HttpServletRequest request, HttpServletResponse response)
088 throws Exception {
089
090 try {
091 long nodeId = ParamUtil.getLong(request, "nodeId");
092 String title = ParamUtil.getString(request, "title");
093 String fileName = ParamUtil.getString(request, "fileName");
094
095 if (fileName.startsWith(
096 MediaWikiImporter.SHARED_IMAGES_TITLE + StringPool.SLASH)) {
097
098 String[] fileNameParts = fileName.split(
099 MediaWikiImporter.SHARED_IMAGES_TITLE + StringPool.SLASH);
100
101 fileName = fileNameParts[1];
102
103 title = MediaWikiImporter.SHARED_IMAGES_TITLE;
104 }
105
106 int status = ParamUtil.getInteger(
107 request, "status", WorkflowConstants.STATUS_APPROVED);
108
109 getFile(nodeId, title, fileName, status, request, response);
110
111 return null;
112 }
113 catch (Exception e) {
114 if ((e instanceof NoSuchPageException) ||
115 (e instanceof NoSuchFileException)) {
116
117 if (_log.isWarnEnabled()) {
118 _log.warn(e);
119 }
120 }
121 else {
122 PortalUtil.sendError(e, request, response);
123 }
124
125 return null;
126 }
127 }
128
129 protected void getFile(
130 long nodeId, String title, String fileName, int status,
131 HttpServletRequest request, HttpServletResponse response)
132 throws Exception {
133
134 WikiPage wikiPage = WikiPageServiceUtil.getPage(nodeId, title);
135
136 FileEntry fileEntry = PortletFileRepositoryUtil.getPortletFileEntry(
137 wikiPage.getGroupId(), wikiPage.getAttachmentsFolderId(), fileName);
138
139 DLFileEntry dlFileEntry = (DLFileEntry)fileEntry.getModel();
140
141 if ((status != WorkflowConstants.STATUS_IN_TRASH) &&
142 dlFileEntry.isInTrash()) {
143
144 return;
145 }
146
147 if (dlFileEntry.isInTrash()) {
148 fileName = TrashUtil.getOriginalTitle(dlFileEntry.getTitle());
149 }
150
151 InputStream is = fileEntry.getContentStream();
152
153 FlashMagicBytesUtil.Result flashMagicBytesUtilResult =
154 FlashMagicBytesUtil.check(is);
155
156 if (flashMagicBytesUtilResult.isFlash()) {
157 fileName = FileUtil.stripExtension(fileName) + ".swf";
158 }
159
160 is = flashMagicBytesUtilResult.getInputStream();
161
162 ServletResponseUtil.sendFile(
163 request, response, fileName, is, fileEntry.getSize(),
164 fileEntry.getMimeType());
165 }
166
167 @Override
168 protected boolean isCheckMethodOnProcessAction() {
169 return _CHECK_METHOD_ON_PROCESS_ACTION;
170 }
171
172 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
173
174 private static Log _log = LogFactoryUtil.getLog(
175 GetPageAttachmentAction.class);
176
177 }