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