Skip to content

Commit 8bb8c16

Browse files
authored
Expose cmmn query by caseInstanceIds over REST (#4103)
1 parent aafd130 commit 8bb8c16

File tree

6 files changed

+62
-1
lines changed

6 files changed

+62
-1
lines changed

modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseCaseInstanceResource.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ protected DataResponse<CaseInstanceResponse> getQueryResponse(CaseInstanceQueryR
7373
if (queryRequest.getCaseInstanceId() != null) {
7474
query.caseInstanceId(queryRequest.getCaseInstanceId());
7575
}
76+
if (queryRequest.getCaseInstanceIds() != null) {
77+
query.caseInstanceIds(queryRequest.getCaseInstanceIds());
78+
}
7679
if (queryRequest.getCaseDefinitionKey() != null) {
7780
query.caseDefinitionKey(queryRequest.getCaseDefinitionKey());
7881
}

modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceCollectionResource.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ public class CaseInstanceCollectionResource extends BaseCaseInstanceResource {
6060

6161
@ApiOperation(value = "List case instances", nickname ="listCaseInstances", tags = { "Case Instances" })
6262
@ApiImplicitParams({
63-
@ApiImplicitParam(name = "id", dataType = "string", value = "Only return models with the given version.", paramType = "query"),
63+
@ApiImplicitParam(name = "id", dataType = "string", value = "Only return case instances with the given id.", paramType = "query"),
64+
@ApiImplicitParam(name = "ids", dataType = "string", value = "Only return case instances with the given comma-separated ids.", paramType = "query"),
6465
@ApiImplicitParam(name = "caseDefinitionKey", dataType = "string", value = "Only return case instances with the given case definition key.", paramType = "query"),
6566
@ApiImplicitParam(name = "caseDefinitionKeyLike", dataType = "string", value = "Only return case instances like given case definition key.", paramType = "query"),
6667
@ApiImplicitParam(name = "caseDefinitionKeyLikeIgnoreCase", dataType = "string", value = "Only return case instances like given case definition key, ignoring case.", paramType = "query"),
@@ -117,6 +118,10 @@ public DataResponse<CaseInstanceResponse> getCaseInstances(@ApiParam(hidden = tr
117118
queryRequest.setCaseInstanceId(allRequestParams.get("id"));
118119
}
119120

121+
if (allRequestParams.containsKey("ids")) {
122+
queryRequest.setCaseInstanceIds(RequestUtil.parseToSet(allRequestParams.get("ids")));
123+
}
124+
120125
if (allRequestParams.containsKey("caseDefinitionKey")) {
121126
queryRequest.setCaseDefinitionKey(allRequestParams.get("caseDefinitionKey"));
122127
}

modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceQueryRequest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
public class CaseInstanceQueryRequest extends PaginateRequest {
3131

3232
private String caseInstanceId;
33+
private Set<String> caseInstanceIds;
3334
private String caseDefinitionId;
3435
private String caseDefinitionKey;
3536
private String caseDefinitionKeyLike;
@@ -86,6 +87,14 @@ public void setCaseInstanceId(String caseInstanceId) {
8687
this.caseInstanceId = caseInstanceId;
8788
}
8889

90+
public Set<String> getCaseInstanceIds() {
91+
return caseInstanceIds;
92+
}
93+
94+
public void setCaseInstanceIds(Set<String> caseInstanceIds) {
95+
this.caseInstanceIds = caseInstanceIds;
96+
}
97+
8998
public String getCaseBusinessKey() {
9099
return caseBusinessKey;
91100
}

modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceCollectionResourceTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,24 @@ public void testGetCaseInstances() throws Exception {
112112

113113
url = CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?id=anotherId";
114114
assertResultsPresentInDataResponse(url);
115+
116+
// Case instance ids
117+
String id2 = runtimeService.createCaseInstanceBuilder()
118+
.caseDefinitionKey("oneHumanTaskCase")
119+
.name("myCaseInstanceName")
120+
.businessKey("myBusinessKey")
121+
.businessStatus("myBusinessStatus")
122+
.start().getId();
123+
String id3 = runtimeService.createCaseInstanceBuilder()
124+
.caseDefinitionKey("oneHumanTaskCase")
125+
.name("myCaseInstanceName")
126+
.businessKey("myBusinessKey")
127+
.businessStatus("myBusinessStatus")
128+
.start().getId();
129+
url = CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?ids=" + id + "," + id2;
130+
assertResultsPresentInDataResponse(url, id, id2);
131+
runtimeService.terminateCaseInstance(id2);
132+
runtimeService.terminateCaseInstance(id3);
115133

116134
// Case instance name
117135
url = CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?name=myCaseInstanceName";

modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceQueryResourceTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,20 @@ public void testQueryCaseInstancesWithVariables() throws Exception {
6868
String url = CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_QUERY);
6969

7070
ObjectNode requestNode = objectMapper.createObjectNode();
71+
requestNode.put("caseInstanceId", caseInstance.getId());
72+
assertResultsPresentInPostDataResponse(url, requestNode, caseInstance.getId());
73+
74+
CaseInstance caseInstance2 = runtimeService.createCaseInstanceBuilder().caseDefinitionKey("oneHumanTaskCase").start();
75+
CaseInstance caseInstance3 = runtimeService.createCaseInstanceBuilder().caseDefinitionKey("oneHumanTaskCase").start();
76+
77+
requestNode = objectMapper.createObjectNode();
78+
requestNode.putArray("caseInstanceIds").add(caseInstance.getId()).add(caseInstance2.getId());
79+
assertResultsPresentInPostDataResponse(url, requestNode, caseInstance.getId(), caseInstance2.getId());
80+
81+
runtimeService.terminateCaseInstance(caseInstance2.getId());
82+
runtimeService.terminateCaseInstance(caseInstance3.getId());
83+
84+
requestNode = objectMapper.createObjectNode();
7185
requestNode.put("caseInstanceBusinessKey", "myBusinessKey");
7286
assertResultsPresentInPostDataResponse(url, requestNode, caseInstance.getId());
7387

modules/flowable-common-rest/src/main/java/org/flowable/common/rest/api/RequestUtil.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
import java.util.ArrayList;
2121
import java.util.Collections;
2222
import java.util.Date;
23+
import java.util.HashSet;
2324
import java.util.List;
2425
import java.util.Map;
26+
import java.util.Set;
2527

2628
import org.apache.commons.lang3.time.FastDateFormat;
2729

@@ -118,4 +120,14 @@ public static List<String> parseToList(String value) {
118120
Collections.addAll(values, valueParts);
119121
return values;
120122
}
123+
124+
public static Set<String> parseToSet(String value) {
125+
if (value == null || value.isEmpty()) {
126+
return null;
127+
}
128+
String[] valueParts = value.split(",");
129+
Set<String> values = new HashSet<>(valueParts.length);
130+
Collections.addAll(values, valueParts);
131+
return values;
132+
}
121133
}

0 commit comments

Comments
 (0)