Skip to content

Commit 5596063

Browse files
Add support for empty states and types for plan item instance query
1 parent 75925dc commit 5596063

3 files changed

Lines changed: 30 additions & 18 deletions

File tree

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/data/impl/MybatisPlanItemInstanceDataManagerImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ public boolean isRetained(PlanItemInstanceEntity entity, Object param) {
219219
boolean ended = (boolean) map.get("ended");
220220

221221
return caseInstanceId.equals(entity.getCaseInstanceId())
222-
&& planItemDefinitionTypes.contains(entity.getPlanItemDefinitionType())
223-
&& states.contains(entity.getState())
222+
&& (planItemDefinitionTypes == null || planItemDefinitionTypes.contains(entity.getPlanItemDefinitionType()))
223+
&& (states == null || states.contains(entity.getState()))
224224
&& (ended ? entity.getEndedTime() != null : entity.getEndedTime() == null);
225225
}
226226

modules/flowable-cmmn-engine/src/main/resources/org/flowable/cmmn/db/mapping/entity/PlanItemInstance.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,12 @@
372372
<select id="selectPlanItemInstancesByCaseInstanceIdAndTypeAndState" parameterType="org.flowable.common.engine.impl.db.ListQueryParameterObject" resultMap="planItemInstanceResultMap">
373373
select * from ${prefix}ACT_CMMN_RU_PLAN_ITEM_INST RES
374374
where CASE_INST_ID_ = #{parameter.caseInstanceId, jdbcType=VARCHAR}
375-
and ITEM_DEFINITION_TYPE_ in <foreach item="planItemDefinitionType" index="index" collection="parameter.planItemDefinitionTypes" open="(" separator="," close=")">#{planItemDefinitionType, jdbcType=VARCHAR}</foreach>
376-
and STATE_ in <foreach item="state" index="index" collection="parameter.states" open="(" separator="," close=")">#{state, jdbcType=VARCHAR}</foreach>
375+
<if test="parameter.planItemDefinitionTypes != null &amp;&amp; !parameter.planItemDefinitionTypes.empty">
376+
and ITEM_DEFINITION_TYPE_ in <foreach item="planItemDefinitionType" index="index" collection="parameter.planItemDefinitionTypes" open="(" separator="," close=")">#{planItemDefinitionType, jdbcType=VARCHAR}</foreach>
377+
</if>
378+
<if test="parameter.states != null &amp;&amp; !parameter.states.empty">
379+
and STATE_ in <foreach item="state" index="index" collection="parameter.states" open="(" separator="," close=")">#{state, jdbcType=VARCHAR}</foreach>
380+
</if>
377381
<if test="parameter.ended">
378382
and ENDED_TIME_ is not null
379383
</if>

modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/PlanItemInstanceEntityManagerTest.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,16 @@
1313
package org.flowable.cmmn.test.runtime;
1414

1515
import static org.assertj.core.api.Assertions.assertThat;
16-
import static org.assertj.core.api.Assertions.entry;
17-
import static org.assertj.core.api.Assertions.tuple;
18-
import static org.flowable.cmmn.api.runtime.PlanItemInstanceState.ACTIVE;
1916

2017
import java.util.ArrayList;
21-
import java.util.Arrays;
22-
import java.util.Date;
2318
import java.util.List;
2419

25-
import org.flowable.cmmn.api.history.HistoricPlanItemInstance;
26-
import org.flowable.cmmn.api.runtime.CaseInstance;
2720
import org.flowable.cmmn.api.runtime.PlanItemDefinitionType;
28-
import org.flowable.cmmn.api.runtime.PlanItemInstance;
2921
import org.flowable.cmmn.api.runtime.PlanItemInstanceState;
30-
import org.flowable.cmmn.api.runtime.UserEventListenerInstance;
31-
import org.flowable.cmmn.engine.PlanItemLocalizationManager;
3222
import org.flowable.cmmn.engine.impl.CmmnManagementServiceImpl;
3323
import org.flowable.cmmn.engine.impl.persistence.entity.PlanItemInstanceEntity;
3424
import org.flowable.cmmn.engine.impl.util.CommandContextUtil;
35-
import org.flowable.cmmn.engine.test.CmmnDeployment;
3625
import org.flowable.cmmn.engine.test.FlowableCmmnTestCase;
37-
import org.flowable.common.engine.impl.interceptor.Command;
38-
import org.flowable.common.engine.impl.interceptor.CommandContext;
39-
import org.flowable.task.api.Task;
4026
import org.junit.Before;
4127
import org.junit.Test;
4228

@@ -72,6 +58,28 @@ public void testFindByCaseInstanceIdAndTypeAndState() {
7258

7359
assertThat(planItemInstances).hasSize(1);
7460
assertThat(planItemInstances.get(0).getName()).isEqualTo("B");
61+
62+
planItemInstances = ((CmmnManagementServiceImpl) cmmnManagementService).executeCommand(
63+
commandContext -> CommandContextUtil.getPlanItemInstanceEntityManager().findByCaseInstanceIdAndTypeAndState(caseInstanceId,
64+
null, List.of(PlanItemInstanceState.ENABLED), false));
65+
66+
assertThat(planItemInstances).hasSize(1);
67+
assertThat(planItemInstances.get(0).getName()).isEqualTo("B");
68+
69+
planItemInstances = ((CmmnManagementServiceImpl) cmmnManagementService).executeCommand(
70+
commandContext -> CommandContextUtil.getPlanItemInstanceEntityManager().findByCaseInstanceIdAndTypeAndState(caseInstanceId,
71+
null, null, false));
72+
73+
assertThat(planItemInstances).hasSize(4);
74+
List<String> names = new ArrayList<>();
75+
for (PlanItemInstanceEntity planItemInstance : planItemInstances) {
76+
names.add(planItemInstance.getName());
77+
}
78+
79+
assertThat(names).contains("A");
80+
assertThat(names).contains("B");
81+
assertThat(names).contains("Stage one");
82+
assertThat(names).contains("Stage two");
7583
}
7684

7785
private List<String> startInstances(int numberOfInstances) {

0 commit comments

Comments
 (0)