super.execute(executionContext);
}
private void parallelGatewayConverging(ExecutionContext executionContext) {
TokenEntity token = executionContext.getToken();
TokenEntity parentToken = token.getParent();
// 判断是否有父令牌
if (parentToken != null) {
// 判断令牌是否需要重新激活
if (token.isAbleToReactivateParent()) {
token.setAbleToReactivateParent(false);
boolean reactivateParent = true;
if (isDiscriminator) {
reactivateParent = true;
} else if (tokenIds != null) {
reactivateParent = mustParentBeReactivated(parentToken, tokenIds);
} else if (nOutOfM != -1) {
int n = 0;
for (String tokenKey : parentToken.getChildren().keySet()) {
TokenEntity concurrentToken = parentToken.getChildren().get(tokenKey);
if (this.equals(concurrentToken.getFlowNode())) {
n++;
}
}
if (n < nOutOfM) {
reactivateParent = false;
}
} else {
// 验证节点是否全部结束
reactivateParent = mustParentBeReactivated(parentToken, parentToken.getChildren().keySet());
}
// 判断是否需要把父令牌移动到下一个节点
if (reactivateParent) {
for (String tokenKey : parentToken.getChildren().keySet()) {
TokenEntity nowToken = parentToken.getChildren().get(tokenKey);
nowToken.setAbleToReactivateParent(false);
nowToken.setEndTime(new Date());
}
ExecutionContext parentContext = ProcessObjectFactory.FACTORYINSTANCE.createExecutionContext(parentToken);
leave(parentContext);