diff --git a/modules/activiti-webapp-rest2/src/main/java/org/activiti/rest/api/process/ProcessDefinitionDiagramResource.java b/modules/activiti-webapp-rest2/src/main/java/org/activiti/rest/api/process/ProcessDefinitionDiagramResource.java new file mode 100644 index 0000000000000000000000000000000000000000..7d97b2a936d823b29180c574017ca60c85264c08 --- /dev/null +++ b/modules/activiti-webapp-rest2/src/main/java/org/activiti/rest/api/process/ProcessDefinitionDiagramResource.java @@ -0,0 +1,47 @@ +package org.activiti.rest.api.process; + +import java.io.InputStream; + +import org.activiti.engine.ActivitiException; +import org.activiti.engine.RepositoryService; +import org.activiti.engine.repository.ProcessDefinition; +import org.activiti.rest.api.ActivitiUtil; +import org.activiti.rest.api.SecuredResource; +import org.restlet.data.MediaType; +import org.restlet.representation.InputRepresentation; +import org.restlet.resource.Get; + +public class ProcessDefinitionDiagramResource extends SecuredResource { + + @Get + public InputRepresentation getDiagram() { + if (authenticate() == false) + return null; + + String processDefinitionId = (String) getRequest().getAttributes().get("processDefinitionId"); + + if (processDefinitionId == null) { + throw new ActivitiException("No process definition id provided"); + } + + RepositoryService repositoryService = ActivitiUtil.getRepositoryService(); + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(processDefinitionId).singleResult(); + + if (processDefinition == null) { + throw new ActivitiException("Process definition " + processDefinitionId + " could not be found"); + } + + if (processDefinition.getDiagramResourceName() == null) { + throw new ActivitiException("Diagram resource could not be found"); + } + final InputStream definitionImageStream = repositoryService.getResourceAsStream( + processDefinition.getDeploymentId(), processDefinition.getDiagramResourceName()); + + if (definitionImageStream == null) { + throw new ActivitiException("Diagram resource could not be found"); + } + return new InputRepresentation(definitionImageStream, MediaType.IMAGE_PNG); + } + +} diff --git a/modules/activiti-webapp-rest2/src/main/java/org/activiti/rest/application/ActivitiRestApplication.java b/modules/activiti-webapp-rest2/src/main/java/org/activiti/rest/application/ActivitiRestApplication.java index 0c423f098f892a39e4d45e91b15dcc9a700bd964..3e6de95c5055b8aab9d65b8fa74dd03f5e9c4475 100644 --- a/modules/activiti-webapp-rest2/src/main/java/org/activiti/rest/application/ActivitiRestApplication.java +++ b/modules/activiti-webapp-rest2/src/main/java/org/activiti/rest/application/ActivitiRestApplication.java @@ -34,6 +34,7 @@ import org.activiti.rest.api.management.JobsResource; import org.activiti.rest.api.management.TableDataResource; import org.activiti.rest.api.management.TableResource; import org.activiti.rest.api.management.TablesResource; +import org.activiti.rest.api.process.ProcessDefinitionDiagramResource; import org.activiti.rest.api.process.ProcessDefinitionFormResource; import org.activiti.rest.api.process.ProcessDefinitionPropertiesResource; import org.activiti.rest.api.process.ProcessDefinitionsResource; @@ -128,6 +129,7 @@ public class ActivitiRestApplication extends Application { router.attach("/processInstance/{processInstanceId}", ProcessInstanceResource.class); router.attach("/processInstance/{processInstanceId}/diagram", ProcessInstanceDiagramResource.class); router.attach("/process-definition/{processDefinitionId}/form", ProcessDefinitionFormResource.class); + router.attach("/process-definition/{processDefinitionId}/diagram", ProcessDefinitionDiagramResource.class); router.attach("/process-definition/{processDefinitionId}/properties", ProcessDefinitionPropertiesResource.class); router.attach("/tasks", TasksResource.class);