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