提交 c43a7bc1 编写于 作者: T Tijs Rademakers

More implementation of history REST API

上级 7f4b1b1f
......@@ -23,6 +23,9 @@ import org.activiti.engine.query.Query;
*/
public interface HistoricVariableInstanceQuery extends Query<HistoricVariableInstanceQuery, HistoricVariableInstance> {
/** Only select a historic variable with the given id. */
HistoricVariableInstanceQuery id(String id);
/** Only select historic process variables with the given process instance. */
HistoricVariableInstanceQuery processInstanceId(String processInstanceId);
......
......@@ -15,7 +15,6 @@ package org.activiti.engine.impl;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.history.HistoricVariableInstanceQuery;
......@@ -32,6 +31,7 @@ public class HistoricVariableInstanceQueryImpl extends AbstractQuery<HistoricVar
HistoricVariableInstanceQuery {
private static final long serialVersionUID = 1L;
protected String id;
protected String taskId;
protected String processInstanceId;
protected String activityInstanceId;
......@@ -50,8 +50,13 @@ public class HistoricVariableInstanceQueryImpl extends AbstractQuery<HistoricVar
public HistoricVariableInstanceQueryImpl(CommandExecutor commandExecutor) {
super(commandExecutor);
}
public HistoricVariableInstanceQuery id(String id) {
this.id = id;
return this;
}
public HistoricVariableInstanceQueryImpl processInstanceId(String processInstanceId) {
public HistoricVariableInstanceQuery processInstanceId(String processInstanceId) {
if (processInstanceId == null) {
throw new ActivitiIllegalArgumentException("processInstanceId is null");
}
......
......@@ -92,6 +92,9 @@
<sql id="selectHistoricVariableInstanceByQueryCriteriaSql">
from ${prefix}ACT_HI_VARINST RES
<where>
<if test="id != null">
RES.ID_ = #{id}
</if>
<if test="processInstanceId != null">
RES.PROC_INST_ID_ = #{processInstanceId}
</if>
......
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="process" isExecutable="true">
<startEvent id="sid-8457F2D1-87A7-4B25-A6ED-FDE50CD54162"></startEvent>
<userTask id="sid-8FD9BE8E-3040-496B-8F0D-FAC03E245A56" name="中文名称去"></userTask>
<sequenceFlow id="sid-6D0B6878-8894-49B3-BBC9-CFB929A4BCE7" sourceRef="sid-8457F2D1-87A7-4B25-A6ED-FDE50CD54162" targetRef="sid-8FD9BE8E-3040-496B-8F0D-FAC03E245A56"></sequenceFlow>
<endEvent id="sid-70125006-F947-48E1-9C59-0575139B833B" name="end"></endEvent>
<sequenceFlow id="sid-270EA624-2853-469E-8C73-77B4EFC85719" sourceRef="sid-8FD9BE8E-3040-496B-8F0D-FAC03E245A56" targetRef="sid-70125006-F947-48E1-9C59-0575139B833B"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_process">
<bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
<bpmndi:BPMNShape bpmnElement="sid-8457F2D1-87A7-4B25-A6ED-FDE50CD54162" id="BPMNShape_sid-8457F2D1-87A7-4B25-A6ED-FDE50CD54162">
<omgdc:Bounds height="30.0" width="30.0" x="247.0" y="135.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-8FD9BE8E-3040-496B-8F0D-FAC03E245A56" id="BPMNShape_sid-8FD9BE8E-3040-496B-8F0D-FAC03E245A56">
<omgdc:Bounds height="80.0" width="100.0" x="322.0" y="110.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-70125006-F947-48E1-9C59-0575139B833B" id="BPMNShape_sid-70125006-F947-48E1-9C59-0575139B833B">
<omgdc:Bounds height="28.0" width="28.0" x="467.0" y="136.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-270EA624-2853-469E-8C73-77B4EFC85719" id="BPMNEdge_sid-270EA624-2853-469E-8C73-77B4EFC85719">
<omgdi:waypoint x="422.0" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="467.0" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-6D0B6878-8894-49B3-BBC9-CFB929A4BCE7" id="BPMNEdge_sid-6D0B6878-8894-49B3-BBC9-CFB929A4BCE7">
<omgdi:waypoint x="277.0" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="322.0" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
\ No newline at end of file
......@@ -84,6 +84,14 @@ import org.restlet.data.MediaType;
*/
public class RestResponseFactory {
public static final int VARIABLE_TASK = 1;
public static final int VARIABLE_EXECUTION = 2;
public static final int VARIABLE_PROCESS = 3;
public static final int VARIABLE_HISTORY_TASK = 4;
public static final int VARIABLE_HISTORY_PROCESS = 5;
public static final int VARIABLE_HISTORY_VARINSTANCE = 6;
public static final int VARIABLE_HISTORY_DETAIL = 7;
public static final String BYTE_ARRAY_VARIABLE_TYPE = "binary";
public static final String SERIALIZABLE_VARIABLE_TYPE = "serializable";
......@@ -167,33 +175,34 @@ public class RestResponseFactory {
return response;
}
public List<RestVariable> createRestVariables(SecuredResource securedResource, Map<String, Object> variables, String taskId, String executionId, String processInstanceId, RestVariableScope scope) {
public List<RestVariable> createRestVariables(SecuredResource securedResource, Map<String, Object> variables, String id, int variableType, RestVariableScope scope) {
List<RestVariable> result = new ArrayList<RestVariable>();
for(Entry<String, Object> pair : variables.entrySet()) {
result.add(createRestVariable(securedResource, pair.getKey(), pair.getValue(), scope, taskId, executionId, processInstanceId, null, false));
result.add(createRestVariable(securedResource, pair.getKey(), pair.getValue(), scope, id, variableType, false));
}
return result;
}
public RestVariable createRestVariable(SecuredResource securedResource, String name, Object value, RestVariableScope scope, String taskId,
String executionId, String processInstanceId, String historicDetailId, boolean includeBinaryValue) {
public RestVariable createRestVariable(SecuredResource securedResource, String name, Object value, RestVariableScope scope,
String id, int variableType, boolean includeBinaryValue) {
RestVariableConverter converter = null;
RestVariable restVar = new RestVariable();
restVar.setVariableScope(scope);
restVar.setName(name);
if(value != null) {
if (value != null) {
// Try converting the value
for(RestVariableConverter c : variableConverters) {
if(value.getClass().isAssignableFrom(c.getVariableType())) {
for (RestVariableConverter c : variableConverters) {
if (value.getClass().isAssignableFrom(c.getVariableType())) {
converter = c;
break;
}
}
if(converter != null) {
if (converter != null) {
converter.convertVariableValue(value, restVar);
restVar.setType(converter.getRestTypeName());
} else {
......@@ -204,24 +213,24 @@ public class RestResponseFactory {
restVar.setType(SERIALIZABLE_VARIABLE_TYPE);
}
if(includeBinaryValue) {
if (includeBinaryValue) {
restVar.setValue(value);
}
if(taskId != null) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_TASK_VARIABLE_DATA, taskId, name));
}
if(executionId != null) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_EXECUTION_VARIABLE_DATA, executionId, name));
}
if(processInstanceId != null) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_PROCESS_INSTANCE_VARIABLE_DATA, processInstanceId, name));
}
if(historicDetailId != null) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_DETAIL_VARIABLE_DATA, historicDetailId));
if (variableType == VARIABLE_TASK) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_TASK_VARIABLE_DATA, id, name));
} else if (variableType == VARIABLE_EXECUTION) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_EXECUTION_VARIABLE_DATA, id, name));
} else if (variableType == VARIABLE_PROCESS) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_PROCESS_INSTANCE_VARIABLE_DATA, id, name));
} else if (variableType == VARIABLE_HISTORY_TASK) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_TASK_INSTANCE_VARIABLE_DATA, id, name));
} else if (variableType == VARIABLE_HISTORY_PROCESS) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_PROCESS_INSTANCE_VARIABLE_DATA, id, name));
} else if (variableType == VARIABLE_HISTORY_VARINSTANCE) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_VARIABLE_INSTANCE_DATA, id));
} else if (variableType == VARIABLE_HISTORY_DETAIL) {
restVar.setValueUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_DETAIL_VARIABLE_DATA, id));
}
}
}
......@@ -425,6 +434,13 @@ public class RestResponseFactory {
result.setStartUserId(processInstance.getStartUserId());
result.setSuperProcessInstanceId(processInstance.getSuperProcessInstanceId());
result.setUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_PROCESS_INSTANCE, processInstance.getId()));
if (processInstance.getProcessVariables() != null) {
Map<String, Object> variableMap = processInstance.getProcessVariables();
for (String name : variableMap.keySet()) {
result.addVariable(createRestVariable(securedResource, name, variableMap.get(name),
RestVariableScope.GLOBAL, processInstance.getId(), VARIABLE_HISTORY_PROCESS, false));
}
}
return result;
}
......@@ -452,6 +468,20 @@ public class RestResponseFactory {
result.setTaskDefinitionKey(taskInstance.getTaskDefinitionKey());
result.setWorkTimeInMillis(taskInstance.getWorkTimeInMillis());
result.setUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_TASK_INSTANCE, taskInstance.getId()));
if (taskInstance.getProcessVariables() != null) {
Map<String, Object> variableMap = taskInstance.getProcessVariables();
for (String name : variableMap.keySet()) {
result.addVariable(createRestVariable(securedResource, name, variableMap.get(name),
RestVariableScope.GLOBAL, taskInstance.getId(), VARIABLE_HISTORY_TASK, false));
}
}
if (taskInstance.getTaskLocalVariables() != null) {
Map<String, Object> variableMap = taskInstance.getTaskLocalVariables();
for (String name : variableMap.keySet()) {
result.addVariable(createRestVariable(securedResource, name, variableMap.get(name),
RestVariableScope.LOCAL, taskInstance.getId(), VARIABLE_HISTORY_TASK, false));
}
}
return result;
}
......@@ -481,9 +511,8 @@ public class RestResponseFactory {
result.setProcessInstanceId(variableInstance.getProcessInstanceId());
result.setProcessInstanceUrl(securedResource.createFullResourceUrl(RestUrls.URL_HISTORIC_PROCESS_INSTANCE, variableInstance.getProcessInstanceId()));
result.setTaskId(variableInstance.getTaskId());
result.setValue(variableInstance.getValue());
result.setVariableName(variableInstance.getVariableName());
result.setVariableTypeName(variableInstance.getVariableTypeName());
result.setVariable(createRestVariable(securedResource, variableInstance.getVariableName(), variableInstance.getValue(),
null, variableInstance.getId(), VARIABLE_HISTORY_VARINSTANCE, false));
return result;
}
......@@ -511,7 +540,7 @@ public class RestResponseFactory {
result.setDetailType(HistoricDetailResponse.VARIABLE_UPDATE);
result.setRevision(variableUpdate.getRevision());
result.setVariable(createRestVariable(securedResource, variableUpdate.getVariableName(), variableUpdate.getValue(),
null, null, null, null, detail.getId(), false));
null, detail.getId(), VARIABLE_HISTORY_DETAIL, false));
}
return result;
}
......
......@@ -254,6 +254,11 @@ public final class RestUrls {
*/
public static final String[] URL_HISTORIC_PROCESS_INSTANCES = {SEGMENT_HISTORY_RESOURCES, SEGMENT_HISTORIC_PROCESS_INSTANCE_RESOURCE};
/**
* URL template for a single historic task instance: <i>history/historic-process-instances/{0:processInstanceId}/variables/{1:variableName}</i>
*/
public static final String[] URL_HISTORIC_PROCESS_INSTANCE_VARIABLE_DATA = {SEGMENT_HISTORY_RESOURCES, SEGMENT_HISTORIC_PROCESS_INSTANCE_RESOURCE, "{0}", SEGMENT_VARIABLES, "{1}", SEGMENT_VARIABLE_DATA};
/**
* URL template for a single historic task instance: <i>history/historic-task-instances/{0:taskId}</i>
*/
......@@ -264,6 +269,11 @@ public final class RestUrls {
*/
public static final String[] URL_HISTORIC_TASK_INSTANCES = {SEGMENT_HISTORY_RESOURCES, SEGMENT_HISTORIC_TASK_INSTANCE_RESOURCE};
/**
* URL template for a single historic task instance: <i>history/historic-task-instances/{0:taskId}/variables/{1:variableName}</i>
*/
public static final String[] URL_HISTORIC_TASK_INSTANCE_VARIABLE_DATA = {SEGMENT_HISTORY_RESOURCES, SEGMENT_HISTORIC_TASK_INSTANCE_RESOURCE, "{0}", SEGMENT_VARIABLES, "{1}", SEGMENT_VARIABLE_DATA};
/**
* URL template for historic activity instance query: <i>history/historic-activity-instances</i>
*/
......@@ -274,6 +284,11 @@ public final class RestUrls {
*/
public static final String[] URL_HISTORIC_VARIABLE_INSTANCES = {SEGMENT_HISTORY_RESOURCES, SEGMENT_HISTORIC_VARIABLE_INSTANCE_RESOURCE};
/**
* URL template for a single historic variable instance data: <i>history/historic-variable-instances/{0:varInstanceId}/data</i>
*/
public static final String[] URL_HISTORIC_VARIABLE_INSTANCE_DATA = {SEGMENT_HISTORY_RESOURCES, SEGMENT_HISTORIC_VARIABLE_INSTANCE_RESOURCE, "{0}", SEGMENT_VARIABLE_DATA};
/**
* URL template for historic detail query: <i>history/historic-detail</i>
*/
......
......@@ -36,7 +36,7 @@ import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
/**
* @author Frederik Heremans
* @author Tijs Rademakers
*/
public class HistoricDetailDataResource extends SecuredResource {
......@@ -87,8 +87,9 @@ public class HistoricDetailDataResource extends SecuredResource {
if(value == null) {
throw new ActivitiObjectNotFoundException("Historic detail '" + detailId + "' doesn't have a variable value.", VariableInstanceEntity.class);
} else {
return getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.createRestVariable(this, variableUpdate.getVariableName(), value, null, null, null, null, detailId, includeBinary);
RestResponseFactory responseFactory = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory();
return responseFactory.createRestVariable(this, variableUpdate.getVariableName(), value, null, detailId,
RestResponseFactory.VARIABLE_HISTORY_DETAIL, includeBinary);
}
}
}
......@@ -90,6 +90,11 @@ public class HistoricProcessInstanceBaseResource extends SecuredResource {
query.unfinished();
}
}
if (queryRequest.getIncludeProcessVariables() != null) {
if (queryRequest.getIncludeProcessVariables()) {
query.includeProcessVariables();
}
}
if (queryRequest.getVariables() != null) {
addVariables(query, queryRequest.getVariables());
}
......
......@@ -82,6 +82,10 @@ public class HistoricProcessInstanceCollectionResource extends HistoricProcessIn
queryRequest.setStartedBy(getQueryParameter("startedBy", urlQuery));
}
if(getQueryParameter("includeProcessVariables", urlQuery) != null) {
queryRequest.setIncludeProcessVariables(getQueryParameterAsBoolean("includeProcessVariables", urlQuery));
}
return getQueryResponse(queryRequest, urlQuery);
}
}
......@@ -38,6 +38,7 @@ public class HistoricProcessInstanceQueryRequest {
private Date startedAfter;
private Date startedBefore;
private String startedBy;
private Boolean includeProcessVariables;
private List<QueryVariable> variables;
public String getProcessInstanceId() {
......@@ -136,6 +137,14 @@ public class HistoricProcessInstanceQueryRequest {
this.startedBy = startedBy;
}
public Boolean getIncludeProcessVariables() {
return includeProcessVariables;
}
public void setIncludeProcessVariables(Boolean includeProcessVariables) {
this.includeProcessVariables = includeProcessVariables;
}
@JsonTypeInfo(use=Id.CLASS, defaultImpl=QueryVariable.class)
public List<QueryVariable> getVariables() {
return variables;
......
......@@ -13,7 +13,11 @@
package org.activiti.rest.api.history;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.activiti.rest.api.engine.variable.RestVariable;
/**
* @author Tijs Rademakers
......@@ -33,6 +37,7 @@ public class HistoricProcessInstanceResponse {
protected String endActivityId;
protected String deleteReason;
protected String superProcessInstanceId;
protected List<RestVariable> variables = new ArrayList<RestVariable>();
public String getId() {
return id;
......@@ -112,4 +117,13 @@ public class HistoricProcessInstanceResponse {
public void setSuperProcessInstanceId(String superProcessInstanceId) {
this.superProcessInstanceId = superProcessInstanceId;
}
public List<RestVariable> getVariables() {
return variables;
}
public void setVariables(List<RestVariable> variables) {
this.variables = variables;
}
public void addVariable(RestVariable variable) {
variables.add(variable);
}
}
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.rest.api.history;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.impl.persistence.entity.HistoricProcessInstanceEntity;
import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;
import org.activiti.rest.api.ActivitiUtil;
import org.activiti.rest.api.RestResponseFactory;
import org.activiti.rest.api.SecuredResource;
import org.activiti.rest.api.engine.variable.RestVariable;
import org.activiti.rest.application.ActivitiRestServicesApplication;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
import org.restlet.representation.InputRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
/**
* @author Tijs Rademakers
*/
public class HistoricProcessInstanceVariableDataResource extends SecuredResource {
@Get
public InputRepresentation getVariableData() {
if (authenticate() == false)
return null;
try {
InputStream dataStream = null;
MediaType mediaType = null;
RestVariable variable = getVariableFromRequest(true);
if(RestResponseFactory.BYTE_ARRAY_VARIABLE_TYPE.equals(variable.getType())) {
dataStream = new ByteArrayInputStream((byte[]) variable.getValue());
mediaType = MediaType.APPLICATION_OCTET_STREAM;
} else if(RestResponseFactory.SERIALIZABLE_VARIABLE_TYPE.equals(variable.getType())) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(buffer);
outputStream.writeObject(variable.getValue());
outputStream.close();
dataStream = new ByteArrayInputStream(buffer.toByteArray());
mediaType = MediaType.APPLICATION_JAVA_OBJECT;
} else {
throw new ResourceException(new Status(Status.CLIENT_ERROR_NOT_FOUND.getCode(), "The variable does not have a binary data stream.", null, null));
}
return new InputRepresentation(dataStream, mediaType);
} catch(IOException ioe) {
// Re-throw IOException
throw new ResourceException(Status.SERVER_ERROR_INTERNAL, ioe);
}
}
public RestVariable getVariableFromRequest(boolean includeBinary) {
String processInstanceId = getAttribute("processInstanceId");
if (processInstanceId == null) {
throw new ActivitiIllegalArgumentException("The processInstanceId cannot be null");
}
String variableName = getAttribute("variableName");
if (variableName == null) {
throw new ActivitiIllegalArgumentException("The variableName cannot be null");
}
HistoricProcessInstance processObject = ActivitiUtil.getHistoryService().createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).includeProcessVariables().singleResult();
if (processObject == null) {
throw new ActivitiObjectNotFoundException("Historic process instance '" + processInstanceId + "' couldn't be found.", HistoricProcessInstanceEntity.class);
}
Object value = processObject.getProcessVariables().get(variableName);
if (value == null) {
throw new ActivitiObjectNotFoundException("Historic process instance '" + processInstanceId + "' variable value for " + variableName + " couldn't be found.", VariableInstanceEntity.class);
} else {
RestResponseFactory responseFactory = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory();
return responseFactory.createRestVariable(this, variableName, value, null, processInstanceId,
RestResponseFactory.VARIABLE_HISTORY_PROCESS, includeBinary);
}
}
}
......@@ -13,35 +13,40 @@
package org.activiti.rest.api.history;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.activiti.rest.api.engine.variable.RestVariable;
/**
* @author Tijs Rademakers
*/
public class HistoricTaskInstanceResponse {
private String id;
private String processDefinitionId;
private String processDefinitionUrl;
private String processInstanceId;
private String processInstanceUrl;
private String executionId;
private String name;
private String description;
private String deleteReason;
private String owner;
private String assignee;
private Date startTime;
private Date endTime;
private Long durationInMillis;
private Long workTimeInMillis;
private Date claimTime;
private String taskDefinitionKey;
private String formKey;
private Integer priority;
private Date dueDate;
private String parentTaskId;
private String url;
protected String id;
protected String processDefinitionId;
protected String processDefinitionUrl;
protected String processInstanceId;
protected String processInstanceUrl;
protected String executionId;
protected String name;
protected String description;
protected String deleteReason;
protected String owner;
protected String assignee;
protected Date startTime;
protected Date endTime;
protected Long durationInMillis;
protected Long workTimeInMillis;
protected Date claimTime;
protected String taskDefinitionKey;
protected String formKey;
protected Integer priority;
protected Date dueDate;
protected String parentTaskId;
protected String url;
protected List<RestVariable> variables = new ArrayList<RestVariable>();
public String getId() {
return id;
......@@ -175,4 +180,13 @@ public class HistoricTaskInstanceResponse {
public void setUrl(String url) {
this.url = url;
}
public List<RestVariable> getVariables() {
return variables;
}
public void setVariables(List<RestVariable> variables) {
this.variables = variables;
}
public void addVariable(RestVariable variable) {
variables.add(variable);
}
}
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.rest.api.history;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity;
import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;
import org.activiti.rest.api.ActivitiUtil;
import org.activiti.rest.api.RestResponseFactory;
import org.activiti.rest.api.SecuredResource;
import org.activiti.rest.api.engine.variable.RestVariable;
import org.activiti.rest.api.engine.variable.RestVariable.RestVariableScope;
import org.activiti.rest.application.ActivitiRestServicesApplication;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
import org.restlet.representation.InputRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
/**
* @author Tijs Rademakers
*/
public class HistoricTaskInstanceVariableDataResource extends SecuredResource {
@Get
public InputRepresentation getVariableData() {
if (authenticate() == false)
return null;
try {
InputStream dataStream = null;
MediaType mediaType = null;
RestVariable variable = getVariableFromRequest(true);
if(RestResponseFactory.BYTE_ARRAY_VARIABLE_TYPE.equals(variable.getType())) {
dataStream = new ByteArrayInputStream((byte[]) variable.getValue());
mediaType = MediaType.APPLICATION_OCTET_STREAM;
} else if(RestResponseFactory.SERIALIZABLE_VARIABLE_TYPE.equals(variable.getType())) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(buffer);
outputStream.writeObject(variable.getValue());
outputStream.close();
dataStream = new ByteArrayInputStream(buffer.toByteArray());
mediaType = MediaType.APPLICATION_JAVA_OBJECT;
} else {
throw new ResourceException(new Status(Status.CLIENT_ERROR_NOT_FOUND.getCode(), "The variable does not have a binary data stream.", null, null));
}
return new InputRepresentation(dataStream, mediaType);
} catch(IOException ioe) {
// Re-throw IOException
throw new ResourceException(Status.SERVER_ERROR_INTERNAL, ioe);
}
}
public RestVariable getVariableFromRequest(boolean includeBinary) {
String taskId = getAttribute("taskId");
if (taskId == null) {
throw new ActivitiIllegalArgumentException("The taskId cannot be null");
}
String variableName = getAttribute("variableName");
if (variableName == null) {
throw new ActivitiIllegalArgumentException("The variableName cannot be null");
}
RestVariableScope variableScope = RestVariable.getScopeFromString(getQueryParameter("scope", getQuery()));
HistoricTaskInstanceQuery taskQuery = ActivitiUtil.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId);
if (variableScope != null) {
if (variableScope == RestVariableScope.GLOBAL) {
taskQuery.includeProcessVariables();
} else {
taskQuery.includeTaskLocalVariables();
}
} else {
taskQuery.includeTaskLocalVariables().includeProcessVariables();
}
HistoricTaskInstance taskObject = taskQuery.singleResult();
if (taskObject == null) {
throw new ActivitiObjectNotFoundException("Historic task instance '" + taskId + "' couldn't be found.", HistoricTaskInstanceEntity.class);
}
Object value = null;
if (variableScope != null) {
if (variableScope == RestVariableScope.GLOBAL) {
value = taskObject.getProcessVariables().get(variableName);
} else {
value = taskObject.getTaskLocalVariables().get(variableName);
}
} else {
// look for local task variables first
if (taskObject.getTaskLocalVariables().containsKey(variableName)) {
value = taskObject.getTaskLocalVariables().get(variableName);
} else {
value = taskObject.getProcessVariables().get(variableName);
}
}
if (value == null) {
throw new ActivitiObjectNotFoundException("Historic task instance '" + taskId + "' variable value for " + variableName + " couldn't be found.", VariableInstanceEntity.class);
} else {
RestResponseFactory responseFactory = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory();
return responseFactory.createRestVariable(this, variableName, value, null, taskId,
RestResponseFactory.VARIABLE_HISTORY_TASK, includeBinary);
}
}
}
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.rest.api.history;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;
import org.activiti.rest.api.ActivitiUtil;
import org.activiti.rest.api.RestResponseFactory;
import org.activiti.rest.api.SecuredResource;
import org.activiti.rest.api.engine.variable.RestVariable;
import org.activiti.rest.application.ActivitiRestServicesApplication;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
import org.restlet.representation.InputRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
/**
* @author Tijs Rademakers
*/
public class HistoricVariableInstanceDataResource extends SecuredResource {
@Get
public InputRepresentation getVariableData() {
if (authenticate() == false)
return null;
try {
InputStream dataStream = null;
MediaType mediaType = null;
RestVariable variable = getVariableFromRequest(true);
if(RestResponseFactory.BYTE_ARRAY_VARIABLE_TYPE.equals(variable.getType())) {
dataStream = new ByteArrayInputStream((byte[]) variable.getValue());
mediaType = MediaType.APPLICATION_OCTET_STREAM;
} else if(RestResponseFactory.SERIALIZABLE_VARIABLE_TYPE.equals(variable.getType())) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(buffer);
outputStream.writeObject(variable.getValue());
outputStream.close();
dataStream = new ByteArrayInputStream(buffer.toByteArray());
mediaType = MediaType.APPLICATION_JAVA_OBJECT;
} else {
throw new ResourceException(new Status(Status.CLIENT_ERROR_NOT_FOUND.getCode(), "The variable does not have a binary data stream.", null, null));
}
return new InputRepresentation(dataStream, mediaType);
} catch(IOException ioe) {
// Re-throw IOException
throw new ResourceException(Status.SERVER_ERROR_INTERNAL, ioe);
}
}
public RestVariable getVariableFromRequest(boolean includeBinary) {
String varInstanceId = getAttribute("varInstanceId");
if (varInstanceId == null) {
throw new ActivitiIllegalArgumentException("The varInstanceId cannot be null");
}
HistoricVariableInstance varObject = ActivitiUtil.getHistoryService().createHistoricVariableInstanceQuery().id(varInstanceId).singleResult();
if(varObject == null) {
throw new ActivitiObjectNotFoundException("Historic variable instance '" + varInstanceId + "' couldn't be found.", VariableInstanceEntity.class);
} else {
RestResponseFactory responseFactory = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory();
return responseFactory.createRestVariable(this, varObject.getVariableName(), varObject.getValue(), null, varInstanceId,
RestResponseFactory.VARIABLE_HISTORY_VARINSTANCE, includeBinary);
}
}
}
......@@ -13,6 +13,8 @@
package org.activiti.rest.api.history;
import org.activiti.rest.api.engine.variable.RestVariable;
/**
* @author Tijs Rademakers
......@@ -20,12 +22,10 @@ package org.activiti.rest.api.history;
public class HistoricVariableInstanceResponse {
protected String id;
protected String variableName;
protected String variableTypeName;
protected Object value;
protected String processInstanceId;
protected String processInstanceUrl;
protected String taskId;
protected RestVariable variable;
public String getId() {
return id;
......@@ -33,24 +33,6 @@ public class HistoricVariableInstanceResponse {
public void setId(String id) {
this.id = id;
}
public String getVariableName() {
return variableName;
}
public void setVariableName(String variableName) {
this.variableName = variableName;
}
public String getVariableTypeName() {
return variableTypeName;
}
public void setVariableTypeName(String variableTypeName) {
this.variableTypeName = variableTypeName;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public String getProcessInstanceId() {
return processInstanceId;
}
......@@ -69,4 +51,10 @@ public class HistoricVariableInstanceResponse {
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public RestVariable getVariable() {
return variable;
}
public void setVariable(RestVariable variable) {
this.variable = variable;
}
}
......@@ -237,7 +237,7 @@ public class BaseExecutionVariableResource extends SecuredResource {
protected RestVariable constructRestVariable(SecuredResource securedResource, String variableName, Object value,
RestVariableScope variableScope, String executionId, boolean includeBinary) {
return getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.createRestVariable(this, variableName, value, variableScope, null, executionId, null, null, includeBinary);
.createRestVariable(this, variableName, value, variableScope, executionId, RestResponseFactory.VARIABLE_EXECUTION, includeBinary);
}
/**
......
......@@ -120,7 +120,7 @@ public class ExecutionVariableCollectionResource extends BaseExecutionVariableRe
Object actualVariableValue = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.getVariableValue(var);
variablesToSet.put(var.getName(), actualVariableValue);
variables.add(factory.createRestVariable(this, var.getName(), actualVariableValue, varScope, execution.getId(), null, null, null, false));
variables.add(factory.createRestVariable(this, var.getName(), actualVariableValue, varScope, execution.getId(), RestResponseFactory.VARIABLE_EXECUTION, false));
}
if(variablesToSet.size() > 0) {
......@@ -156,7 +156,7 @@ public class ExecutionVariableCollectionResource extends BaseExecutionVariableRe
protected void addGlobalVariables(Execution execution, Map<String, RestVariable> variableMap) {
Map<String, Object> rawVariables = ActivitiUtil.getRuntimeService().getVariables(execution.getId());
List<RestVariable> globalVariables = getApplication(ActivitiRestServicesApplication.class)
.getRestResponseFactory().createRestVariables(this, rawVariables, null, execution.getId(), null, RestVariableScope.GLOBAL);
.getRestResponseFactory().createRestVariables(this, rawVariables, execution.getId(), RestResponseFactory.VARIABLE_EXECUTION, RestVariableScope.GLOBAL);
// Overlay global variables over local ones. In case they are present the values are not overridden,
// since local variables get precedence over global ones at all times.
......@@ -171,7 +171,7 @@ public class ExecutionVariableCollectionResource extends BaseExecutionVariableRe
protected void addLocalVariables(Execution execution, Map<String, RestVariable> variableMap) {
Map<String, Object> rawLocalvariables = ActivitiUtil.getRuntimeService().getVariablesLocal(execution.getId());
List<RestVariable> localVariables = getApplication(ActivitiRestServicesApplication.class)
.getRestResponseFactory().createRestVariables(this, rawLocalvariables, null, execution.getId(), null, RestVariableScope.LOCAL);
.getRestResponseFactory().createRestVariables(this, rawLocalvariables, execution.getId(), RestResponseFactory.VARIABLE_EXECUTION, RestVariableScope.LOCAL);
for(RestVariable var : localVariables) {
variableMap.put(var.getName(), var);
......
......@@ -21,8 +21,8 @@ import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.rest.api.ActivitiUtil;
import org.activiti.rest.api.RestResponseFactory;
import org.activiti.rest.api.engine.variable.RestVariable;
import org.activiti.rest.api.engine.variable.RestVariable.RestVariableScope;
import org.activiti.rest.application.ActivitiRestServicesApplication;
......@@ -49,9 +49,14 @@ public class ProcessInstanceVariableCollectionResource extends ExecutionVariable
}
protected void addGlobalVariables(Execution execution, Map<String, RestVariable> variableMap) {
// no global variables
}
//For process instance there's only one scope. Using the local variables method for that
protected void addLocalVariables(Execution execution, Map<String, RestVariable> variableMap) {
Map<String, Object> rawVariables = ActivitiUtil.getRuntimeService().getVariables(execution.getId());
List<RestVariable> globalVariables = getApplication(ActivitiRestServicesApplication.class)
.getRestResponseFactory().createRestVariables(this, rawVariables, null, null, execution.getId(), RestVariableScope.GLOBAL);
.getRestResponseFactory().createRestVariables(this, rawVariables, execution.getId(), RestResponseFactory.VARIABLE_PROCESS, null);
// Overlay global variables over local ones. In case they are present the values are not overridden,
// since local variables get precedence over global ones at all times.
......@@ -61,17 +66,6 @@ public class ProcessInstanceVariableCollectionResource extends ExecutionVariable
}
}
}
protected void addLocalVariables(Execution execution, Map<String, RestVariable> variableMap) {
Map<String, Object> rawLocalvariables = ActivitiUtil.getRuntimeService().getVariablesLocal(execution.getId());
List<RestVariable> localVariables = getApplication(ActivitiRestServicesApplication.class)
.getRestResponseFactory().createRestVariables(this, rawLocalvariables, null, null, execution.getId(), RestVariableScope.LOCAL);
for(RestVariable var : localVariables) {
variableMap.put(var.getName(), var);
}
}
@Override
protected boolean allowProcessInstanceUrl() {
......
......@@ -18,6 +18,7 @@ import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.rest.api.ActivitiUtil;
import org.activiti.rest.api.RestResponseFactory;
import org.activiti.rest.api.SecuredResource;
import org.activiti.rest.api.engine.variable.RestVariable;
import org.activiti.rest.api.engine.variable.RestVariable.RestVariableScope;
......@@ -50,7 +51,7 @@ public class ProcessInstanceVariableResource extends ExecutionVariableResource {
protected RestVariable constructRestVariable(SecuredResource securedResource, String variableName, Object value, RestVariableScope variableScope,
String executionId, boolean includeBinary) {
return getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.createRestVariable(this, variableName, value, variableScope, null, null, executionId, null, includeBinary);
.createRestVariable(this, variableName, value, null, executionId, RestResponseFactory.VARIABLE_PROCESS, includeBinary);
}
@Override
......
......@@ -89,8 +89,8 @@ public class TaskVariableBaseResource extends TaskBaseResource {
if(!variableFound) {
throw new ActivitiObjectNotFoundException("Task '" + taskId + "' doesn't have a variable with name: '" + variableName + "'.", VariableInstanceEntity.class);
} else {
return getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.createRestVariable(this, variableName, value, variableScope, taskId, null, null, null, includeBinary);
RestResponseFactory responseFactory = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory();
return responseFactory.createRestVariable(this, variableName, value, variableScope, taskId, RestResponseFactory.VARIABLE_TASK, includeBinary);
}
}
......@@ -197,9 +197,8 @@ public class TaskVariableBaseResource extends TaskBaseResource {
.getVariableValue(restVariable);
setVariable(task, restVariable.getName(), actualVariableValue, scope, isNew);
return getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.createRestVariable(this, restVariable.getName(), actualVariableValue, scope, task.getId(), null, null, null, false);
RestResponseFactory responseFactory = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory();
return responseFactory.createRestVariable(this, restVariable.getName(), actualVariableValue, scope, task.getId(), RestResponseFactory.VARIABLE_TASK, false);
}
protected void setVariable(Task task, String name, Object value, RestVariableScope scope, boolean isNew) {
......
......@@ -118,7 +118,7 @@ public class TaskVariableCollectionResource extends TaskVariableBaseResource {
Object actualVariableValue = getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.getVariableValue(var);
variablesToSet.put(var.getName(), actualVariableValue);
variables.add(factory.createRestVariable(this, var.getName(), actualVariableValue, varScope, task.getId(), null, null, null, false));
variables.add(factory.createRestVariable(this, var.getName(), actualVariableValue, varScope, task.getId(), RestResponseFactory.VARIABLE_TASK, false));
}
if(variablesToSet.size() > 0) {
......@@ -155,7 +155,7 @@ public class TaskVariableCollectionResource extends TaskVariableBaseResource {
if(task.getExecutionId() != null) {
Map<String, Object> rawVariables = ActivitiUtil.getRuntimeService().getVariables(task.getExecutionId());
List<RestVariable> globalVariables = getApplication(ActivitiRestServicesApplication.class)
.getRestResponseFactory().createRestVariables(this, rawVariables, task.getId(), null, null, RestVariableScope.GLOBAL);
.getRestResponseFactory().createRestVariables(this, rawVariables, task.getId(), RestResponseFactory.VARIABLE_TASK, RestVariableScope.GLOBAL);
// Overlay global variables over local ones. In case they are present the values are not overridden,
// since local variables get precedence over global ones at all times.
......@@ -171,7 +171,7 @@ public class TaskVariableCollectionResource extends TaskVariableBaseResource {
protected void addLocalVariables(Task task, Map<String, RestVariable> variableMap) {
Map<String, Object> rawVariables = ActivitiUtil.getTaskService().getVariablesLocal(task.getId());
List<RestVariable> localVariables = getApplication(ActivitiRestServicesApplication.class)
.getRestResponseFactory().createRestVariables(this, rawVariables, task.getId(), null, null, RestVariableScope.LOCAL);
.getRestResponseFactory().createRestVariables(this, rawVariables, task.getId(), RestResponseFactory.VARIABLE_TASK, RestVariableScope.LOCAL);
for(RestVariable var : localVariables) {
variableMap.put(var.getName(), var);
......
......@@ -10,10 +10,13 @@ import org.activiti.rest.api.history.HistoricFormPropertiesResource;
import org.activiti.rest.api.history.HistoricProcessInstanceCollectionResource;
import org.activiti.rest.api.history.HistoricProcessInstanceQueryResource;
import org.activiti.rest.api.history.HistoricProcessInstanceResource;
import org.activiti.rest.api.history.HistoricProcessInstanceVariableDataResource;
import org.activiti.rest.api.history.HistoricTaskInstanceCollectionResource;
import org.activiti.rest.api.history.HistoricTaskInstanceQueryResource;
import org.activiti.rest.api.history.HistoricTaskInstanceResource;
import org.activiti.rest.api.history.HistoricTaskInstanceVariableDataResource;
import org.activiti.rest.api.history.HistoricVariableInstanceCollectionResource;
import org.activiti.rest.api.history.HistoricVariableInstanceDataResource;
import org.activiti.rest.api.history.HistoricVariableInstanceQueryResource;
import org.activiti.rest.api.identity.GroupCollectionResource;
import org.activiti.rest.api.identity.GroupMembershipCollectionResource;
......@@ -158,11 +161,14 @@ public class RestServicesInit {
router.attach("/runtime/executions/{executionId}/variables/{variableName}/data", ExecutionVariableDataResource.class);
router.attach("/history/historic-process-instances/{processInstanceId}", HistoricProcessInstanceResource.class);
router.attach("/history/historic-process-instances/{processInstanceId}/variables/{variableName}/data", HistoricProcessInstanceVariableDataResource.class);
router.attach("/history/historic-process-instances", HistoricProcessInstanceCollectionResource.class);
router.attach("/history/historic-task-instances/{taskId}", HistoricTaskInstanceResource.class);
router.attach("/history/historic-task-instances/{taskId}/variables/{variableName}/data", HistoricTaskInstanceVariableDataResource.class);
router.attach("/history/historic-task-instances", HistoricTaskInstanceCollectionResource.class);
router.attach("/history/historic-activity-instances", HistoricActivityInstanceCollectionResource.class);
router.attach("/history/historic-variable-instances", HistoricVariableInstanceCollectionResource.class);
router.attach("/history/historic-variable-instances/{varInstanceId}/data", HistoricVariableInstanceDataResource.class);
router.attach("/history/historic-detail", HistoricDetailCollectionResource.class);
router.attach("/history/historic-detail/{detailId}/data", HistoricDetailDataResource.class);
......
......@@ -94,8 +94,9 @@ public class HistoricVariableInstanceCollectionResourceTest extends BaseRestTest
boolean variableFound = false;
Iterator<JsonNode> it = dataNode.iterator();
while(it.hasNext()) {
JsonNode variableNode = it.next();
String name = variableNode.get("variableName").getTextValue();
JsonNode dataElementNode = it.next();
JsonNode variableNode = dataElementNode.get("variable");
String name = variableNode.get("name").getTextValue();
if (variableName.equals(name)) {
variableFound = true;
if (variableValue instanceof Boolean) {
......
......@@ -142,8 +142,9 @@ public class HistoricVariableInstanceQueryResourceTest extends BaseRestTestCase
boolean variableFound = false;
Iterator<JsonNode> it = dataNode.iterator();
while(it.hasNext()) {
JsonNode variableNode = it.next();
String name = variableNode.get("variableName").getTextValue();
JsonNode dataElementNode = it.next();
JsonNode variableNode = dataElementNode.get("variable");
String name = variableNode.get("name").getTextValue();
if (variableName.equals(name)) {
variableFound = true;
if (variableValue instanceof Boolean) {
......
......@@ -58,7 +58,6 @@ public class ProcessInstanceVariableResourceTest extends BaseRestTestCase {
JsonNode responseNode = objectMapper.readTree(response.getStream());
assertNotNull(responseNode);
assertEquals("local", responseNode.get("scope").asText());
assertEquals("processValue", responseNode.get("value").asText());
assertEquals("variable", responseNode.get("name").asText());
assertEquals("string", responseNode.get("type").asText());
......@@ -187,7 +186,7 @@ public class ProcessInstanceVariableResourceTest extends BaseRestTestCase {
Representation response = client.delete();
assertEquals(Status.SUCCESS_NO_CONTENT, client.getResponse().getStatus());
assertEquals(0L, response.getSize());
assertFalse(runtimeService.hasVariableLocal(processInstance.getId(), "myVariable"));
assertFalse(runtimeService.hasVariable(processInstance.getId(), "myVariable"));
// Run the same delete again, variable is not there so 404 should be returned
client.release();
......@@ -209,7 +208,7 @@ public class ProcessInstanceVariableResourceTest extends BaseRestTestCase {
public void testUpdateProcessVariable() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess",
Collections.singletonMap("overlappingVariable", (Object) "processValue"));
runtimeService.setVariableLocal(processInstance.getId(), "myVar", "value");
runtimeService.setVariable(processInstance.getId(), "myVar", "value");
// Update variable
ObjectNode requestNode = objectMapper.createObjectNode();
......@@ -224,7 +223,6 @@ public class ProcessInstanceVariableResourceTest extends BaseRestTestCase {
JsonNode responseNode = objectMapper.readTree(response.getStream());
assertNotNull(responseNode);
assertEquals("updatedValue", responseNode.get("value").asText());
assertEquals("local", responseNode.get("scope").asText());
// Try updating with mismatch between URL and body variableName
......@@ -259,7 +257,7 @@ public class ProcessInstanceVariableResourceTest extends BaseRestTestCase {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess",
Collections.singletonMap("overlappingVariable", (Object) "processValue"));
runtimeService.setVariableLocal(processInstance.getId(), "binaryVariable", "Initial binary value".getBytes());
runtimeService.setVariable(processInstance.getId(), "binaryVariable", "Initial binary value".getBytes());
InputStream binaryContent = new ByteArrayInputStream("This is binary content".getBytes());
......@@ -279,7 +277,6 @@ public class ProcessInstanceVariableResourceTest extends BaseRestTestCase {
assertNotNull(responseNode);
assertEquals("binaryVariable", responseNode.get("name").asText());
assertTrue(responseNode.get("value").isNull());
assertEquals("local", responseNode.get("scope").asText());
assertEquals("binary", responseNode.get("type").asText());
assertNotNull(responseNode.get("valueUrl").isNull());
assertTrue(responseNode.get("valueUrl").asText()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册