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
This commit is contained in:
Gavin Cornwell
2011-06-22 08:30:09 +00:00
parent 52fd30df92
commit 35c4ec7c23
2 changed files with 14 additions and 24 deletions

View File

@@ -1070,6 +1070,7 @@
<bean id="webscript.org.alfresco.repository.workflow.workflow-instance-diagram.get" <bean id="webscript.org.alfresco.repository.workflow.workflow-instance-diagram.get"
class="org.alfresco.repo.web.scripts.workflow.WorkflowInstanceDiagramGet" class="org.alfresco.repo.web.scripts.workflow.WorkflowInstanceDiagramGet"
parent="webscript"> parent="webscript">
<property name="mimetypeService" ref="MimetypeService" />
<property name="workflowService" ref="WorkflowService" /> <property name="workflowService" ref="WorkflowService" />
</bean> </bean>

View File

@@ -18,17 +18,19 @@
*/ */
package org.alfresco.repo.web.scripts.workflow; package org.alfresco.repo.web.scripts.workflow;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletResponse; 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.WorkflowInstance;
import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.workflow.WorkflowService;
import org.springframework.extensions.webscripts.AbstractWebScript; import org.alfresco.util.TempFileProvider;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptException;
import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.extensions.webscripts.WebScriptResponse;
@@ -40,7 +42,7 @@ import org.springframework.util.FileCopyUtils;
* @author Gavin Cornwell * @author Gavin Cornwell
* @since 4.0 * @since 4.0
*/ */
public class WorkflowInstanceDiagramGet extends AbstractWebScript public class WorkflowInstanceDiagramGet extends StreamContent
{ {
protected WorkflowService workflowService; 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); 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 // copy image data into temporary file
res.setContentType(MimetypeMap.MIMETYPE_IMAGE_PNG); File file = TempFileProvider.createTempFile("workflow-diagram-", ".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
InputStream imageData = workflowService.getWorkflowImage(workflowInstanceId); InputStream imageData = workflowService.getWorkflowImage(workflowInstanceId);
try OutputStream os = new FileOutputStream(file);
{ FileCopyUtils.copy(imageData, os);
FileCopyUtils.copy(imageData, res.getOutputStream()); // both streams are closed
} // stream temporary file back to client
catch (IOException e) streamContent(req, res, file, false);
{
throw new WebScriptException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error occurred streaming diagram for workflow instance with id '" +
workflowInstanceId + "' " + e.getMessage());
}
} }
} }