Skip to content

Commit

Permalink
Use plan item instance name for stage overview when set
Browse files Browse the repository at this point in the history
  • Loading branch information
tijsrademakers committed Jun 19, 2024
1 parent 56bea27 commit 11bb3aa
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.List;
import java.util.Optional;

import org.apache.commons.lang3.StringUtils;
import org.flowable.cmmn.api.StageResponse;
import org.flowable.cmmn.api.history.HistoricPlanItemInstance;
import org.flowable.cmmn.api.repository.CaseDefinition;
Expand Down Expand Up @@ -78,10 +79,20 @@ public List<StageResponse> execute(CommandContext commandContext) {

List<OverviewElement> overviewElements = new ArrayList<>();
for (Stage stage : stages) {
overviewElements.add(new OverviewElement(stage.getId(), stage.getName(), stage.getDisplayOrder(), stage.getIncludeInStageOverview(), stage));
OverviewElement overviewElement = new OverviewElement(stage.getId(), stage.getName(), stage.getDisplayOrder(), stage.getIncludeInStageOverview(), stage);
Optional<HistoricPlanItemInstance> planItemInstance = getPlanItemInstance(planItemInstances, stage);
if (planItemInstance.isPresent() && StringUtils.isNotEmpty(planItemInstance.get().getName())) {
overviewElement.setName(planItemInstance.get().getName());
}
overviewElements.add(overviewElement);
}
for (Milestone milestone : milestones) {
overviewElements.add(new OverviewElement(milestone.getId(), milestone.getName(), milestone.getDisplayOrder(), milestone.getIncludeInStageOverview(), milestone));
OverviewElement overviewElement = new OverviewElement(milestone.getId(), milestone.getName(), milestone.getDisplayOrder(), milestone.getIncludeInStageOverview(), milestone);
Optional<HistoricPlanItemInstance> planItemInstance = getPlanItemInstance(planItemInstances, milestone);
if (planItemInstance.isPresent() && StringUtils.isNotEmpty(planItemInstance.get().getName())) {
overviewElement.setName(planItemInstance.get().getName());
}
overviewElements.add(overviewElement);
}

// If one stage has a display order, they are ordered by that.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,20 @@ public List<StageResponse> execute(CommandContext commandContext) {

List<OverviewElement> overviewElements = new ArrayList<>();
for (Stage stage : stages) {
overviewElements.add(new OverviewElement(stage.getId(), stage.getName(), stage.getDisplayOrder(), stage.getIncludeInStageOverview(), stage));
OverviewElement overviewElement = new OverviewElement(stage.getId(), stage.getName(), stage.getDisplayOrder(), stage.getIncludeInStageOverview(), stage);
Optional<PlanItemInstance> planItemInstance = getPlanItemInstance(planItemInstances, stage);
if (planItemInstance.isPresent() && StringUtils.isNotEmpty(planItemInstance.get().getName())) {
overviewElement.setName(planItemInstance.get().getName());
}
overviewElements.add(overviewElement);
}
for (Milestone milestone : milestones) {
overviewElements.add(new OverviewElement(milestone.getId(), milestone.getName(), milestone.getDisplayOrder(), milestone.getIncludeInStageOverview(), milestone));
OverviewElement overviewElement = new OverviewElement(milestone.getId(), milestone.getName(), milestone.getDisplayOrder(), milestone.getIncludeInStageOverview(), milestone);
Optional<PlanItemInstance> planItemInstance = getPlanItemInstance(planItemInstances, milestone);
if (planItemInstance.isPresent() && StringUtils.isNotEmpty(planItemInstance.get().getName())) {
overviewElement.setName(planItemInstance.get().getName());
}
overviewElements.add(overviewElement);
}

// If one stage has a display order, they are ordered by that.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,88 @@ public void testGetStageAndMilestoneOverviewWhenExpressionIsFalse() {
assertThat(stageMap.get("Stage 2").getEndTime()).isNotNull();
}
}

@Test
@CmmnDeployment
public void testGetStageAndMilestoneOverviewExpression() {
Date now = new Date();
setClockTo(now);
CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder()
.caseDefinitionKey("testCase")
.variable("showInStage", true)
.variable("showMilestoneInOverview", true)
.variable("milestoneName", "This is a milestone name")
.variable("stageName", "This is a stage name")
.start();

List<StageResponse> stages = cmmnRuntimeService.getStageOverview(caseInstance.getId());
assertThat(stages).hasSize(5);

Map<String, StageResponse> stageMap = new HashMap<>();
for (StageResponse stageResponse : stages) {
stageMap.put(stageResponse.getName(), stageResponse);
}

assertThat(stageMap.get("This is a milestone name").getName()).isEqualTo("This is a milestone name");
assertThat(stageMap.get("This is a milestone name").isCurrent()).isFalse();
assertThat(stageMap.get("This is a milestone name").isEnded()).isTrue();
assertThat(stageMap.get("This is a milestone name").getEndTime()).isNotNull();

assertThat(stageMap.get("This is a stage name").getName()).isEqualTo("This is a stage name");
assertThat(stageMap.get("This is a stage name").isCurrent()).isTrue();
assertThat(stageMap.get("This is a stage name").isEnded()).isFalse();
assertThat(stageMap.get("This is a stage name").getEndTime()).isNull();

assertThat(stageMap.get("Stage 2").getName()).isEqualTo("Stage 2");
assertThat(stageMap.get("Stage 2").isCurrent()).isFalse();
assertThat(stageMap.get("Stage 2").isEnded()).isFalse();
assertThat(stageMap.get("Stage 2").getEndTime()).isNull();

assertThat(stageMap.get("Milestone 2.1").getName()).isEqualTo("Milestone 2.1");
assertThat(stageMap.get("Milestone 2.1").isCurrent()).isFalse();
assertThat(stageMap.get("Milestone 2.1").isEnded()).isFalse();
assertThat(stageMap.get("Milestone 2.1").getEndTime()).isNull();

assertThat(stageMap.get("Stage 2.1").getName()).isEqualTo("Stage 2.1");
assertThat(stageMap.get("Stage 2.1").isCurrent()).isFalse();
assertThat(stageMap.get("Stage 2.1").isEnded()).isFalse();
assertThat(stageMap.get("Stage 2.1").getEndTime()).isNull();

if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, cmmnEngineConfiguration)) {
stages = cmmnHistoryService.getStageOverview(caseInstance.getId());
assertThat(stages).hasSize(5);

stageMap = new HashMap<>();
for (StageResponse stageResponse : stages) {
stageMap.put(stageResponse.getName(), stageResponse);
}

assertThat(stageMap.get("This is a milestone name").getName()).isEqualTo("This is a milestone name");
assertThat(stageMap.get("This is a milestone name").isCurrent()).isFalse();
assertThat(stageMap.get("This is a milestone name").isEnded()).isTrue();
assertThat(stageMap.get("This is a milestone name").getEndTime()).isNotNull();

assertThat(stageMap.get("This is a stage name").getName()).isEqualTo("This is a stage name");
assertThat(stageMap.get("This is a stage name").isCurrent()).isTrue();
assertThat(stageMap.get("This is a stage name").isEnded()).isFalse();
assertThat(stageMap.get("This is a stage name").getEndTime()).isNull();

assertThat(stageMap.get("Stage 2").getName()).isEqualTo("Stage 2");
assertThat(stageMap.get("Stage 2").isCurrent()).isFalse();
assertThat(stageMap.get("Stage 2").isEnded()).isFalse();
assertThat(stageMap.get("Stage 2").getEndTime()).isNull();

assertThat(stageMap.get("Milestone 2.1").getName()).isEqualTo("Milestone 2.1");
assertThat(stageMap.get("Milestone 2.1").isCurrent()).isFalse();
assertThat(stageMap.get("Milestone 2.1").isEnded()).isFalse();
assertThat(stageMap.get("Milestone 2.1").getEndTime()).isNull();

assertThat(stageMap.get("Stage 2.1").getName()).isEqualTo("Stage 2.1");
assertThat(stageMap.get("Stage 2.1").isCurrent()).isFalse();
assertThat(stageMap.get("Stage 2.1").isEnded()).isFalse();
assertThat(stageMap.get("Stage 2.1").getEndTime()).isNull();
}
}

@Test
@CmmnDeployment
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/CMMN/20151109/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flowable="http://flowable.org/cmmn" xmlns:cmmndi="http://www.omg.org/spec/CMMN/20151109/CMMNDI" xmlns:dc="http://www.omg.org/spec/CMMN/20151109/DC" xmlns:di="http://www.omg.org/spec/CMMN/20151109/DI" targetNamespace="http://flowable.org/cmmn">
<case id="testCase" name="Test Query Stages Only" flowable:initiatorVariableName="initiator">
<casePlanModel id="onecaseplanmodel1" name="Case plan model" flowable:includeInStageOverview="false">

<planItem id="planItem1" name="${milestoneName}" definitionRef="milestone1" />
<planItem id="planItem2" name="${stageName}" definitionRef="oneexpandedstage1" />
<planItem id="planItem4" name="Stage 2" definitionRef="oneexpandedstage2">
<entryCriterion id="oneentrycriterion3" sentryRef="sentry1"></entryCriterion>
</planItem>
<sentry id="sentry1">
<planItemOnPart id="sentryOnPart1" sourceRef="planItem2">
<standardEvent>complete</standardEvent>
</planItemOnPart>
</sentry>

<milestone id="milestone1" name="${milestoneName}" flowable:includeInStageOverview="true" />

<stage id="oneexpandedstage1" name="${stageName}">
<planItem id="planItem6" name="Milestone 1.1" definitionRef="milestone2" />
<planItem id="planItem3" name="Stage 1.1" definitionRef="oneexpandedstage4">
<itemControl>
<manualActivationRule></manualActivationRule>
</itemControl>
</planItem>

<milestone id="milestone2" name="Milestone 1.1" flowable:includeInStageOverview="false" />

<stage id="oneexpandedstage4" name="Stage 1.1" flowable:includeInStageOverview="false" />
</stage>

<stage id="oneexpandedstage2" name="Stage 2" flowable:includeInStageOverview="true">
<planItem id="planItem7" name="Milestone 2.1" definitionRef="milestone3" />
<planItem id="planItem5" name="Stage 2.1" definitionRef="oneexpandedstage5" />

<milestone id="milestone3" name="Milestone 2.1" flowable:includeInStageOverview="${showMilestoneInOverview}" />

<stage id="oneexpandedstage5" name="Stage 2.1" flowable:includeInStageOverview="${showInStage}"></stage>
</stage>

</casePlanModel>
</case>
</definitions>

0 comments on commit 11bb3aa

Please sign in to comment.