package org.activiti.rest.api.process; import java.util.HashMap; import java.util.Map; import org.activiti.engine.ActivitiException; import org.activiti.engine.RuntimeService; import org.activiti.engine.runtime.Execution; import org.activiti.rest.api.ActivitiUtil; import org.activiti.rest.api.SecuredResource; import org.apache.commons.lang.StringUtils; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.ObjectNode; import org.restlet.representation.Representation; import org.restlet.resource.Post; /** * @author Bilal Farraj <bfarraj@gmail.com> * */ public class ProcessInstanceSignalExecutionResource extends SecuredResource { @Post public ObjectNode completeReceiveTask(Representation entity) { ObjectNode responseJSON = new ObjectMapper().createObjectNode(); String processInstanceId = (String) getRequest().getAttributes().get("processInstanceId"); if (processInstanceId == null) { throw new ActivitiException("No process instance is provided"); } try { // check authentication if (authenticate() == false) return null; // extract request parameters Map<String, Object> variables = new HashMap<String, Object>(); String startParams = entity.getText(); if (StringUtils.isNotEmpty(startParams)) { JsonNode startJSON = new ObjectMapper().readTree(startParams); variables.putAll(retrieveVariables(startJSON)); } // extract activity id String activityId = (String) variables.remove("activityId"); if(activityId == null){ responseJSON.put("success", false); responseJSON.put("failureReason", "Request is missing activity id"); return responseJSON; } RuntimeService runtimeService = ActivitiUtil.getRuntimeService(); Execution execution = runtimeService.createExecutionQuery() .processInstanceId(processInstanceId) .activityId(activityId) .singleResult(); // signal receive task and attach variables if available if (variables.size() > 0) { runtimeService.signal(execution.getId(), variables); } else { runtimeService.signal(execution.getId()); } // set up and return response message responseJSON.put("success", true); return responseJSON; } catch (Exception e) { throw new ActivitiException("Failed to signal receive task for process instance id " + processInstanceId, e); } } }