From 35c4ec7c235944fb64f28d9421ed5727f4d6eb76 Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Wed, 22 Jun 2011 08:30:09 +0000 Subject: [PATCH] ACTVT 93: Refactored /api/workflow-instances/{id}/diagram REST API to extend StreamContent and use temporary file (ALF-8634) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28509 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../web-scripts-application-context.xml | 1 + .../workflow/WorkflowInstanceDiagramGet.java | 37 +++++++------------ 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 230a01aeea..5dda2ce57d 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1070,6 +1070,7 @@ + diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDiagramGet.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDiagramGet.java index c06feff1a3..955fb270fd 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDiagramGet.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowInstanceDiagramGet.java @@ -18,17 +18,19 @@ */ package org.alfresco.repo.web.scripts.workflow; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.Map; import javax.servlet.http.HttpServletResponse; -import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.web.scripts.content.StreamContent; import org.alfresco.service.cmr.workflow.WorkflowInstance; import org.alfresco.service.cmr.workflow.WorkflowService; -import org.springframework.extensions.webscripts.AbstractWebScript; -import org.springframework.extensions.webscripts.Cache; +import org.alfresco.util.TempFileProvider; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; @@ -40,7 +42,7 @@ import org.springframework.util.FileCopyUtils; * @author Gavin Cornwell * @since 4.0 */ -public class WorkflowInstanceDiagramGet extends AbstractWebScript +public class WorkflowInstanceDiagramGet extends StreamContent { protected WorkflowService workflowService; @@ -71,26 +73,13 @@ public class WorkflowInstanceDiagramGet extends AbstractWebScript throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Unable to find diagram for workflow instance with id: " + workflowInstanceId); } - // set mimetype for the content and the character encoding + length for the stream - res.setContentType(MimetypeMap.MIMETYPE_IMAGE_PNG); - - // set caching (never cache) - Cache cache = new Cache(); - cache.setNeverCache(true); - cache.setMustRevalidate(true); - cache.setMaxAge(0L); - res.setCache(cache); - - // stream image back to client + // copy image data into temporary file + File file = TempFileProvider.createTempFile("workflow-diagram-", ".png"); InputStream imageData = workflowService.getWorkflowImage(workflowInstanceId); - try - { - FileCopyUtils.copy(imageData, res.getOutputStream()); // both streams are closed - } - catch (IOException e) - { - throw new WebScriptException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error occurred streaming diagram for workflow instance with id '" + - workflowInstanceId + "' " + e.getMessage()); - } + OutputStream os = new FileOutputStream(file); + FileCopyUtils.copy(imageData, os); + + // stream temporary file back to client + streamContent(req, res, file, false); } }