package com.imooc.activiti.coreapi;
import com.google.common.collect.Maps;
import org.activiti.bpmn.model.FormProperty;
import org.activiti.engine.*;
import org.activiti.engine.form.StartFormData;
import org.activiti.engine.form.TaskFormData;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.DeploymentQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceBuilder;
import org.activiti.engine.task.Attachment;
import org.activiti.engine.task.IdentityLink;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.ActivitiRule;
import org.activiti.spring.integration.Activiti;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.logging.log4j.spi.LoggerRegistry;
import org.junit.Rule;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
/**
* test
**/
public class HistoryServiceTest {
@Rule
public ActivitiRule activitiRule = new ActivitiRule();
@Test
@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})
public void testHistory(){
HistoryService historyService = activitiRule.getHistoryService();
Map<String,Object> variables = Maps.newHashMap();
variables.put("key0","value0");
variables.put("key1","value1");
variables.put("key2","value2");
ProcessInstanceBuilder processInstanceBuilder = activitiRule.getRuntimeService().createProcessInstanceBuilder();
Map<String,Object> transientVariables = Maps.newHashMap();
transientVariables.put("tkey1","tvalue1");
processInstanceBuilder.processDefinitionKey("my-process")
.variable(variables)
.transientVariable().start();
activitiRule.getRuntimeService().setVariable(processInstance.getId(),"key1","value1");
Task task = activitiRule.getTaskService().createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
activitiRule.getTaskService().complete(task.getId(),variables);
Map<String,String> properties = Maps.newHashMap();
properties.put("fkey1","fvalue1");
properties.put("key2","value2");
activitiRule.getFormService().submitTaskFormData(task.getId(),properties);
HistoricProcessInstance historicProcessInstances = historyService.createHistoricProcessInstanceQuery().list(0,100);
for(HistoricProcessInstance historicProcessInstance:historicProcessInstances){
LOGGER.info("historicProcessInstance={}",historicProcessInstance);
}
List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricProcessInstanceQuery().listPage(0,100);
for(HistoricActivityInstance historicActivityInstance : historicActivityInstances){
LOGGER.info("historicActivityInstance={}",historicActivityInstance);
}
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricProcessInstanceQuery().listPage(0,100);
for(HistoricActivityInstance historicActivityInstance: historicActivityInstances){
LOGGER.info("historicTaskInstance={}",historicActivityInstance);
}
List<HistoricVariableInstance> historicVariableInstances = historyService.createHistoricTaskInstanceQuery().listPage(01,100);
for(HistoricVariableInstance historicVariableInstance : historicVariableInstances){
LOGGER.info("historicVariableInstance={}",historicVariableInstance);
}
List<HistoricDetail> historicDetails = historyService.createNativeHistoricDetailQuery().listPage(0,100);
for(HistoricDetail historicDetail:historicDetails){
LOGGER.info("historicDetail={}",historicDetail);
}
historyService.createProcessInstanceHistoryLogQuery(processInstances.getId())
.includeActivities()
.includeFormProperties()
.includeComments()
.includeTasks()
.includeActivities()
.includeVariableUpdates().singleResult();
List<HistoricData> historicDatas = processInstanceHistoryLog.getHistoricData();
for(HistoricData historicData:historicDatas){
LOGGER.info("historicData={}",historicData);
}
historyService.deleteHistoricProcessInstance(processInstace.getId());
historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstance.getId()).singleResult();
LOGGER.info("historicProcessInstance={}",historicProcessInstances);
}
}