提交 816e5c72 编写于 作者: T tijsrademakers

Added history docs

......@@ -115,17 +115,17 @@ public class RestResponseFactory {
response.setUrl(resourceContext.createFullResourceUrl(RestUrls.URL_TASK, task.getId()));
// Add references to other resources, if needed
if(task.getParentTaskId() != null) {
response.setParentTask(resourceContext.createFullResourceUrl(RestUrls.URL_TASK, task.getParentTaskId()));
if (response.getParentTaskId() != null) {
response.setParentTaskUrl(resourceContext.createFullResourceUrl(RestUrls.URL_TASK, response.getParentTaskId()));
}
if(task.getProcessDefinitionId() != null) {
response.setProcessDefinition(resourceContext.createFullResourceUrl(RestUrls.URL_PROCESS_DEFINITION, task.getProcessDefinitionId()));
if (response.getProcessDefinitionId() != null) {
response.setProcessDefinitionUrl(resourceContext.createFullResourceUrl(RestUrls.URL_PROCESS_DEFINITION, response.getProcessDefinitionId()));
}
if(task.getExecutionId() != null) {
response.setExecution(resourceContext.createFullResourceUrl(RestUrls.URL_EXECUTION, task.getExecutionId()));
if (response.getExecutionId() != null) {
response.setExecutionUrl(resourceContext.createFullResourceUrl(RestUrls.URL_EXECUTION, response.getExecutionId()));
}
if(task.getProcessInstanceId() != null) {
response.setProcessInstance(resourceContext.createFullResourceUrl(RestUrls.URL_PROCESS_INSTANCE, task.getProcessInstanceId()));
if (response.getProcessInstanceId() != null) {
response.setProcessInstanceUrl(resourceContext.createFullResourceUrl(RestUrls.URL_PROCESS_INSTANCE, response.getProcessInstanceId()));
}
return response;
......
......@@ -147,6 +147,16 @@ public class HistoricTaskInstanceBaseResource extends SecuredResource {
if (queryRequest.getTaskCreatedOn() != null) {
query.taskCreatedOn(queryRequest.getTaskCreatedOn());
}
if (queryRequest.getIncludeTaskLocalVariables() != null) {
if (queryRequest.getIncludeTaskLocalVariables()) {
query.includeTaskLocalVariables();
}
}
if (queryRequest.getIncludeProcessVariables() != null) {
if (queryRequest.getIncludeProcessVariables()) {
query.includeProcessVariables();
}
}
if (queryRequest.getTaskVariables() != null) {
addTaskVariables(query, queryRequest.getTaskVariables());
}
......
......@@ -142,6 +142,14 @@ public class HistoricTaskInstanceCollectionResource extends HistoricTaskInstance
queryRequest.setTaskCreatedOn(getQueryParameterAsDate("taskCreatedOn", urlQuery));
}
if(getQueryParameter("includeTaskLocalVariables", urlQuery) != null) {
queryRequest.setIncludeTaskLocalVariables(getQueryParameterAsBoolean("includeTaskLocalVariables", urlQuery));
}
if(getQueryParameter("includeProcessVariables", urlQuery) != null) {
queryRequest.setIncludeProcessVariables(getQueryParameterAsBoolean("includeProcessVariables", urlQuery));
}
return getQueryResponse(queryRequest, urlQuery);
}
}
......@@ -53,6 +53,8 @@ public class HistoricTaskInstanceQueryRequest {
private Date dueDateAfter;
private Date dueDateBefore;
private Date taskCreatedOn;
private Boolean includeTaskLocalVariables;
private Boolean includeProcessVariables;
private List<QueryVariable> taskVariables;
private List<QueryVariable> processVariables;
......@@ -272,6 +274,22 @@ public class HistoricTaskInstanceQueryRequest {
this.taskCreatedOn = taskCreatedOn;
}
public Boolean getIncludeTaskLocalVariables() {
return includeTaskLocalVariables;
}
public void setIncludeTaskLocalVariables(Boolean includeTaskLocalVariables) {
this.includeTaskLocalVariables = includeTaskLocalVariables;
}
public Boolean getIncludeProcessVariables() {
return includeProcessVariables;
}
public void setIncludeProcessVariables(Boolean includeProcessVariables) {
this.includeProcessVariables = includeProcessVariables;
}
@JsonTypeInfo(use=Id.CLASS, defaultImpl=QueryVariable.class)
public List<QueryVariable> getTaskVariables() {
return taskVariables;
......
package org.activiti.rest.api.legacy.history;
import java.util.List;
import org.activiti.engine.history.HistoricDetail;
import org.activiti.engine.history.HistoricDetailQuery;
import org.activiti.engine.history.HistoricFormProperty;
import org.activiti.rest.api.ActivitiUtil;
import org.activiti.rest.api.SecuredResource;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;
import org.restlet.resource.Get;
/**
* @author Franco Lombardo
*/
public class HistoricFormPropertiesResource extends SecuredResource {
@Get
public ObjectNode getHistoricFormProperties() {
if(authenticate() == false) return null;
String taskId = (String) getRequest().getAttributes().get("taskId");
HistoricDetailQuery createHistoricDetailQuery =
ActivitiUtil.getHistoryService().createHistoricDetailQuery();
List<HistoricDetail> list =
createHistoricDetailQuery.taskId(taskId).formProperties().list();
ObjectNode responseJSON = new ObjectMapper().createObjectNode();
ArrayNode propertiesJSON = new ObjectMapper().createArrayNode();
if(list != null) {
for (HistoricDetail historicDetail : list) {
HistoricFormProperty property = (HistoricFormProperty)historicDetail;
ObjectNode propertyJSON = new ObjectMapper().createObjectNode();
propertyJSON.put("id", property.getPropertyId());
propertyJSON.put("value", property.getPropertyValue());
propertiesJSON.add(propertyJSON);
}
}
responseJSON.put("data", propertiesJSON);
return responseJSON;
}
}
\ No newline at end of file
......@@ -11,7 +11,7 @@
* limitations under the License.
*/
package org.activiti.rest.api.runtime.process;
package org.activiti.rest.api.legacy.process;
import java.util.HashMap;
import java.util.Map;
......
......@@ -11,7 +11,7 @@
* limitations under the License.
*/
package org.activiti.rest.api.runtime.process;
package org.activiti.rest.api.legacy.process;
import java.util.Map;
......
......@@ -11,7 +11,7 @@
* limitations under the License.
*/
package org.activiti.rest.api.runtime.process;
package org.activiti.rest.api.legacy.process;
import org.activiti.engine.runtime.ProcessInstance;
......
......@@ -33,6 +33,7 @@ import org.restlet.representation.Representation;
import org.restlet.resource.Delete;
import org.restlet.resource.Get;
import org.restlet.resource.Post;
import org.restlet.resource.Put;
import org.restlet.resource.ResourceException;
......@@ -69,8 +70,27 @@ public class ExecutionVariableCollectionResource extends BaseExecutionVariableRe
return result;
}
@Put
public Object createOrUpdateExecutionVariable(Representation representation) {
return createExecutionVariable(representation, true);
}
@Post
public Object createExecutionVariable(Representation representation) {
return createExecutionVariable(representation, false);
}
@Delete
public void deleteAllLocalVariables() {
Execution execution = getExecutionFromRequest();
Collection<String> currentVariables = ActivitiUtil.getRuntimeService().getVariablesLocal(execution.getId()).keySet();
ActivitiUtil.getRuntimeService().removeVariablesLocal(execution.getId(), currentVariables);
setStatus(Status.SUCCESS_NO_CONTENT);
}
protected Object createExecutionVariable(Representation representation, boolean override) {
if (authenticate() == false)
return null;
......@@ -83,6 +103,7 @@ public class ExecutionVariableCollectionResource extends BaseExecutionVariableRe
// Since we accept both an array of RestVariables and a single RestVariable, we need to inspect the
// body before passing on to the converterService
try {
List<RestVariable> variables = new ArrayList<RestVariable>();
result = variables;
......@@ -113,7 +134,7 @@ public class ExecutionVariableCollectionResource extends BaseExecutionVariableRe
throw new ActivitiIllegalArgumentException("Only allowed to update multiple variables in the same scope.");
}
if(hasVariableOnScope(execution, var.getName(), varScope)) {
if(!override && hasVariableOnScope(execution, var.getName(), varScope)) {
throw new ResourceException(new Status(Status.CLIENT_ERROR_CONFLICT.getCode(), "Variable '" + var.getName() + "' is already present on execution '" + execution.getId() + "'.", null, null));
}
......@@ -144,15 +165,6 @@ public class ExecutionVariableCollectionResource extends BaseExecutionVariableRe
return result;
}
@Delete
public void deleteAllLocalVariables() {
Execution execution = getExecutionFromRequest();
Collection<String> currentVariables = ActivitiUtil.getRuntimeService().getVariablesLocal(execution.getId()).keySet();
ActivitiUtil.getRuntimeService().removeVariablesLocal(execution.getId(), currentVariables);
setStatus(Status.SUCCESS_NO_CONTENT);
}
protected void addGlobalVariables(Execution execution, Map<String, RestVariable> variableMap) {
Map<String, Object> rawVariables = ActivitiUtil.getRuntimeService().getVariables(execution.getId());
List<RestVariable> globalVariables = getApplication(ActivitiRestServicesApplication.class)
......
......@@ -23,6 +23,7 @@ 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;
......@@ -56,7 +57,7 @@ public class ProcessInstanceVariableCollectionResource extends ExecutionVariable
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, execution.getId(), RestResponseFactory.VARIABLE_PROCESS, null);
.getRestResponseFactory().createRestVariables(this, rawVariables, execution.getId(), RestResponseFactory.VARIABLE_PROCESS, RestVariableScope.LOCAL);
// 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.
......
......@@ -23,25 +23,28 @@ import org.activiti.engine.task.Task;
*/
public class TaskResponse {
private String id;
private String url;
private String owner;
private String assignee;
private String delegationState;
private String name;
private String description;
private Date createTime;
private Date dueDate;
private int priority;
private boolean suspended;
private String taskDefinitionKey;
protected String id;
protected String url;
protected String owner;
protected String assignee;
protected String delegationState;
protected String name;
protected String description;
protected Date createTime;
protected Date dueDate;
protected int priority;
protected boolean suspended;
protected String taskDefinitionKey;
// References to other resources
private String parentTask;
private String execution;
private String processInstance;
private String processDefinition;
protected String parentTaskId;
protected String parentTaskUrl;
protected String executionId;
protected String executionUrl;
protected String processInstanceId;
protected String processInstanceUrl;
protected String processDefinitionId;
protected String processDefinitionUrl;
public TaskResponse(Task task) {
setId(task.getId());
......@@ -55,6 +58,10 @@ public class TaskResponse {
setPriority(task.getPriority());
setSuspended(task.isSuspended());
setTaskDefinitionKey(task.getTaskDefinitionKey());
setParentTaskId(task.getParentTaskId());
setExecutionId(task.getExecutionId());
setProcessInstanceId(task.getProcessInstanceId());
setProcessDefinitionId(task.getProcessDefinitionId());
}
protected String getDelegationStateString(DelegationState state) {
......@@ -131,34 +138,74 @@ public class TaskResponse {
public void setSuspended(boolean suspended) {
this.suspended = suspended;
}
public String getParentTask() {
return parentTask;
public String getTaskDefinitionKey() {
return taskDefinitionKey;
}
public void setParentTask(String parentTask) {
this.parentTask = parentTask;
public void setTaskDefinitionKey(String taskDefinitionKey) {
this.taskDefinitionKey = taskDefinitionKey;
}
public String getExecution() {
return execution;
public String getParentTaskId() {
return parentTaskId;
}
public void setExecution(String execution) {
this.execution = execution;
public void setParentTaskId(String parentTaskId) {
this.parentTaskId = parentTaskId;
}
public String getProcessInstance() {
return processInstance;
public String getParentTaskUrl() {
return parentTaskUrl;
}
public void setProcessInstance(String processInstance) {
this.processInstance = processInstance;
public void setParentTaskUrl(String parentTaskUrl) {
this.parentTaskUrl = parentTaskUrl;
}
public String getProcessDefinition() {
return processDefinition;
public String getExecutionId() {
return executionId;
}
public void setProcessDefinition(String processDefinition) {
this.processDefinition = processDefinition;
public void setExecutionId(String executionId) {
this.executionId = executionId;
}
public String getTaskDefinitionKey() {
return taskDefinitionKey;
public String getExecutionUrl() {
return executionUrl;
}
public void setTaskDefinitionKey(String taskDefinitionKey) {
this.taskDefinitionKey = taskDefinitionKey;
public void setExecutionUrl(String executionUrl) {
this.executionUrl = executionUrl;
}
public String getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(String processInstanceId) {
this.processInstanceId = processInstanceId;
}
public String getProcessInstanceUrl() {
return processInstanceUrl;
}
public void setProcessInstanceUrl(String processInstanceUrl) {
this.processInstanceUrl = processInstanceUrl;
}
public String getProcessDefinitionId() {
return processDefinitionId;
}
public void setProcessDefinitionId(String processDefinitionId) {
this.processDefinitionId = processDefinitionId;
}
public String getProcessDefinitionUrl() {
return processDefinitionUrl;
}
public void setProcessDefinitionUrl(String processDefinitionUrl) {
this.processDefinitionUrl = processDefinitionUrl;
}
}
......@@ -6,7 +6,6 @@ import org.activiti.rest.api.history.HistoricActivityInstanceQueryResource;
import org.activiti.rest.api.history.HistoricDetailCollectionResource;
import org.activiti.rest.api.history.HistoricDetailDataResource;
import org.activiti.rest.api.history.HistoricDetailQueryResource;
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;
......@@ -42,6 +41,7 @@ import org.activiti.rest.api.legacy.deployment.DeploymentDeleteResource;
import org.activiti.rest.api.legacy.deployment.DeploymentUploadResource;
import org.activiti.rest.api.legacy.deployment.DeploymentsDeleteResource;
import org.activiti.rest.api.legacy.deployment.DeploymentsResource;
import org.activiti.rest.api.legacy.history.HistoricFormPropertiesResource;
import org.activiti.rest.api.legacy.identity.LegacyGroupCreateResource;
import org.activiti.rest.api.legacy.identity.LegacyGroupResource;
import org.activiti.rest.api.legacy.identity.LegacyGroupSearchResource;
......@@ -63,6 +63,10 @@ import org.activiti.rest.api.legacy.management.TablesResource;
import org.activiti.rest.api.legacy.process.LegacyProcessInstanceResource;
import org.activiti.rest.api.legacy.process.LegacyProcessInstancesResource;
import org.activiti.rest.api.legacy.process.ProcessDefinitionsResource;
import org.activiti.rest.api.legacy.process.ProcessInstanceSignalExecutionResource;
import org.activiti.rest.api.legacy.process.ProcessInstanceTaskResource;
import org.activiti.rest.api.legacy.process.SignalEventSubscriptionResource;
import org.activiti.rest.api.legacy.process.StartProcessInstanceResource;
import org.activiti.rest.api.legacy.task.LegacyTaskResource;
import org.activiti.rest.api.management.JobCollectionResource;
import org.activiti.rest.api.management.JobExceptionStacktraceResource;
......@@ -105,13 +109,9 @@ import org.activiti.rest.api.runtime.process.ProcessInstanceIdentityLinkCollecti
import org.activiti.rest.api.runtime.process.ProcessInstanceIdentityLinkResource;
import org.activiti.rest.api.runtime.process.ProcessInstanceQueryResource;
import org.activiti.rest.api.runtime.process.ProcessInstanceResource;
import org.activiti.rest.api.runtime.process.ProcessInstanceSignalExecutionResource;
import org.activiti.rest.api.runtime.process.ProcessInstanceTaskResource;
import org.activiti.rest.api.runtime.process.ProcessInstanceVariableCollectionResource;
import org.activiti.rest.api.runtime.process.ProcessInstanceVariableDataResource;
import org.activiti.rest.api.runtime.process.ProcessInstanceVariableResource;
import org.activiti.rest.api.runtime.process.SignalEventSubscriptionResource;
import org.activiti.rest.api.runtime.process.StartProcessInstanceResource;
import org.activiti.rest.api.runtime.task.TaskAttachmentCollectionResource;
import org.activiti.rest.api.runtime.task.TaskAttachmentContentResource;
import org.activiti.rest.api.runtime.task.TaskAttachmentResource;
......
......@@ -395,6 +395,46 @@ public class ProcessInstanceVariablesCollectionResourceTest extends BaseRestTest
assertEquals(varCal.getTime(), variables.get("dateVariable"));
}
/**
* Test creating multiple process variables in a single call.
* POST runtime/process-instance/{processInstanceId}/variables?override=true
*/
@Deployment(resources = {"org/activiti/rest/api/runtime/ProcessInstanceVariablesCollectionResourceTest.testProcess.bpmn20.xml"})
public void testCreateMultipleProcessVariablesWithOverride() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
runtimeService.setVariable(processInstance.getId(), "stringVariable", "initialValue");
ArrayNode requestNode = objectMapper.createArrayNode();
// String variable
ObjectNode stringVarNode = requestNode.addObject();
stringVarNode.put("name", "stringVariable");
stringVarNode.put("value", "simple string value");
stringVarNode.put("type", "string");
ObjectNode anotherVariable = requestNode.addObject();
anotherVariable.put("name", "stringVariable2");
anotherVariable.put("value", "another string value");
anotherVariable.put("type", "string");
// Create local variables with a single request
ClientResource client = getAuthenticatedClient(RestUrls.createRelativeResourceUrl(RestUrls.URL_PROCESS_INSTANCE_VARIABLE_COLLECTION, processInstance.getId()));
Representation response = client.put(requestNode);
assertEquals(Status.SUCCESS_CREATED, client.getResponse().getStatus());
JsonNode responseNode = objectMapper.readTree(response.getStream());
assertNotNull(responseNode);
assertTrue(responseNode.isArray());
assertEquals(2, responseNode.size());
// Check if engine has correct variables set
Map<String, Object> variables = runtimeService.getVariablesLocal(processInstance.getId());
assertEquals(2, variables.size());
assertEquals("simple string value", variables.get("stringVariable"));
assertEquals("another string value", variables.get("stringVariable2"));
}
/**
* Test deleting all process variables.
* DELETE runtime/process-instance/{processInstanceId}/variables
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册