Skip to content

Commit 2006fc5

Browse files
Merge branch 'main' of github.com:flowable/flowable-engine into flowable-release-8.0.0
2 parents 2464b1f + 1d4a975 commit 2006fc5

21 files changed

+329
-7
lines changed

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/CmmnEngineConfiguration.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@
198198
import org.flowable.cmmn.engine.interceptor.CreateCasePageTaskInterceptor;
199199
import org.flowable.cmmn.engine.interceptor.CreateCmmnExternalWorkerJobInterceptor;
200200
import org.flowable.cmmn.engine.interceptor.CreateHumanTaskInterceptor;
201+
import org.flowable.cmmn.engine.interceptor.EndCaseInstanceInterceptor;
201202
import org.flowable.cmmn.engine.interceptor.HumanTaskStateInterceptor;
202203
import org.flowable.cmmn.engine.interceptor.StartCaseInstanceInterceptor;
203204
import org.flowable.cmmn.image.CaseDiagramGenerator;
@@ -388,6 +389,8 @@ public class CmmnEngineConfiguration extends AbstractBuildableEngineConfiguratio
388389
protected List<CaseInstanceLifecycleListener> caseInstanceLifecycleListeners;
389390
protected Map<String, List<PlanItemInstanceLifecycleListener>> planItemInstanceLifecycleListeners;
390391
protected StartCaseInstanceInterceptor startCaseInstanceInterceptor;
392+
protected EndCaseInstanceInterceptor endCaseInstanceInterceptor;
393+
391394
protected CreateHumanTaskInterceptor createHumanTaskInterceptor;
392395
protected HumanTaskStateInterceptor humanTaskStateInterceptor;
393396
protected CreateCasePageTaskInterceptor createCasePageTaskInterceptor;
@@ -2501,6 +2504,14 @@ public CmmnEngineConfiguration setStartCaseInstanceInterceptor(StartCaseInstance
25012504
this.startCaseInstanceInterceptor = startCaseInstanceInterceptor;
25022505
return this;
25032506
}
2507+
2508+
public EndCaseInstanceInterceptor getEndCaseInstanceInterceptor() {
2509+
return endCaseInstanceInterceptor;
2510+
}
2511+
2512+
public void setEndCaseInstanceInterceptor(EndCaseInstanceInterceptor endCaseInstanceInterceptor) {
2513+
this.endCaseInstanceInterceptor = endCaseInstanceInterceptor;
2514+
}
25042515

25052516
public CreateHumanTaskInterceptor getCreateHumanTaskInterceptor() {
25062517
return createHumanTaskInterceptor;

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/AbstractDeleteCaseInstanceOperation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,14 @@ public AbstractDeleteCaseInstanceOperation(CommandContext commandContext, CaseIn
4040

4141
@Override
4242
public void internalExecute() {
43+
CmmnEngineConfiguration cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration(commandContext);
44+
if (cmmnEngineConfiguration.getEndCaseInstanceInterceptor() != null) {
45+
cmmnEngineConfiguration.getEndCaseInstanceInterceptor().beforeEndCaseInstance(caseInstanceEntity, getNewState());
46+
}
4347
deleteCaseInstance();
48+
if (cmmnEngineConfiguration.getEndCaseInstanceInterceptor() != null) {
49+
cmmnEngineConfiguration.getEndCaseInstanceInterceptor().afterEndCaseInstance(caseInstanceEntity.getId(), getNewState());
50+
}
4451
}
4552

4653
protected void deleteCaseInstance() {

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/CompleteCaseInstanceOperation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package org.flowable.cmmn.engine.impl.agenda.operation;
1414

1515
import org.flowable.cmmn.api.runtime.CaseInstanceState;
16+
import org.flowable.cmmn.engine.CmmnEngineConfiguration;
1617
import org.flowable.cmmn.engine.impl.behavior.OnParentEndDependantActivityBehavior;
1718
import org.flowable.cmmn.engine.impl.event.FlowableCmmnEventBuilder;
1819
import org.flowable.cmmn.engine.impl.persistence.entity.CaseInstanceEntity;

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/TerminateCaseInstanceOperation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.HashMap;
2121

2222
import org.flowable.cmmn.api.runtime.CaseInstanceState;
23+
import org.flowable.cmmn.engine.CmmnEngineConfiguration;
2324
import org.flowable.cmmn.engine.impl.behavior.OnParentEndDependantActivityBehavior;
2425
import org.flowable.cmmn.engine.impl.callback.CallbackConstants;
2526
import org.flowable.cmmn.engine.impl.event.FlowableCmmnEventBuilder;

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/history/CmmnHistoryManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.Date;
1717

1818
import org.flowable.cmmn.api.repository.CaseDefinition;
19+
import org.flowable.cmmn.api.runtime.CaseInstance;
1920
import org.flowable.cmmn.engine.impl.persistence.entity.CaseInstanceEntity;
2021
import org.flowable.cmmn.engine.impl.persistence.entity.MilestoneInstanceEntity;
2122
import org.flowable.cmmn.engine.impl.persistence.entity.PlanItemInstanceEntity;
@@ -51,6 +52,8 @@ public interface CmmnHistoryManager {
5152

5253
void recordIdentityLinkCreated(IdentityLinkEntity identityLink);
5354

55+
void recordIdentityLinkCreated(CaseInstanceEntity caseInstance, IdentityLinkEntity identityLink);
56+
5457
void recordIdentityLinkDeleted(IdentityLinkEntity identityLink);
5558

5659
void recordEntityLinkCreated(EntityLinkEntity entityLink);

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/history/CompositeCmmnHistoryManager.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.Date;
1818

1919
import org.flowable.cmmn.api.repository.CaseDefinition;
20+
import org.flowable.cmmn.api.runtime.CaseInstance;
2021
import org.flowable.cmmn.engine.impl.persistence.entity.CaseInstanceEntity;
2122
import org.flowable.cmmn.engine.impl.persistence.entity.MilestoneInstanceEntity;
2223
import org.flowable.cmmn.engine.impl.persistence.entity.PlanItemInstanceEntity;
@@ -109,6 +110,13 @@ public void recordIdentityLinkCreated(IdentityLinkEntity identityLink) {
109110
}
110111
}
111112

113+
@Override
114+
public void recordIdentityLinkCreated(CaseInstanceEntity caseInstance, IdentityLinkEntity identityLink) {
115+
for (CmmnHistoryManager historyManager : historyManagers) {
116+
historyManager.recordIdentityLinkCreated(caseInstance, identityLink);
117+
}
118+
}
119+
112120
@Override
113121
public void recordIdentityLinkDeleted(IdentityLinkEntity identityLink) {
114122
for (CmmnHistoryManager historyManager : historyManagers) {

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/history/DefaultCmmnHistoryManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.flowable.cmmn.api.history.HistoricMilestoneInstance;
2222
import org.flowable.cmmn.api.history.HistoricPlanItemInstance;
2323
import org.flowable.cmmn.api.repository.CaseDefinition;
24+
import org.flowable.cmmn.api.runtime.CaseInstance;
2425
import org.flowable.cmmn.engine.CmmnEngineConfiguration;
2526
import org.flowable.cmmn.engine.impl.persistence.entity.CaseInstanceEntity;
2627
import org.flowable.cmmn.engine.impl.persistence.entity.HistoricCaseInstanceEntity;
@@ -177,6 +178,11 @@ public void recordBulkDeleteHistoricCaseInstances(Collection<String> caseInstanc
177178

178179
@Override
179180
public void recordIdentityLinkCreated(IdentityLinkEntity identityLink) {
181+
this.recordIdentityLinkCreated(null, identityLink);
182+
}
183+
184+
@Override
185+
public void recordIdentityLinkCreated(CaseInstanceEntity caseInstance, IdentityLinkEntity identityLink) {
180186
if (getHistoryConfigurationSettings().isHistoryEnabledForIdentityLink(identityLink)
181187
&& (identityLink.getScopeId() != null || identityLink.getTaskId() != null)) {
182188
HistoricIdentityLinkService historicIdentityLinkService = cmmnEngineConfiguration.getIdentityLinkServiceConfiguration().getHistoricIdentityLinkService();

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IdentityLinkUtil.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.flowable.cmmn.api.runtime.CaseInstance;
1818
import org.flowable.cmmn.api.runtime.PlanItemInstance;
1919
import org.flowable.cmmn.engine.CmmnEngineConfiguration;
20+
import org.flowable.cmmn.engine.impl.persistence.entity.CaseInstanceEntity;
2021
import org.flowable.common.engine.api.scope.ScopeTypes;
2122
import org.flowable.common.engine.impl.identity.Authentication;
2223
import org.flowable.identitylink.service.impl.persistence.entity.IdentityLinkEntity;
@@ -33,14 +34,13 @@
3334
*/
3435
public class IdentityLinkUtil {
3536

36-
public static IdentityLinkEntity createCaseInstanceIdentityLink(CaseInstance caseInstance, String userId, String groupId, String type,
37+
public static IdentityLinkEntity createCaseInstanceIdentityLink(CaseInstanceEntity caseInstanceEntity, String userId, String groupId, String type,
3738
CmmnEngineConfiguration cmmnEngineConfiguration) {
3839

3940
IdentityLinkEntity identityLinkEntity = cmmnEngineConfiguration.getIdentityLinkServiceConfiguration()
40-
.getIdentityLinkService().createScopeIdentityLink(null, caseInstance.getId(), ScopeTypes.CMMN, userId, groupId, type);
41-
42-
CommandContextUtil.getCmmnHistoryManager().recordIdentityLinkCreated(identityLinkEntity);
43-
41+
.getIdentityLinkService().createScopeIdentityLink(null, caseInstanceEntity.getId(), ScopeTypes.CMMN, userId, groupId, type);
42+
43+
CommandContextUtil.getCmmnHistoryManager().recordIdentityLinkCreated(caseInstanceEntity, identityLinkEntity);
4444
return identityLinkEntity;
4545
}
4646

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/* Licensed under the Apache License, Version 2.0 (the "License");
2+
* you may not use this file except in compliance with the License.
3+
* You may obtain a copy of the License at
4+
*
5+
* http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*/
13+
package org.flowable.cmmn.engine.interceptor;
14+
15+
import org.flowable.cmmn.engine.impl.persistence.entity.CaseInstanceEntity;
16+
17+
public interface EndCaseInstanceInterceptor {
18+
19+
void beforeEndCaseInstance(CaseInstanceEntity caseInstance, String state);
20+
21+
void afterEndCaseInstance(String caseInstanceId, String state);
22+
}

modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/history/CompositeCmmnHistoryManagerTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,16 @@ void recordIdentityLinkCreated() {
118118
verify(historyManager2).recordIdentityLinkCreated(same(identityLink));
119119
}
120120

121+
@Test
122+
void recordIdentityLinkCreatedWithCaseInstance() {
123+
CaseInstanceEntity caseInstance = new CaseInstanceEntityImpl();
124+
IdentityLinkEntity identityLink = new IdentityLinkEntityImpl();
125+
compositeHistoryManager.recordIdentityLinkCreated(caseInstance, identityLink);
126+
127+
verify(historyManager1).recordIdentityLinkCreated(same(caseInstance), same(identityLink));
128+
verify(historyManager2).recordIdentityLinkCreated(same(caseInstance), same(identityLink));
129+
}
130+
121131
@Test
122132
void recordIdentityLinkDeleted() {
123133
IdentityLinkEntity identityLink = new IdentityLinkEntityImpl();

0 commit comments

Comments
 (0)