--- /dev/null
+package com.pentila.entSavoie.wopiProtocole;
+
+import java.io.InputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.fileupload.servlet.ServletRequestContext;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.liferay.portal.kernel.log.Log;
+import com.liferay.portal.kernel.log.LogFactoryUtil;
+import com.liferay.portal.kernel.repository.model.FileEntry;
+import com.liferay.portal.kernel.util.ParamUtil;
+import com.liferay.portal.security.permission.ActionKeys;
+import com.liferay.portal.service.ServiceContext;
+import com.liferay.portlet.documentlibrary.model.DLFileEntry;
+import com.liferay.portlet.documentlibrary.model.DLFileVersion;
+import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
+import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
+import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
+import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
+import com.pentila.entSavoie.cartable.model.LoolToken;
+import com.pentila.entSavoie.cartable.service.LoolTokenLocalServiceUtil;
+import com.pentila.entSavoie.servlet.ServletResponseServiceUtil;
+
+public class GetWopiFileAction extends Action {
+
+ private static Log logger = LogFactoryUtil.getLog(GetWopiFileAction.class);
+
+ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+ logger.info("Start execute GetWopiFileAction");
+ String[] pathSplitted = mapping.getPath().split("/");
+
+ String access_token = ParamUtil.getString(request, "access_token");
+ LoolToken loolToken = LoolTokenLocalServiceUtil.getLoolToken(access_token);
+ Long userId = loolToken.getUserId();
+ //Long userId = TokenCacheUtil.getUserIdFromTokenCache(access_token);
+ logger.info("GetWopiFileAction : returned user for token "+access_token+" is "+userId);
+
+ if (userId == null || userId == 0L) {
+ response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+ return null;
+ }
+
+ Long fileId = Long.parseLong(pathSplitted[pathSplitted.length - 2]);
+ // Long fileId = ParamUtil.getLong(request, "fileId");
+ String method = request.getMethod();
+
+ if (method.equalsIgnoreCase("GET")) { // retrive file
+ getFile(fileId, userId, response, request);
+ } else if (method.equalsIgnoreCase("POST")) { // save file
+ saveFile(fileId, userId, response, request);
+ }
+
+ return null;
+ }
+
+ protected void getFile(Long fileVersionId, Long userId, HttpServletResponse response, HttpServletRequest request)
+ throws Exception {
+
+ DLFileVersion dlFileVersion = DLFileVersionLocalServiceUtil.getDLFileVersion(fileVersionId);
+
+ DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(dlFileVersion.getFileEntryId());
+
+ InputStream is = DLStoreUtil.getFileAsStream(fileEntry.getCompanyId(), fileEntry.getDataRepositoryId(),
+ fileEntry.getName(), dlFileVersion.getVersion());
+
+ response.setHeader("X-WOPI-ItemVersion", dlFileVersion.getVersion());
+
+ ServletResponseServiceUtil.sendFile(response, fileEntry.getTitle(), is, (int) fileEntry.getSize(),
+ fileEntry.getMimeType(), "");
+ }
+
+ protected void saveFile(Long fileVersionId, Long userId, HttpServletResponse response, HttpServletRequest request)
+ throws Exception {
+ logger.info("start file saving : " + fileVersionId + " for user : " + userId);
+
+
+ ServletRequestContext servletRequestContext = new ServletRequestContext(request);
+
+ DLFileVersion dlFileVersion = DLFileVersionLocalServiceUtil.getDLFileVersion(fileVersionId);
+
+ InputStream is = servletRequestContext.getInputStream();
+
+ FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(dlFileVersion.getFileEntryId());
+
+ // Set default permissions
+ ServiceContext serviceContext = new ServiceContext();
+ serviceContext.setAddGroupPermissions(true);
+ serviceContext.setAddGuestPermissions(true);
+ String[] guestPermissions = new String[1];
+ guestPermissions[0] = ActionKeys.VIEW;
+ serviceContext.setGuestPermissions(guestPermissions);
+
+ FileEntry feUpdate = DLAppLocalServiceUtil.updateFileEntry(userId, fileEntry.getFileEntryId(), fileEntry.getTitle(),
+ fileEntry.getMimeType(), fileEntry.getTitle(), fileEntry.getDescription(), "", false, is,
+ fileEntry.getSize(), serviceContext);
+
+ logger.info("End file saving : " + fileVersionId + " to " + feUpdate.getVersion() + " for user : " + userId);
+ }
+
+}