Skip to content

Commit 9452b76

Browse files
Add parent case instance id option to rest api
1 parent 60bb106 commit 9452b76

File tree

15 files changed

+199
-0
lines changed

15 files changed

+199
-0
lines changed

modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/history/HistoryDataDeleteTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,7 @@ public void testDeleteHistoricInstancesWithAllQueryOptions() throws InvocationTa
899899
methodNameToExpectedQueryPropertyName.put("withoutCaseInstanceParent", "withoutCaseInstanceParentId");
900900
Set<String> methodsToIgnore = new HashSet<>();
901901
methodsToIgnore.add("limitCaseVariables");
902+
methodsToIgnore.add("parentCaseInstanceId");
902903
methodsToIgnore.add("includeCaseVariables");
903904
methodsToIgnore.add("locale");
904905
methodsToIgnore.add("withLocalizationFallback");

modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/caze/HistoricCaseInstanceBaseResource.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ protected DataResponse<HistoricCaseInstanceResponse> getQueryResponse(HistoricCa
158158
if (queryRequest.getCaseInstanceCallbackType() != null) {
159159
query.caseInstanceCallbackType(queryRequest.getCaseInstanceCallbackType());
160160
}
161+
if (queryRequest.getParentCaseInstanceId() != null) {
162+
query.parentCaseInstanceId(queryRequest.getParentCaseInstanceId());
163+
}
161164
if (queryRequest.getCaseInstanceReferenceId() != null) {
162165
query.caseInstanceReferenceId(queryRequest.getCaseInstanceReferenceId());
163166
}

modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/caze/HistoricCaseInstanceCollectionResource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public class HistoricCaseInstanceCollectionResource extends HistoricCaseInstance
7777
@ApiImplicitParam(name = "state", dataType = "string", value = "Only return historic case instances with the given state.", paramType = "query"),
7878
@ApiImplicitParam(name = "callbackId", dataType = "string", value = "Only return historic case instances which have the given callback id.", paramType = "query"),
7979
@ApiImplicitParam(name = "callbackType", dataType = "string", value = "Only return historic case instances which have the given callback type.", paramType = "query"),
80+
@ApiImplicitParam(name = "parentCaseInstanceId", dataType = "string", value = "Only return historic case instances which have the given parent case instance id.", paramType = "query"),
8081
@ApiImplicitParam(name = "referenceId", dataType = "string", value = "Only return historic case instances which have the given reference id.", paramType = "query"),
8182
@ApiImplicitParam(name = "referenceType", dataType = "string", value = "Only return historic case instances which have the given reference type.", paramType = "query"),
8283
@ApiImplicitParam(name = "lastReactivatedBy", dataType = "string", value = "Only return historic case instances last reactived by the given user.", paramType = "query"),
@@ -203,6 +204,10 @@ public DataResponse<HistoricCaseInstanceResponse> getHistoricCasenstances(@ApiPa
203204
queryRequest.setCaseInstanceCallbackType(allRequestParams.get("callbackType"));
204205
}
205206

207+
if (allRequestParams.containsKey("parentCaseInstanceId")) {
208+
queryRequest.setParentCaseInstanceId(allRequestParams.get("parentCaseInstanceId"));
209+
}
210+
206211
if (allRequestParams.get("referenceId") != null) {
207212
queryRequest.setCaseInstanceReferenceId(allRequestParams.get("referenceId"));
208213
}

modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/caze/HistoricCaseInstanceQueryRequest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public class HistoricCaseInstanceQueryRequest extends PaginateRequest {
5858
private String caseInstanceState;
5959
private String caseInstanceCallbackId;
6060
private String caseInstanceCallbackType;
61+
private String parentCaseInstanceId;
6162
private String caseInstanceReferenceId;
6263
private String caseInstanceReferenceType;
6364
private Boolean finished;
@@ -321,6 +322,14 @@ public void setCaseInstanceCallbackType(String caseInstanceCallbackType) {
321322
this.caseInstanceCallbackType = caseInstanceCallbackType;
322323
}
323324

325+
public String getParentCaseInstanceId() {
326+
return parentCaseInstanceId;
327+
}
328+
329+
public void setParentCaseInstanceId(String parentCaseInstanceId) {
330+
this.parentCaseInstanceId = parentCaseInstanceId;
331+
}
332+
324333
public String getCaseInstanceReferenceId() {
325334
return caseInstanceReferenceId;
326335
}

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
@@ -169,6 +169,9 @@ protected DataResponse<CaseInstanceResponse> getQueryResponse(CaseInstanceQueryR
169169
if (queryRequest.getCaseInstanceCallbackType() != null) {
170170
query.caseInstanceCallbackType(queryRequest.getCaseInstanceCallbackType());
171171
}
172+
if (queryRequest.getParentCaseInstanceId() != null) {
173+
query.parentCaseInstanceId(queryRequest.getParentCaseInstanceId());
174+
}
172175
if (queryRequest.getCaseInstanceReferenceId() != null) {
173176
query.caseInstanceReferenceId(queryRequest.getCaseInstanceReferenceId());
174177
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public class CaseInstanceCollectionResource extends BaseCaseInstanceResource {
8989
@ApiImplicitParam(name = "state", dataType = "string", value = "Only return case instances with the given state.", paramType = "query"),
9090
@ApiImplicitParam(name = "callbackId", dataType = "string", value = "Only return case instances which have the given callback id.", paramType = "query"),
9191
@ApiImplicitParam(name = "callbackType", dataType = "string", value = "Only return case instances which have the given callback type.", paramType = "query"),
92+
@ApiImplicitParam(name = "parentCaseInstanceId", dataType = "string", value = "Only return case instances which have the given parent case instance id.", paramType = "query"),
9293
@ApiImplicitParam(name = "referenceId", dataType = "string", value = "Only return case instances which have the given reference id.", paramType = "query"),
9394
@ApiImplicitParam(name = "referenceType", dataType = "string", value = "Only return case instances which have the given reference type.", paramType = "query"),
9495
@ApiImplicitParam(name = "lastReactivatedBy", dataType = "string", value = "Only return case instances last reactivated by the given user.", paramType = "query"),
@@ -227,6 +228,10 @@ public DataResponse<CaseInstanceResponse> getCaseInstances(@ApiParam(hidden = tr
227228
queryRequest.setCaseInstanceCallbackType(allRequestParams.get("callbackType"));
228229
}
229230

231+
if (allRequestParams.containsKey("parentCaseInstanceId")) {
232+
queryRequest.setParentCaseInstanceId(allRequestParams.get("parentCaseInstanceId"));
233+
}
234+
230235
if (allRequestParams.containsKey("referenceId")) {
231236
queryRequest.setCaseInstanceReferenceId(allRequestParams.get("referenceId"));
232237
}

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
@@ -61,6 +61,7 @@ public class CaseInstanceQueryRequest extends PaginateRequest {
6161
private String involvedUser;
6262
private String caseInstanceCallbackId;
6363
private String caseInstanceCallbackType;
64+
private String parentCaseInstanceId;
6465
private String caseInstanceReferenceId;
6566
private String caseInstanceReferenceType;
6667
private String caseInstanceLastReactivatedBy;
@@ -339,6 +340,14 @@ public void setCaseInstanceCallbackType(String caseInstanceCallbackType) {
339340
this.caseInstanceCallbackType = caseInstanceCallbackType;
340341
}
341342

343+
public String getParentCaseInstanceId() {
344+
return parentCaseInstanceId;
345+
}
346+
347+
public void setParentCaseInstanceId(String parentCaseInstanceId) {
348+
this.parentCaseInstanceId = parentCaseInstanceId;
349+
}
350+
342351
public String getCaseInstanceReferenceId() {
343352
return caseInstanceReferenceId;
344353
}

modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceCollectionResourceTest.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,70 @@ public void testQueryByParentScopeId() throws IOException {
581581

582582
}
583583

584+
@CmmnDeployment(resources = {
585+
"org/flowable/cmmn/rest/service/api/runtime/simpleCaseWithCaseTasks.cmmn",
586+
"org/flowable/cmmn/rest/service/api/runtime/simpleInnerCaseWithCaseTasks.cmmn",
587+
"org/flowable/cmmn/rest/service/api/runtime/simpleInnerCaseWithHumanTasksAndCaseTask.cmmn",
588+
"org/flowable/cmmn/rest/service/api/runtime/oneTaskCase.cmmn"
589+
})
590+
public void testQueryByParentCaseInstanceId() throws IOException {
591+
runtimeService.createCaseInstanceBuilder().caseDefinitionKey("simpleTestCaseWithCaseTasks").start();
592+
CaseInstance caseInstance = runtimeService.createCaseInstanceBuilder().caseDefinitionKey("simpleTestCaseWithCaseTasks").start();
593+
594+
PlanItemInstance oneTaskCasePlanItemInstance = runtimeService.createPlanItemInstanceQuery().caseInstanceId(caseInstance.getId())
595+
.planItemDefinitionId("caseTaskOneTaskCase").singleResult();
596+
597+
PlanItemInstance caseTaskSimpleCaseWithCaseTasksPlanItemInstance = runtimeService.createPlanItemInstanceQuery().caseInstanceId(caseInstance.getId())
598+
.planItemDefinitionId("caseTaskSimpleCaseWithCaseTasks").singleResult();
599+
600+
PlanItemInstance caseTaskWithHumanTasksPlanItemInstance = runtimeService.createPlanItemInstanceQuery()
601+
.caseInstanceId(caseTaskSimpleCaseWithCaseTasksPlanItemInstance.getReferenceId())
602+
.planItemDefinitionId("caseTaskCaseWithHumanTasks").singleResult();
603+
604+
PlanItemInstance oneTaskCase2PlanItemInstance = runtimeService.createPlanItemInstanceQuery()
605+
.caseInstanceId(caseTaskWithHumanTasksPlanItemInstance.getReferenceId())
606+
.planItemDefinitionId("caseTaskOneTaskCase").singleResult();
607+
608+
taskService.createTaskQuery().list().forEach(task -> taskService.complete(task.getId()));
609+
610+
String url = SERVER_URL_PREFIX + CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_HISTORIC_CASE_INSTANCES) + "?parentCaseInstanceId=" + caseInstance.getId();
611+
CloseableHttpResponse response = executeRequest(new HttpGet(url), HttpStatus.SC_OK);
612+
613+
JsonNode responseNode = objectMapper.readTree(response.getEntity().getContent());
614+
closeResponse(response);
615+
assertThatJson(responseNode)
616+
.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER)
617+
.isEqualTo("{"
618+
+ " data: ["
619+
+ " { id: '" + oneTaskCasePlanItemInstance.getReferenceId() + "' },"
620+
+ " { id: '" + caseTaskSimpleCaseWithCaseTasksPlanItemInstance.getReferenceId() + "' }"
621+
+ " ]"
622+
+ "}");
623+
624+
url = SERVER_URL_PREFIX + CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_HISTORIC_CASE_INSTANCES) + "?parentCaseInstanceId=" + oneTaskCasePlanItemInstance.getReferenceId();
625+
response = executeRequest(new HttpGet(url), HttpStatus.SC_OK);
626+
627+
responseNode = objectMapper.readTree(response.getEntity().getContent());
628+
closeResponse(response);
629+
assertThatJson(responseNode)
630+
.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER)
631+
.isEqualTo("{"
632+
+ " data: []"
633+
+ "}");
634+
635+
url = SERVER_URL_PREFIX + CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_HISTORIC_CASE_INSTANCES) + "?parentCaseInstanceId=" + caseTaskSimpleCaseWithCaseTasksPlanItemInstance.getReferenceId();
636+
response = executeRequest(new HttpGet(url), HttpStatus.SC_OK);
637+
638+
responseNode = objectMapper.readTree(response.getEntity().getContent());
639+
closeResponse(response);
640+
assertThatJson(responseNode)
641+
.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER)
642+
.isEqualTo("{"
643+
+ " data: ["
644+
+ " { id: '" + oneTaskCase2PlanItemInstance.getCaseInstanceId() + "' }"
645+
+ " ]"
646+
+ "}");
647+
}
584648

585649
private void assertVariablesPresentInPostDataResponse(String url, String queryParameters, String caseInstanceId, Map<String, Object> expectedVariables)
586650
throws IOException {

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,69 @@ public void testQueryByParentScopeId() throws IOException {
951951
+ "}");
952952

953953
}
954+
955+
@CmmnDeployment(resources = {
956+
"org/flowable/cmmn/rest/service/api/runtime/simpleCaseWithCaseTasks.cmmn",
957+
"org/flowable/cmmn/rest/service/api/runtime/simpleInnerCaseWithCaseTasks.cmmn",
958+
"org/flowable/cmmn/rest/service/api/runtime/simpleInnerCaseWithHumanTasksAndCaseTask.cmmn",
959+
"org/flowable/cmmn/rest/service/api/runtime/oneTaskCase.cmmn"
960+
})
961+
public void testQueryByParentCaseInstanceId() throws IOException {
962+
runtimeService.createCaseInstanceBuilder().caseDefinitionKey("simpleTestCaseWithCaseTasks").start();
963+
CaseInstance caseInstance = runtimeService.createCaseInstanceBuilder().caseDefinitionKey("simpleTestCaseWithCaseTasks").start();
964+
965+
PlanItemInstance oneTaskCasePlanItemInstance = runtimeService.createPlanItemInstanceQuery().caseInstanceId(caseInstance.getId())
966+
.planItemDefinitionId("caseTaskOneTaskCase").singleResult();
967+
968+
PlanItemInstance caseTaskSimpleCaseWithCaseTasksPlanItemInstance = runtimeService.createPlanItemInstanceQuery().caseInstanceId(caseInstance.getId())
969+
.planItemDefinitionId("caseTaskSimpleCaseWithCaseTasks").singleResult();
970+
971+
PlanItemInstance caseTaskWithHumanTasksPlanItemInstance = runtimeService.createPlanItemInstanceQuery()
972+
.caseInstanceId(caseTaskSimpleCaseWithCaseTasksPlanItemInstance.getReferenceId())
973+
.planItemDefinitionId("caseTaskCaseWithHumanTasks").singleResult();
974+
975+
PlanItemInstance oneTaskCase2PlanItemInstance = runtimeService.createPlanItemInstanceQuery()
976+
.caseInstanceId(caseTaskWithHumanTasksPlanItemInstance.getReferenceId())
977+
.planItemDefinitionId("caseTaskOneTaskCase").singleResult();
978+
979+
String url = SERVER_URL_PREFIX + CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?parentCaseInstanceId=" + caseInstance.getId();
980+
CloseableHttpResponse response = executeRequest(new HttpGet(url), HttpStatus.SC_OK);
981+
982+
JsonNode responseNode = objectMapper.readTree(response.getEntity().getContent());
983+
closeResponse(response);
984+
assertThatJson(responseNode)
985+
.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER)
986+
.isEqualTo("{"
987+
+ " data: ["
988+
+ " { id: '" + oneTaskCasePlanItemInstance.getReferenceId() + "' },"
989+
+ " { id: '" + caseTaskSimpleCaseWithCaseTasksPlanItemInstance.getReferenceId() + "' }"
990+
+ " ]"
991+
+ "}");
992+
993+
url = SERVER_URL_PREFIX + CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?parentCaseInstanceId=" + oneTaskCasePlanItemInstance.getReferenceId();
994+
response = executeRequest(new HttpGet(url), HttpStatus.SC_OK);
995+
996+
responseNode = objectMapper.readTree(response.getEntity().getContent());
997+
closeResponse(response);
998+
assertThatJson(responseNode)
999+
.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER)
1000+
.isEqualTo("{"
1001+
+ " data: []"
1002+
+ "}");
1003+
1004+
url = SERVER_URL_PREFIX + CmmnRestUrls.createRelativeResourceUrl(CmmnRestUrls.URL_CASE_INSTANCE_COLLECTION) + "?parentCaseInstanceId=" + caseTaskSimpleCaseWithCaseTasksPlanItemInstance.getReferenceId();
1005+
response = executeRequest(new HttpGet(url), HttpStatus.SC_OK);
1006+
1007+
responseNode = objectMapper.readTree(response.getEntity().getContent());
1008+
closeResponse(response);
1009+
assertThatJson(responseNode)
1010+
.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER)
1011+
.isEqualTo("{"
1012+
+ " data: ["
1013+
+ " { id: '" + oneTaskCase2PlanItemInstance.getCaseInstanceId() + "' }"
1014+
+ " ]"
1015+
+ "}");
1016+
}
9541017

9551018
@CmmnDeployment(resources = { "org/flowable/cmmn/rest/service/api/runtime/caseWithStartFormAndServiceTask.cmmn" })
9561019
public void testAllVariablesAreApplied() {

modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricProcessInstanceBaseResource.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,10 @@ protected DataResponse<HistoricProcessInstanceResponse> getQueryResponse(Histori
216216
query.withoutProcessInstanceCallbackId();
217217
}
218218

219+
if (queryRequest.getParentCaseInstanceId() != null) {
220+
query.parentCaseInstanceId(queryRequest.getParentCaseInstanceId());
221+
}
222+
219223
if (queryRequest.getTenantId() != null) {
220224
query.processInstanceTenantId(queryRequest.getTenantId());
221225
}

0 commit comments

Comments
 (0)