Skip to content

Commit 492a6b7

Browse files
roumnfiliphr
authored andcommitted
Expose cmmn query by caseInstanceIds over REST (#4103)
1 parent 72052df commit 492a6b7

6 files changed

Lines changed: 62 additions & 1 deletion

File tree

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"),
@@ -116,6 +117,10 @@ public DataResponse<CaseInstanceResponse> getCaseInstances(@ApiParam(hidden = tr
116117
queryRequest.setCaseInstanceId(allRequestParams.get("id"));
117118
}
118119

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

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;
@@ -84,6 +85,14 @@ public void setCaseInstanceId(String caseInstanceId) {
8485
this.caseInstanceId = caseInstanceId;
8586
}
8687

88+
public Set<String> getCaseInstanceIds() {
89+
return caseInstanceIds;
90+
}
91+
92+
public void setCaseInstanceIds(Set<String> caseInstanceIds) {
93+
this.caseInstanceIds = caseInstanceIds;
94+
}
95+
8796
public String getCaseBusinessKey() {
8897
return caseBusinessKey;
8998
}

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
@@ -101,6 +101,24 @@ public void testGetCaseInstances() throws Exception {
101101

102102
url = CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?id=anotherId";
103103
assertResultsPresentInDataResponse(url);
104+
105+
// Case instance ids
106+
String id2 = runtimeService.createCaseInstanceBuilder()
107+
.caseDefinitionKey("oneHumanTaskCase")
108+
.name("myCaseInstanceName")
109+
.businessKey("myBusinessKey")
110+
.businessStatus("myBusinessStatus")
111+
.start().getId();
112+
String id3 = runtimeService.createCaseInstanceBuilder()
113+
.caseDefinitionKey("oneHumanTaskCase")
114+
.name("myCaseInstanceName")
115+
.businessKey("myBusinessKey")
116+
.businessStatus("myBusinessStatus")
117+
.start().getId();
118+
url = CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?ids=" + id + "," + id2;
119+
assertResultsPresentInDataResponse(url, id, id2);
120+
runtimeService.terminateCaseInstance(id2);
121+
runtimeService.terminateCaseInstance(id3);
104122

105123
// Case instance name
106124
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
@@ -66,6 +66,20 @@ public void testQueryCaseInstancesWithVariables() throws Exception {
6666
String url = CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_QUERY);
6767

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

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
@@ -16,8 +16,10 @@
1616
import java.util.ArrayList;
1717
import java.util.Collections;
1818
import java.util.Date;
19+
import java.util.HashSet;
1920
import java.util.List;
2021
import java.util.Map;
22+
import java.util.Set;
2123

2224
import org.apache.commons.lang3.time.FastDateFormat;
2325
import org.flowable.common.engine.api.FlowableIllegalArgumentException;
@@ -110,4 +112,14 @@ public static List<String> parseToList(String value) {
110112
Collections.addAll(values, valueParts);
111113
return values;
112114
}
115+
116+
public static Set<String> parseToSet(String value) {
117+
if (value == null || value.isEmpty()) {
118+
return null;
119+
}
120+
String[] valueParts = value.split(",");
121+
Set<String> values = new HashSet<>(valueParts.length);
122+
Collections.addAll(values, valueParts);
123+
return values;
124+
}
113125
}

0 commit comments

Comments
 (0)