mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
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:
@@ -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>
|
||||||
|
|
||||||
|
@@ -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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user