Skip to content

Commit b1312f3

Browse files
Added support for case and process instance migration validation in rest api and improved case instance migration with an option to automatically create plan item instances for new plan items
1 parent 1d9f04b commit b1312f3

49 files changed

Lines changed: 2056 additions & 5 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/migration/CaseInstanceMigrationBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ public interface CaseInstanceMigrationBuilder {
6060
* @see org.flowable.cmmn.api.repository.CaseDefinition
6161
*/
6262
CaseInstanceMigrationBuilder migrateToCaseDefinition(String caseDefinitionKey, int caseDefinitionVersion, String caseDefinitionTenantId);
63+
64+
/**
65+
* Enable the automatic creation of plan item instances for new plan item definitions
66+
*
67+
* @return Returns the builder
68+
*/
69+
CaseInstanceMigrationBuilder enableAutomaticPlanItemInstanceCreation();
6370

6471
/**
6572
* Specifies the tenantId of the case definition to migrate to

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/migration/CaseInstanceMigrationDocument.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public interface CaseInstanceMigrationDocument {
2828
Integer getMigrateToCaseDefinitionVersion();
2929

3030
String getMigrateToCaseDefinitionTenantId();
31+
32+
Boolean getEnableAutomaticPlanItemInstanceCreation();
3133

3234
List<ActivatePlanItemDefinitionMapping> getActivatePlanItemDefinitionMappings();
3335

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/migration/CaseInstanceMigrationDocumentBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public interface CaseInstanceMigrationDocumentBuilder {
2626
CaseInstanceMigrationDocumentBuilder setCaseDefinitionToMigrateTo(String caseDefinitionKey, Integer caseDefinitionVersion);
2727

2828
CaseInstanceMigrationDocumentBuilder setTenantId(String caseDefinitionTenantId);
29+
30+
CaseInstanceMigrationDocumentBuilder setEnableAutomaticPlanItemInstanceCreation(Boolean automaticValue);
2931

3032
CaseInstanceMigrationDocumentBuilder addActivatePlanItemDefinitionMappings(List<ActivatePlanItemDefinitionMapping> planItemDefinitionMappings);
3133

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationBuilderImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public CaseInstanceMigrationBuilder fromCaseInstanceMigrationDocument(CaseInstan
4747
this.caseInstanceMigrationDocumentDocumentBuilder.setCaseDefinitionToMigrateTo(caseInstanceMigrationDocument.getMigrateToCaseDefinitionId());
4848
this.caseInstanceMigrationDocumentDocumentBuilder.setCaseDefinitionToMigrateTo(caseInstanceMigrationDocument.getMigrateToCaseDefinitionKey(), caseInstanceMigrationDocument.getMigrateToCaseDefinitionVersion());
4949
this.caseInstanceMigrationDocumentDocumentBuilder.setTenantId(caseInstanceMigrationDocument.getMigrateToCaseDefinitionTenantId());
50+
this.caseInstanceMigrationDocumentDocumentBuilder.setEnableAutomaticPlanItemInstanceCreation(caseInstanceMigrationDocument.getEnableAutomaticPlanItemInstanceCreation());
5051
this.caseInstanceMigrationDocumentDocumentBuilder.addActivatePlanItemDefinitionMappings(caseInstanceMigrationDocument.getActivatePlanItemDefinitionMappings());
5152
this.caseInstanceMigrationDocumentDocumentBuilder.addTerminatePlanItemDefinitionMappings(caseInstanceMigrationDocument.getTerminatePlanItemDefinitionMappings());
5253
this.caseInstanceMigrationDocumentDocumentBuilder.addMoveToAvailablePlanItemDefinitionMappings(caseInstanceMigrationDocument.getMoveToAvailablePlanItemDefinitionMappings());
@@ -86,6 +87,12 @@ public CaseInstanceMigrationBuilder withMigrateToCaseDefinitionTenantId(String c
8687
return this;
8788
}
8889

90+
@Override
91+
public CaseInstanceMigrationBuilder enableAutomaticPlanItemInstanceCreation() {
92+
this.caseInstanceMigrationDocumentDocumentBuilder.setEnableAutomaticPlanItemInstanceCreation(true);
93+
return this;
94+
}
95+
8996
@Override
9097
public CaseInstanceMigrationBuilder addActivatePlanItemDefinitionMapping(ActivatePlanItemDefinitionMapping mapping) {
9198
this.caseInstanceMigrationDocumentDocumentBuilder.addActivatePlanItemDefinitionMapping(mapping);

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentBuilderImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class CaseInstanceMigrationDocumentBuilderImpl implements CaseInstanceMig
3838
protected String migrateToCaseDefinitionKey;
3939
protected Integer migrateToCaseDefinitionVersion;
4040
protected String migrateToCaseDefinitionTenantId;
41+
protected Boolean enableAutomaticPlanItemInstanceCreation;
4142
protected List<ActivatePlanItemDefinitionMapping> activatePlanItemDefinitionMappings = new ArrayList<>();
4243
protected List<TerminatePlanItemDefinitionMapping> terminatePlanItemDefinitionMappings = new ArrayList<>();
4344
protected List<MoveToAvailablePlanItemDefinitionMapping> moveToAvailablePlanItemDefinitionMappings = new ArrayList<>();
@@ -68,6 +69,13 @@ public CaseInstanceMigrationDocumentBuilder setTenantId(String caseDefinitionTen
6869
this.migrateToCaseDefinitionTenantId = caseDefinitionTenantId;
6970
return this;
7071
}
72+
73+
74+
@Override
75+
public CaseInstanceMigrationDocumentBuilder setEnableAutomaticPlanItemInstanceCreation(Boolean automaticValue) {
76+
this.enableAutomaticPlanItemInstanceCreation = automaticValue;
77+
return this;
78+
}
7179

7280
@Override
7381
public CaseInstanceMigrationDocumentBuilder addActivatePlanItemDefinitionMappings(List<ActivatePlanItemDefinitionMapping> planItemDefinitionMappings) {
@@ -194,6 +202,7 @@ public CaseInstanceMigrationDocument build() {
194202
CaseInstanceMigrationDocumentImpl caseInstanceMigrationDocument = new CaseInstanceMigrationDocumentImpl();
195203
caseInstanceMigrationDocument.setMigrateToCaseDefinitionId(this.migrateToCaseDefinitionId);
196204
caseInstanceMigrationDocument.setMigrateToCaseDefinition(this.migrateToCaseDefinitionKey, this.migrateToCaseDefinitionVersion, this.migrateToCaseDefinitionTenantId);
205+
caseInstanceMigrationDocument.setEnableAutomaticPlanItemInstanceCreation(this.enableAutomaticPlanItemInstanceCreation);
197206
caseInstanceMigrationDocument.setActivatePlanItemDefinitionMappings(this.activatePlanItemDefinitionMappings);
198207
caseInstanceMigrationDocument.setTerminatePlanItemDefinitionMappings(this.terminatePlanItemDefinitionMappings);
199208
caseInstanceMigrationDocument.setMoveToAvailablePlanItemDefinitionMappings(this.moveToAvailablePlanItemDefinitionMappings);

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface CaseInstanceMigrationDocumentConstants {
2121
String TO_CASE_DEFINITION_KEY_JSON_PROPERTY = "toCaseDefinitionKey";
2222
String TO_CASE_DEFINITION_VERSION_JSON_PROPERTY = "toCaseDefinitionVersion";
2323
String TO_CASE_DEFINITION_TENANT_ID_JSON_PROPERTY = "toCaseDefinitionTenantId";
24+
String ENABLE_AUTOMATIC_PLAN_ITEM_INSTANCE_CREATION_JSON_PROPERTY = "enableAutomaticPlanItemInstanceCreation";
25+
2426

2527
String PLAN_ITEM_DEFINITION_ID_JSON_PROPERTY = "planItemDefinitionId";
2628
String EXISTING_PLAN_ITEM_ID_JSON_PROPERTY = "existingPlanItemId";

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentConverter.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ public static JsonNode convertToJson(CaseInstanceMigrationDocument caseInstanceM
6565
if (caseInstanceMigrationDocument.getMigrateToCaseDefinitionTenantId() != null) {
6666
documentNode.put(TO_CASE_DEFINITION_TENANT_ID_JSON_PROPERTY, caseInstanceMigrationDocument.getMigrateToCaseDefinitionTenantId());
6767
}
68+
69+
if (caseInstanceMigrationDocument.getEnableAutomaticPlanItemInstanceCreation() != null) {
70+
documentNode.put(ENABLE_AUTOMATIC_PLAN_ITEM_INSTANCE_CREATION_JSON_PROPERTY, caseInstanceMigrationDocument.getEnableAutomaticPlanItemInstanceCreation());
71+
}
6872

6973
ArrayNode activateMappingNodes = convertToJsonActivatePlanItemDefinitionMappings(caseInstanceMigrationDocument.getActivatePlanItemDefinitionMappings());
7074
if (activateMappingNodes != null && !activateMappingNodes.isNull()) {
@@ -261,6 +265,8 @@ public static CaseInstanceMigrationDocument convertFromJson(String jsonCaseInsta
261265
documentBuilder.setCaseDefinitionToMigrateTo(caseDefinitionKey, caseDefinitionVersion);
262266

263267
documentBuilder.setTenantId(getJsonProperty(TO_CASE_DEFINITION_TENANT_ID_JSON_PROPERTY, rootNode));
268+
269+
documentBuilder.setEnableAutomaticPlanItemInstanceCreation(getJsonPropertyAsBoolean(ENABLE_AUTOMATIC_PLAN_ITEM_INSTANCE_CREATION_JSON_PROPERTY, rootNode));
264270

265271
JsonNode activateMappingNodes = rootNode.get(ACTIVATE_PLAN_ITEM_DEFINITIONS_JSON_SECTION);
266272
if (activateMappingNodes != null) {
@@ -402,6 +408,14 @@ protected static String getJsonProperty(String propertyName, JsonNode jsonNode)
402408
return null;
403409
}
404410

411+
protected static Boolean getJsonPropertyAsBoolean(String propertyName, JsonNode jsonNode) {
412+
if (jsonNode.has(propertyName) && !jsonNode.get(propertyName).isNull()) {
413+
return jsonNode.get(propertyName).asBoolean();
414+
}
415+
416+
return null;
417+
}
418+
405419
protected static Integer getJsonPropertyAsInteger(String propertyName, JsonNode jsonNode) {
406420
if (jsonNode.has(propertyName) && !jsonNode.get(propertyName).isNull()) {
407421
return jsonNode.get(propertyName).asInt();

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class CaseInstanceMigrationDocumentImpl implements CaseInstanceMigrationD
3737
protected String migrateToCaseDefinitionKey;
3838
protected Integer migrateToCaseDefinitionVersion;
3939
protected String migrateToCaseDefinitionTenantId;
40+
protected Boolean enableAutomaticPlanItemInstanceCreation;
4041
protected List<ActivatePlanItemDefinitionMapping> activatePlanItemDefinitionMappings = new ArrayList<>();
4142
protected List<TerminatePlanItemDefinitionMapping> terminatePlanItemDefinitionMappings = new ArrayList<>();
4243
protected List<MoveToAvailablePlanItemDefinitionMapping> moveToAvailablePlanItemDefinitionMappings = new ArrayList<>();
@@ -133,6 +134,15 @@ public String getMigrateToCaseDefinitionTenantId() {
133134
return this.migrateToCaseDefinitionTenantId;
134135
}
135136

137+
@Override
138+
public Boolean getEnableAutomaticPlanItemInstanceCreation() {
139+
return enableAutomaticPlanItemInstanceCreation;
140+
}
141+
142+
public void setEnableAutomaticPlanItemInstanceCreation(Boolean enableAutomaticPlanItemInstanceCreation) {
143+
this.enableAutomaticPlanItemInstanceCreation = enableAutomaticPlanItemInstanceCreation;
144+
}
145+
136146
@Override
137147
public List<ActivatePlanItemDefinitionMapping> getActivatePlanItemDefinitionMappings() {
138148
return activatePlanItemDefinitionMappings;

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationManagerImpl.java

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package org.flowable.cmmn.engine.impl.migration;
1515

16+
import java.util.ArrayList;
1617
import java.util.HashMap;
1718
import java.util.List;
1819
import java.util.Map;
@@ -41,6 +42,8 @@
4142
import org.flowable.cmmn.api.repository.CaseDefinition;
4243
import org.flowable.cmmn.api.runtime.CaseInstance;
4344
import org.flowable.cmmn.api.runtime.CaseInstanceState;
45+
import org.flowable.cmmn.api.runtime.PlanItemInstance;
46+
import org.flowable.cmmn.api.runtime.PlanItemInstanceState;
4447
import org.flowable.cmmn.engine.CmmnEngineConfiguration;
4548
import org.flowable.cmmn.engine.impl.history.CmmnHistoryManager;
4649
import org.flowable.cmmn.engine.impl.history.HistoricCaseInstanceQueryImpl;
@@ -58,6 +61,8 @@
5861
import org.flowable.cmmn.engine.impl.persistence.entity.HistoricMilestoneInstanceEntityManager;
5962
import org.flowable.cmmn.engine.impl.persistence.entity.HistoricPlanItemInstanceEntity;
6063
import org.flowable.cmmn.engine.impl.persistence.entity.HistoricPlanItemInstanceEntityManager;
64+
import org.flowable.cmmn.engine.impl.persistence.entity.PlanItemInstanceEntity;
65+
import org.flowable.cmmn.engine.impl.persistence.entity.PlanItemInstanceEntityManager;
6166
import org.flowable.cmmn.engine.impl.repository.CaseDefinitionUtil;
6267
import org.flowable.cmmn.engine.impl.runtime.AbstractCmmnDynamicStateManager;
6368
import org.flowable.cmmn.engine.impl.runtime.CaseInstanceChangeState;
@@ -66,6 +71,7 @@
6671
import org.flowable.cmmn.engine.impl.util.CommandContextUtil;
6772
import org.flowable.cmmn.model.CmmnModel;
6873
import org.flowable.cmmn.model.PlanItemDefinition;
74+
import org.flowable.cmmn.model.Stage;
6975
import org.flowable.common.engine.api.FlowableException;
7076
import org.flowable.common.engine.api.scope.ScopeTypes;
7177
import org.flowable.common.engine.impl.calendar.BusinessCalendar;
@@ -181,6 +187,20 @@ protected void doValidatePlanItemMappings(String caseInstanceId, CmmnModel cmmnM
181187
validationResult.addValidationMessage("Invalid mapping for add waiting for repetition plan item definition '" + planItemDefinitionId + "' cannot be found in the case definition");
182188
}
183189
}
190+
191+
Map<String, PlanItemDefinitionMapping> removeWaitingForRepetitionMappingLookupMap = groupByFromPlanItemId(document.getRemoveWaitingForRepetitionPlanItemDefinitionMappings(), validationResult);
192+
for (String planItemDefinitionId : removeWaitingForRepetitionMappingLookupMap.keySet()) {
193+
if (!hasPlanItemDefinition(cmmnModel, planItemDefinitionId)) {
194+
validationResult.addValidationMessage("Invalid mapping for remove waiting for repetition plan item definition '" + planItemDefinitionId + "' cannot be found in the case definition");
195+
}
196+
}
197+
198+
for (ChangePlanItemDefinitionWithNewTargetIdsMapping changePlanItemDefinitionIdMapping : document.getChangePlanItemDefinitionWithNewTargetIdsMappings()) {
199+
if (!hasPlanItemDefinition(cmmnModel, changePlanItemDefinitionIdMapping.getNewPlanItemDefinitionId())) {
200+
validationResult.addValidationMessage("Invalid mapping for changing the plan item definition id from '" + changePlanItemDefinitionIdMapping.getExistingPlanItemDefinitionId() +
201+
"' to '" + changePlanItemDefinitionIdMapping.getNewPlanItemDefinitionId() + "', because the target can not be found in the case definition");
202+
}
203+
}
184204
}
185205

186206
@Override
@@ -370,23 +390,29 @@ protected ChangePlanItemStateBuilderImpl prepareChangeStateBuilder(CaseInstance
370390
ChangePlanItemStateBuilderImpl changePlanItemStateBuilder = new ChangePlanItemStateBuilderImpl();
371391
changePlanItemStateBuilder.caseInstanceId(caseInstanceId);
372392

393+
List<String> mappedPlanItemDefinitionIds = new ArrayList<>();
373394
for (ActivatePlanItemDefinitionMapping planItemDefinitionMapping : document.getActivatePlanItemDefinitionMappings()) {
395+
mappedPlanItemDefinitionIds.add(planItemDefinitionMapping.getPlanItemDefinitionId());
374396
changePlanItemStateBuilder.activatePlanItemDefinition(planItemDefinitionMapping);
375397
}
376398

377399
for (TerminatePlanItemDefinitionMapping planItemDefinitionMapping : document.getTerminatePlanItemDefinitionMappings()) {
400+
mappedPlanItemDefinitionIds.add(planItemDefinitionMapping.getPlanItemDefinitionId());
378401
changePlanItemStateBuilder.terminatePlanItemDefinition(planItemDefinitionMapping);
379402
}
380403

381404
for (MoveToAvailablePlanItemDefinitionMapping planItemDefinitionMapping : document.getMoveToAvailablePlanItemDefinitionMappings()) {
405+
mappedPlanItemDefinitionIds.add(planItemDefinitionMapping.getPlanItemDefinitionId());
382406
changePlanItemStateBuilder.changeToAvailableStateByPlanItemDefinition(planItemDefinitionMapping);
383407
}
384408

385409
for (WaitingForRepetitionPlanItemDefinitionMapping planItemDefinitionMapping : document.getWaitingForRepetitionPlanItemDefinitionMappings()) {
410+
mappedPlanItemDefinitionIds.add(planItemDefinitionMapping.getPlanItemDefinitionId());
386411
changePlanItemStateBuilder.addWaitingForRepetitionPlanItemDefinition(planItemDefinitionMapping);
387412
}
388413

389414
for (RemoveWaitingForRepetitionPlanItemDefinitionMapping planItemDefinitionMapping : document.getRemoveWaitingForRepetitionPlanItemDefinitionMappings()) {
415+
mappedPlanItemDefinitionIds.add(planItemDefinitionMapping.getPlanItemDefinitionId());
390416
changePlanItemStateBuilder.removeWaitingForRepetitionPlanItemDefinition(planItemDefinitionMapping);
391417
}
392418

@@ -399,12 +425,51 @@ protected ChangePlanItemStateBuilderImpl prepareChangeStateBuilder(CaseInstance
399425
}
400426

401427
for (ChangePlanItemDefinitionWithNewTargetIdsMapping changePlanItemDefinitionWithNewTargetIdsMapping : document.getChangePlanItemDefinitionWithNewTargetIdsMappings()) {
428+
mappedPlanItemDefinitionIds.add(changePlanItemDefinitionWithNewTargetIdsMapping.getNewPlanItemDefinitionId());
402429
changePlanItemStateBuilder.changePlanItemDefinitionWithNewTargetIds(changePlanItemDefinitionWithNewTargetIdsMapping.getExistingPlanItemDefinitionId(),
403430
changePlanItemDefinitionWithNewTargetIdsMapping.getNewPlanItemId(), changePlanItemDefinitionWithNewTargetIdsMapping.getNewPlanItemDefinitionId());
404431
}
405-
432+
433+
if (document.getEnableAutomaticPlanItemInstanceCreation() != null && document.getEnableAutomaticPlanItemInstanceCreation()) {
434+
PlanItemInstanceEntityManager planItemInstanceEntityManager = CommandContextUtil.getPlanItemInstanceEntityManager(commandContext);
435+
List<PlanItemInstanceEntity> planItemInstances = planItemInstanceEntityManager.findByCaseInstanceId(caseInstance.getId());
436+
Map<String, PlanItemInstance> planItemDefinitionIdsWithPlanItemInstanceMap = new HashMap<>();
437+
for (PlanItemInstanceEntity planItemInstance : planItemInstances) {
438+
if (!planItemDefinitionIdsWithPlanItemInstanceMap.containsKey(planItemInstance.getPlanItemDefinitionId())) {
439+
planItemDefinitionIdsWithPlanItemInstanceMap.put(planItemInstance.getPlanItemDefinitionId(), planItemInstance);
440+
441+
} else if (PlanItemInstanceState.AVAILABLE.equals(planItemInstance.getState()) || PlanItemInstanceState.ACTIVE.equals(planItemInstance.getState())) {
442+
planItemDefinitionIdsWithPlanItemInstanceMap.put(planItemInstance.getPlanItemDefinitionId(), planItemInstance);
443+
}
444+
}
445+
446+
CmmnModel targetModel = CaseDefinitionUtil.getCmmnModel(caseDefinitionToMigrateTo.getId());
447+
Stage planModelStage = targetModel.getPrimaryCase().getPlanModel();
448+
checkForNewPlanItemInstancesInStage(planModelStage, mappedPlanItemDefinitionIds, planItemDefinitionIdsWithPlanItemInstanceMap, changePlanItemStateBuilder);
449+
}
450+
406451
return changePlanItemStateBuilder;
407452
}
453+
454+
protected void checkForNewPlanItemInstancesInStage(Stage stage, List<String> mappedPlanItemDefinitionIds,
455+
Map<String, PlanItemInstance> planItemDefinitionIdsWithPlanItemInstanceMap, ChangePlanItemStateBuilderImpl changePlanItemStateBuilder) {
456+
457+
for (PlanItemDefinition childPlanItemDefinition : stage.getPlanItemDefinitions()) {
458+
if (!mappedPlanItemDefinitionIds.contains(childPlanItemDefinition.getId()) && !planItemDefinitionIdsWithPlanItemInstanceMap.containsKey(childPlanItemDefinition.getId())) {
459+
MoveToAvailablePlanItemDefinitionMapping availableMappping = new MoveToAvailablePlanItemDefinitionMapping(childPlanItemDefinition.getId());
460+
changePlanItemStateBuilder.changeToAvailableStateByPlanItemDefinition(availableMappping);
461+
462+
} else if (childPlanItemDefinition instanceof Stage) {
463+
Stage childStage = (Stage) childPlanItemDefinition;
464+
if (!mappedPlanItemDefinitionIds.contains(childPlanItemDefinition.getId())) {
465+
PlanItemInstance stagePlanItemInstance = planItemDefinitionIdsWithPlanItemInstanceMap.get(childStage.getId());
466+
if (PlanItemInstanceState.ACTIVE.equals(stagePlanItemInstance.getState())) {
467+
checkForNewPlanItemInstancesInStage(childStage, mappedPlanItemDefinitionIds, planItemDefinitionIdsWithPlanItemInstanceMap, changePlanItemStateBuilder);
468+
}
469+
}
470+
}
471+
}
472+
}
408473

409474
protected void changeCaseDefinitionReferenceOfHistory(CaseInstanceEntity caseInstance, CaseDefinition caseDefinitionToMigrateTo, CommandContext commandContext) {
410475
CmmnHistoryManager historyManager = CommandContextUtil.getCmmnHistoryManager(commandContext);

0 commit comments

Comments
 (0)