Skip to content

Commit aa7d3ee

Browse files
Expos plan item instance local variables via query and rest api (#3971)
Co-authored-by: Christopher Welsch <christopher.welsch@flowable.com>
1 parent d0989be commit aa7d3ee

File tree

36 files changed

+589
-30
lines changed

36 files changed

+589
-30
lines changed

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/history/HistoricPlanItemInstance.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package org.flowable.cmmn.api.history;
1414

1515
import java.util.Date;
16+
import java.util.Map;
1617

1718
/**
1819
* @author Dennis Federico
@@ -88,4 +89,6 @@ public interface HistoricPlanItemInstance {
8889

8990
/** Sets an optional localized name for the plan item */
9091
void setLocalizedName(String localizedName);
92+
93+
Map<String, Object> getPlanItemInstanceLocalVariables();
9194
}

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/history/HistoricPlanItemInstanceQuery.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ public interface HistoricPlanItemInstanceQuery extends Query<HistoricPlanItemIns
8585
*/
8686
HistoricPlanItemInstanceQuery withLocalizationFallback();
8787

88+
HistoricPlanItemInstanceQuery includeLocalVariables();
89+
8890
HistoricPlanItemInstanceQuery orderByCreateTime();
8991
HistoricPlanItemInstanceQuery orderByEndedTime();
9092
HistoricPlanItemInstanceQuery orderByLastAvailableTime();

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/runtime/PlanItemInstance.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package org.flowable.cmmn.api.runtime;
1414

1515
import java.util.Date;
16+
import java.util.Map;
1617

1718
/**
1819
* @author Joram Barrez
@@ -58,7 +59,7 @@ default Date getStartTime() {
5859
String getFormKey();
5960
String getExtraValue();
6061
String getTenantId();
61-
62+
Map<String, Object> getPlanItemInstanceLocalVariables();
6263

6364
/** Sets an optional localized name for the plan item */
6465
void setLocalizedName(String localizedName);

modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/runtime/PlanItemInstanceQuery.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,12 @@ public interface PlanItemInstanceQuery extends Query<PlanItemInstanceQuery, Plan
381381
*/
382382
PlanItemInstanceQuery caseVariableNotExists(String name);
383383

384+
/**
385+
*
386+
* Include local plan item instance variables in the query result
387+
*/
388+
PlanItemInstanceQuery includeLocalVariables();
389+
384390
/**
385391
* Localize plan item name to specified locale.
386392
*/

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/ReadOnlyDelegatePlanItemInstanceImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public class ReadOnlyDelegatePlanItemInstanceImpl implements ReadOnlyDelegatePla
5858
protected final String formKey;
5959
protected final String extraValue;
6060
protected final Map<String, Object> variables;
61+
protected final Map<String, Object> localVariables;
6162
protected final String tenantId;
6263
protected final PlanItem planItem;
6364

@@ -94,6 +95,7 @@ public ReadOnlyDelegatePlanItemInstanceImpl(DelegatePlanItemInstance planItemIns
9495
this.formKey = planItemInstance.getFormKey();
9596
this.extraValue = planItemInstance.getExtraValue();
9697
this.variables = new HashMap<>(planItemInstance.getVariables());
98+
this.localVariables = new HashMap<>(planItemInstance.getPlanItemInstanceLocalVariables());
9799
this.tenantId = planItemInstance.getTenantId();
98100
this.planItem = planItemInstance.getPlanItem();
99101
}
@@ -268,6 +270,11 @@ public String getTenantId() {
268270
return tenantId;
269271
}
270272

273+
@Override
274+
public Map<String, Object> getPlanItemInstanceLocalVariables() {
275+
return localVariables;
276+
}
277+
271278
@Override
272279
public PlanItem getPlanItem() {
273280
return planItem;

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public class HistoricPlanItemInstanceQueryImpl extends AbstractQuery<HistoricPla
8888
protected boolean withoutTenantId;
8989
protected String locale;
9090
protected boolean withLocalizationFallback;
91+
protected boolean includeLocalVariables;
9192

9293
public HistoricPlanItemInstanceQueryImpl() {
9394

@@ -439,6 +440,13 @@ public HistoricPlanItemInstanceQuery withLocalizationFallback() {
439440
return this;
440441
}
441442

443+
@Override
444+
public HistoricPlanItemInstanceQuery includeLocalVariables() {
445+
this.includeLocalVariables = true;
446+
return this;
447+
}
448+
449+
442450
@Override
443451
public HistoricPlanItemInstanceQuery orderByCreateTime() {
444452
return orderBy(HistoricPlanItemInstanceQueryProperty.CREATE_TIME);
@@ -511,7 +519,12 @@ public long executeCount(CommandContext commandContext) {
511519

512520
@Override
513521
public List<HistoricPlanItemInstance> executeList(CommandContext commandContext) {
514-
List<HistoricPlanItemInstance> historicPlanItems = CommandContextUtil.getHistoricPlanItemInstanceEntityManager(commandContext).findByCriteria(this);
522+
List<HistoricPlanItemInstance> historicPlanItems;
523+
if (includeLocalVariables){
524+
historicPlanItems = CommandContextUtil.getHistoricPlanItemInstanceEntityManager(commandContext).findWithVariablesByCriteria(this);
525+
} else {
526+
historicPlanItems =CommandContextUtil.getHistoricPlanItemInstanceEntityManager(commandContext).findByCriteria(this);
527+
}
515528

516529
CmmnEngineConfiguration cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration(commandContext);
517530
if (cmmnEngineConfiguration.getPlanItemLocalizationManager() != null) {
@@ -676,6 +689,9 @@ public String getTenantIdLike() {
676689
public boolean isWithoutTenantId() {
677690
return withoutTenantId;
678691
}
692+
public boolean isIncludeLocalVariables() {
693+
return includeLocalVariables;
694+
}
679695

680696
public List<List<String>> getSafeInvolvedGroups() {
681697
return safeInvolvedGroups;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313
package org.flowable.cmmn.engine.impl.persistence.entity;
1414

1515
import java.util.Date;
16+
import java.util.List;
1617

1718
import org.flowable.cmmn.api.history.HistoricPlanItemInstance;
1819
import org.flowable.common.engine.impl.db.HasRevision;
1920
import org.flowable.common.engine.impl.persistence.entity.Entity;
21+
import org.flowable.variable.service.impl.persistence.entity.HistoricVariableInstanceEntity;
2022

2123
/**
2224
* @author Dennis Federico
@@ -91,4 +93,5 @@ public interface HistoricPlanItemInstanceEntity extends Entity, HasRevision, His
9193

9294
void setTenantId(String tenantId);
9395

96+
List<HistoricVariableInstanceEntity> getQueryVariables();
9497
}

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,16 @@
1414

1515
import java.util.Date;
1616
import java.util.HashMap;
17+
import java.util.List;
1718
import java.util.Map;
1819

1920
import org.apache.commons.lang3.StringUtils;
2021
import org.flowable.cmmn.api.runtime.PlanItemInstance;
2122
import org.flowable.cmmn.engine.CmmnEngineConfiguration;
23+
import org.flowable.common.engine.impl.context.Context;
24+
import org.flowable.variable.api.history.HistoricVariableInstance;
25+
import org.flowable.variable.service.impl.persistence.entity.HistoricVariableInitializingList;
26+
import org.flowable.variable.service.impl.persistence.entity.HistoricVariableInstanceEntity;
2227

2328
/**
2429
* @author Dennis Federico
@@ -57,6 +62,7 @@ public class HistoricPlanItemInstanceEntityImpl extends AbstractCmmnEngineEntity
5762
protected boolean showInOverview;
5863
protected String tenantId = CmmnEngineConfiguration.NO_TENANT_ID;
5964
protected String localizedName;
65+
protected List<HistoricVariableInstanceEntity> queryVariables;
6066

6167
public HistoricPlanItemInstanceEntityImpl() {
6268
}
@@ -466,6 +472,33 @@ public void setLocalizedName(String localizedName) {
466472
this.localizedName = localizedName;
467473
}
468474

475+
@Override
476+
public Map<String, Object> getPlanItemInstanceLocalVariables() {
477+
Map<String, Object> variables = new HashMap<>();
478+
if (queryVariables != null) {
479+
for (HistoricVariableInstance variableInstance : queryVariables) {
480+
if (variableInstance.getId() != null && variableInstance.getSubScopeId() != null) {
481+
variables.put(variableInstance.getVariableName(), variableInstance.getValue());
482+
}
483+
}
484+
}
485+
return variables;
486+
}
487+
488+
@Override
489+
public List<HistoricVariableInstanceEntity> getQueryVariables() {
490+
if (queryVariables == null && Context.getCommandContext() != null) {
491+
queryVariables = new HistoricVariableInitializingList();
492+
}
493+
return queryVariables;
494+
}
495+
496+
public void setQueryVariables(List<HistoricVariableInstanceEntity> queryVariables) {
497+
this.queryVariables = queryVariables;
498+
}
499+
500+
501+
469502
@Override
470503
public String toString() {
471504
StringBuilder sb = new StringBuilder();

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.flowable.cmmn.api.history.HistoricPlanItemInstance;
1919
import org.flowable.cmmn.api.history.HistoricPlanItemInstanceQuery;
2020
import org.flowable.cmmn.api.runtime.PlanItemInstance;
21+
import org.flowable.cmmn.engine.impl.history.HistoricPlanItemInstanceQueryImpl;
2122
import org.flowable.common.engine.impl.persistence.entity.EntityManager;
2223

2324
/**
@@ -38,4 +39,6 @@ public interface HistoricPlanItemInstanceEntityManager extends EntityManager<His
3839
void bulkDeleteHistoricPlanItemInstancesForCaseInstanceIds(Collection<String> caseInstanceIds);
3940

4041
void deleteHistoricPlanItemInstancesForNonExistingCaseInstances();
42+
43+
List<HistoricPlanItemInstance> findWithVariablesByCriteria(HistoricPlanItemInstanceQueryImpl historicPlanItemInstanceQuery);
4144
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,9 @@ public void bulkDeleteHistoricPlanItemInstancesForCaseInstanceIds(Collection<Str
6969
public void deleteHistoricPlanItemInstancesForNonExistingCaseInstances() {
7070
dataManager.deleteHistoricPlanItemInstancesForNonExistingCaseInstances();
7171
}
72+
73+
@Override
74+
public List<HistoricPlanItemInstance> findWithVariablesByCriteria(HistoricPlanItemInstanceQueryImpl historicPlanItemInstanceQuery) {
75+
return dataManager.findWithVariablesByCriteria(historicPlanItemInstanceQuery);
76+
}
7277
}

0 commit comments

Comments
 (0)