/* 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.engine.test.api.history; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricProcessInstanceQuery; import org.activiti.engine.impl.history.HistoryLevel; import org.activiti.engine.impl.test.PluggableActivitiTestCase; import org.activiti.engine.task.Task; /** * @author Tijs Rademakers */ public class HistoricProcessInstanceAndVariablesQueryTest extends PluggableActivitiTestCase { private static String PROCESS_DEFINITION_KEY = "oneTaskProcess"; private static String PROCESS_DEFINITION_KEY_2 = "oneTaskProcess2"; private static String PROCESS_DEFINITION_NAME_2 = "oneTaskProcess2Name"; private static String PROCESS_DEFINITION_CATEGORY_2 = "org.activiti.enginge.test.api.runtime.2Category"; private static String PROCESS_DEFINITION_KEY_3 = "oneTaskProcess3"; private List<String> processInstanceIds; /** * Setup starts 4 process instances of oneTaskProcess * and 1 instance of oneTaskProcess2 */ protected void setUp() throws Exception { super.setUp(); repositoryService.createDeployment() .addClasspathResource("org/activiti/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") .addClasspathResource("org/activiti/engine/test/api/runtime/oneTaskProcess2.bpmn20.xml") .addClasspathResource("org/activiti/engine/test/api/runtime/oneTaskProcess3.bpmn20.xml") .deploy(); Map<String, Object> startMap = new HashMap<String, Object>(); startMap.put("test", "test"); startMap.put("test2", "test2"); processInstanceIds = new ArrayList<String>(); for (int i = 0; i < 4; i++) { processInstanceIds.add(runtimeService.startProcessInstanceByKey(PROCESS_DEFINITION_KEY, i + "", startMap).getId()); if (i == 0) { Task task = taskService.createTaskQuery().processInstanceId(processInstanceIds.get(0)).singleResult(); taskService.complete(task.getId()); } } startMap.clear(); startMap.put("anothertest", 123); processInstanceIds.add(runtimeService.startProcessInstanceByKey(PROCESS_DEFINITION_KEY_2, "1", startMap).getId()); startMap.clear(); startMap.put("casetest", "MyTest"); processInstanceIds.add(runtimeService.startProcessInstanceByKey(PROCESS_DEFINITION_KEY_3, "1", startMap).getId()); } protected void tearDown() throws Exception { for (org.activiti.engine.repository.Deployment deployment : repositoryService.createDeploymentQuery().list()) { repositoryService.deleteDeployment(deployment.getId(), true); } super.tearDown(); } public void testQuery() { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) { HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .variableValueEquals("anothertest", 123).singleResult(); Map<String, Object> variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); List<HistoricProcessInstance> instanceList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().list(); assertEquals(6, instanceList.size()); instanceList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().processDefinitionKey(PROCESS_DEFINITION_KEY).list(); assertEquals(4, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); assertEquals(PROCESS_DEFINITION_KEY, instanceList.get(0).getProcessDefinitionKey()); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .processDefinitionKey(PROCESS_DEFINITION_KEY_2).singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().finished().singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); instanceList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().listPage(0, 50); assertEquals(6, instanceList.size()); assertEquals(6, historyService.createHistoricProcessInstanceQuery().includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery() .variableValueEquals("test", "test") .includeProcessVariables() .listPage(0, 50); assertEquals(4, instanceList.size()); assertEquals(4, historyService.createHistoricProcessInstanceQuery().variableValueEquals("test", "test").includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery() .variableValueLike("test", "te%") .includeProcessVariables() .list(); assertEquals(4, instanceList.size()); assertEquals(4, historyService.createHistoricProcessInstanceQuery().variableValueLike("test", "te%").includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery() .variableValueLike("test2", "te%2") .includeProcessVariables() .list(); assertEquals(4, instanceList.size()); assertEquals(4, historyService.createHistoricProcessInstanceQuery().variableValueLike("test2", "te%2").includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery() .variableValueLikeIgnoreCase("test", "te%") .includeProcessVariables() .list(); assertEquals(4, instanceList.size()); assertEquals(4, historyService.createHistoricProcessInstanceQuery().variableValueLikeIgnoreCase("test", "te%").includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery() .variableValueLikeIgnoreCase("test", "t3%") .includeProcessVariables() .list(); assertEquals(0, instanceList.size()); assertEquals(0, historyService.createHistoricProcessInstanceQuery().variableValueLikeIgnoreCase("test", "t3%").includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().listPage(0, 50); assertEquals(6, instanceList.size()); assertEquals(6, historyService.createHistoricProcessInstanceQuery().includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery() .variableValueEquals("test", "test") .includeProcessVariables() .listPage(0, 1); assertEquals(1, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); assertEquals(4, historyService.createHistoricProcessInstanceQuery().variableValueEquals("test", "test").includeProcessVariables().count()); instanceList = historyService.createHistoricProcessInstanceQuery() .includeProcessVariables() .processDefinitionKey(PROCESS_DEFINITION_KEY) .listPage(1, 2); assertEquals(2, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); instanceList = historyService.createHistoricProcessInstanceQuery() .includeProcessVariables() .processDefinitionKey(PROCESS_DEFINITION_KEY) .listPage(3, 4); assertEquals(1, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); instanceList = historyService.createHistoricProcessInstanceQuery() .includeProcessVariables() .processDefinitionKey(PROCESS_DEFINITION_KEY) .listPage(4, 2); assertEquals(0, instanceList.size()); instanceList = historyService.createHistoricProcessInstanceQuery() .variableValueEquals("test", "test") .includeProcessVariables() .orderByProcessInstanceId() .asc() .listPage(0, 50); assertEquals(4, instanceList.size()); } } public void testQueryByprocessDefinition() { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) { // DeploymentId String deploymentId = repositoryService.createDeploymentQuery().list().get(0).getId(); HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .variableValueEquals("anothertest", 123).deploymentId(deploymentId).singleResult(); Map<String, Object> variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); assertEquals(deploymentId, processInstance.getDeploymentId()); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .variableValueEquals("anothertest", "invalid").deploymentId(deploymentId).singleResult(); assertNull(processInstance); // ProcessDefinitionName processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .variableValueEquals("anothertest", 123).processDefinitionName(PROCESS_DEFINITION_NAME_2).singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); assertEquals(PROCESS_DEFINITION_NAME_2, processInstance.getProcessDefinitionName()); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .variableValueEquals("test", "test").processDefinitionName(PROCESS_DEFINITION_NAME_2).singleResult(); assertNull(processInstance); // ProcessDefinitionCategory processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .variableValueEquals("anothertest", 123).processDefinitionCategory(PROCESS_DEFINITION_CATEGORY_2).singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .variableValueEquals("test", "test").processDefinitionCategory(PROCESS_DEFINITION_CATEGORY_2).singleResult(); assertNull(processInstance); } } public void testOrQuery() { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) { HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", 123).processDefinitionId("undefined").endOr().singleResult(); Map<String, Object> variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or() .variableValueEquals("anothertest", 123) .processDefinitionId("undefined") .endOr() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY_2) .processDefinitionId("undefined") .endOr() .singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or() .variableValueEquals("anothertest", 123) .processDefinitionId("undefined") .endOr() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionId("undefined") .endOr() .singleResult(); assertNull(processInstance); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or() .variableValueLikeIgnoreCase("casetest", "mytest") .processDefinitionId("undefined") .endOr() .singleResult(); assertNotNull(processInstance); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals("MyTest", variableMap.get("casetest")); List<HistoricProcessInstance> instanceList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().or() .processDefinitionKey(PROCESS_DEFINITION_KEY).processDefinitionId("undefined").endOr().list(); assertEquals(4, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().processDefinitionKey(PROCESS_DEFINITION_KEY_2).processDefinitionId("undefined").endOr().singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().finished().processDefinitionId("undefined").endOr().singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); instanceList = historyService.createHistoricProcessInstanceQuery() .or() .variableValueEquals("test", "test") .processDefinitionId("undefined").endOr() .includeProcessVariables() .listPage(0, 50); assertEquals(4, instanceList.size()); instanceList = historyService.createHistoricProcessInstanceQuery() .or() .variableValueEquals("test", "test") .processDefinitionId("undefined").endOr() .includeProcessVariables() .listPage(0, 1); assertEquals(1, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); instanceList = historyService.createHistoricProcessInstanceQuery() .includeProcessVariables() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionId("undefined").endOr() .listPage(1, 2); assertEquals(2, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); instanceList = historyService.createHistoricProcessInstanceQuery() .includeProcessVariables() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionId("undefined").endOr() .listPage(3, 4); assertEquals(1, instanceList.size()); processInstance = instanceList.get(0); variableMap = processInstance.getProcessVariables(); assertEquals(2, variableMap.size()); assertEquals("test", variableMap.get("test")); assertEquals("test2", variableMap.get("test2")); instanceList = historyService.createHistoricProcessInstanceQuery() .includeProcessVariables() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionId("undefined").endOr() .listPage(4, 2); assertEquals(0, instanceList.size()); instanceList = historyService.createHistoricProcessInstanceQuery() .or() .variableValueEquals("test", "test") .processDefinitionId("undefined").endOr() .includeProcessVariables() .orderByProcessInstanceId() .asc() .listPage(0, 50); assertEquals(4, instanceList.size()); instanceList = historyService.createHistoricProcessInstanceQuery() .or() .variableValueEquals("test", "test") .processDefinitionId("undefined") .endOr() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY) .processDefinitionId("undefined") .endOr() .includeProcessVariables() .orderByProcessInstanceId() .asc() .listPage(0, 50); assertEquals(4, instanceList.size()); } } public void testOrQueryMultipleVariableValues() { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) { HistoricProcessInstanceQuery query0 = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().or(); for (int i = 0; i < 20; i++) { query0 = query0.variableValueEquals("anothertest", i); } query0 = query0.processDefinitionId("undefined").endOr(); assertNull(query0.singleResult()); HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().or().variableValueEquals("anothertest", 123); for (int i = 0; i < 20; i++) { query1 = query1.variableValueEquals("anothertest", i); } query1 = query1.processDefinitionId("undefined").endOr(); HistoricProcessInstance processInstance = query1.singleResult(); Map<String, Object> variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); HistoricProcessInstanceQuery query2 = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or(); for (int i = 0; i < 20; i++) { query2 = query2.variableValueEquals("anothertest", i); } query2 = query2.processDefinitionId("undefined") .endOr() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY_2) .processDefinitionId("undefined") .endOr(); assertNull(query2.singleResult()); HistoricProcessInstanceQuery query3 = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", 123); for (int i = 0; i < 20; i++) { query3 = query3.variableValueEquals("anothertest", i); } query3 = query3.processDefinitionId("undefined") .endOr() .or() .processDefinitionKey(PROCESS_DEFINITION_KEY_2) .processDefinitionId("undefined") .endOr(); variableMap = query3.singleResult().getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); } } public void testOrQueryByprocessDefinition() { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) { // DeploymentId String deploymentId = repositoryService.createDeploymentQuery().list().get(0).getId(); HistoricProcessInstanceQuery historicprocessInstanceQuery = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", "invalid").deploymentId(deploymentId).endOr(); assertEquals(6, historicprocessInstanceQuery.list().size()); assertEquals(6, historicprocessInstanceQuery.count()); Map<String, Object> variableMap = historicprocessInstanceQuery.list().get(4).getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); for(HistoricProcessInstance processInstance : historicprocessInstanceQuery.list()){ assertEquals(deploymentId, processInstance.getDeploymentId()); } HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", "invalid").deploymentId("invalid").endOr().singleResult(); assertNull(processInstance); // ProcessDefinitionName processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", "invalid").processDefinitionName(PROCESS_DEFINITION_NAME_2).endOr().singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); assertEquals(PROCESS_DEFINITION_NAME_2, processInstance.getProcessDefinitionName()); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", "invalid").processDefinitionName("invalid").endOr().singleResult(); assertNull(processInstance); // ProcessDefinitionCategory processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", "invalid").processDefinitionCategory(PROCESS_DEFINITION_CATEGORY_2).endOr().singleResult(); variableMap = processInstance.getProcessVariables(); assertEquals(1, variableMap.size()); assertEquals(123, variableMap.get("anothertest")); processInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables() .or().variableValueEquals("anothertest", "invalid").processDefinitionCategory("invalid").endOr().singleResult(); assertNull(processInstance); } } }