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.ActionRequest;
036 import javax.portlet.ActionResponse;
037 import javax.portlet.PortletConfig;
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 processAction(
053 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
054 ActionRequest actionRequest, ActionResponse actionResponse)
055 throws Exception {
056
057 try {
058 long nodeId = ParamUtil.getLong(actionRequest, "nodeId");
059 String title = ParamUtil.getString(actionRequest, "title");
060 String fileName = ParamUtil.getString(actionRequest, "fileName");
061 int status = ParamUtil.getInteger(
062 actionRequest, "status", WorkflowConstants.STATUS_APPROVED);
063
064 HttpServletRequest request = PortalUtil.getHttpServletRequest(
065 actionRequest);
066 HttpServletResponse response = PortalUtil.getHttpServletResponse(
067 actionResponse);
068
069 getFile(nodeId, title, fileName, status, request, response);
070
071 setForward(actionRequest, ActionConstants.COMMON_NULL);
072 }
073 catch (Exception e) {
074 PortalUtil.sendError(e, actionRequest, actionResponse);
075 }
076 }
077
078 @Override
079 public ActionForward strutsExecute(
080 ActionMapping mapping, ActionForm form, HttpServletRequest request,
081 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 DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();
124
125 if ((status != WorkflowConstants.STATUS_IN_TRASH) &&
126 (dlFileVersion.isInTrash() || dlFileEntry.isInTrashContainer())) {
127
128 return;
129 }
130
131 if (dlFileVersion.isInTrash()) {
132 fileName = TrashUtil.getOriginalTitle(dlFileEntry.getTitle());
133 }
134
135 ServletResponseUtil.sendFile(
136 request, response, fileName, fileEntry.getContentStream(),
137 fileEntry.getSize(), fileEntry.getMimeType());
138 }
139
140 @Override
141 protected boolean isCheckMethodOnProcessAction() {
142 return _CHECK_METHOD_ON_PROCESS_ACTION;
143 }
144
145 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
146
147 private static Log _log = LogFactoryUtil.getLog(
148 GetPageAttachmentAction.class);
149
150 }