1 package com.pentila.entSavoie.wopiProtocole;
3 import java.io.InputStream;
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletResponse;
8 import org.apache.commons.fileupload.servlet.ServletRequestContext;
9 import org.apache.struts.action.Action;
10 import org.apache.struts.action.ActionForm;
11 import org.apache.struts.action.ActionForward;
12 import org.apache.struts.action.ActionMapping;
14 import com.liferay.portal.kernel.log.Log;
15 import com.liferay.portal.kernel.log.LogFactoryUtil;
16 import com.liferay.portal.kernel.repository.model.FileEntry;
17 import com.liferay.portal.kernel.util.ParamUtil;
18 import com.liferay.portal.security.permission.ActionKeys;
19 import com.liferay.portal.service.ServiceContext;
20 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
21 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
22 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
23 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
24 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
25 import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
26 import com.pentila.entSavoie.cartable.model.LoolToken;
27 import com.pentila.entSavoie.cartable.service.LoolTokenLocalServiceUtil;
28 import com.pentila.entSavoie.servlet.ServletResponseServiceUtil;
30 public class GetWopiFileAction extends Action {
32 private static Log logger = LogFactoryUtil.getLog(GetWopiFileAction.class);
34 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
35 HttpServletResponse response) throws Exception {
36 logger.info("Start execute GetWopiFileAction");
37 String[] pathSplitted = mapping.getPath().split("/");
39 String access_token = ParamUtil.getString(request, "access_token");
40 LoolToken loolToken = LoolTokenLocalServiceUtil.getLoolToken(access_token);
41 Long userId = loolToken.getUserId();
42 //Long userId = TokenCacheUtil.getUserIdFromTokenCache(access_token);
43 logger.info("GetWopiFileAction : returned user for token "+access_token+" is "+userId);
45 if (userId == null || userId == 0L) {
46 response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
50 Long fileId = Long.parseLong(pathSplitted[pathSplitted.length - 2]);
51 // Long fileId = ParamUtil.getLong(request, "fileId");
52 String method = request.getMethod();
54 if (method.equalsIgnoreCase("GET")) { // retrive file
55 getFile(fileId, userId, response, request);
56 } else if (method.equalsIgnoreCase("POST")) { // save file
57 saveFile(fileId, userId, response, request);
63 protected void getFile(Long fileVersionId, Long userId, HttpServletResponse response, HttpServletRequest request)
66 DLFileVersion dlFileVersion = DLFileVersionLocalServiceUtil.getDLFileVersion(fileVersionId);
68 DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(dlFileVersion.getFileEntryId());
70 InputStream is = DLStoreUtil.getFileAsStream(fileEntry.getCompanyId(), fileEntry.getDataRepositoryId(),
71 fileEntry.getName(), dlFileVersion.getVersion());
73 response.setHeader("X-WOPI-ItemVersion", dlFileVersion.getVersion());
75 ServletResponseServiceUtil.sendFile(response, fileEntry.getTitle(), is, (int) fileEntry.getSize(),
76 fileEntry.getMimeType(), "");
79 protected void saveFile(Long fileVersionId, Long userId, HttpServletResponse response, HttpServletRequest request)
81 logger.info("start file saving : " + fileVersionId + " for user : " + userId);
84 ServletRequestContext servletRequestContext = new ServletRequestContext(request);
86 DLFileVersion dlFileVersion = DLFileVersionLocalServiceUtil.getDLFileVersion(fileVersionId);
88 InputStream is = servletRequestContext.getInputStream();
90 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(dlFileVersion.getFileEntryId());
92 // Set default permissions
93 ServiceContext serviceContext = new ServiceContext();
94 serviceContext.setAddGroupPermissions(true);
95 serviceContext.setAddGuestPermissions(true);
96 String[] guestPermissions = new String[1];
97 guestPermissions[0] = ActionKeys.VIEW;
98 serviceContext.setGuestPermissions(guestPermissions);
100 FileEntry feUpdate = DLAppLocalServiceUtil.updateFileEntry(userId, fileEntry.getFileEntryId(), fileEntry.getTitle(),
101 fileEntry.getMimeType(), fileEntry.getTitle(), fileEntry.getDescription(), "", false, is,
102 fileEntry.getSize(), serviceContext);
104 logger.info("End file saving : " + fileVersionId + " to " + feUpdate.getVersion() + " for user : " + userId);