From 5e7e929b501b98112a62eff0a35402eeb4691962 Mon Sep 17 00:00:00 2001 From: zef Date: Mon, 31 Mar 2025 19:54:00 -0700 Subject: [PATCH 1/5] Add DataTables serverside endpoint --- .../java/jpl/cws/controller/RestService.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/cws-service/src/main/java/jpl/cws/controller/RestService.java b/cws-service/src/main/java/jpl/cws/controller/RestService.java index 8c563402..8b5f8e97 100644 --- a/cws-service/src/main/java/jpl/cws/controller/RestService.java +++ b/cws-service/src/main/java/jpl/cws/controller/RestService.java @@ -1259,6 +1259,56 @@ public GsonUTCDateAdapter() { } } + /** + * REST method used to get Processes table JSON serverside + * + */ + @RequestMapping(value = "/processes/getInstancesCamundaServerSide", method = GET, produces="application/json") + public @ResponseBody String getProcessInstancesCamundaServerSide( + @RequestParam(value = "start", required=true) int start, + @RequestParam(value = "length", required=true) int length, + @RequestParam(value = "draw", required=true) int draw, + @RequestParam(value = "order[0][column]", required=true) int sortColIndex, + @RequestParam(value = "order[0][dir]", required=true) String order, + @RequestParam(value = "columns[0][data]", required=true) String col0DataAttrName, + @RequestParam(value = "superProcInstId", required=false) String superProcInstId, + @RequestParam(value = "procInstId", required=false) String procInstId, + @RequestParam(value = "procDefKey", required=false) String procDefKey, + @RequestParam(value = "minDate", required=false) String minDate, + @RequestParam(value = "maxDate", required=false) String maxDate, + @RequestParam(value = "status", required=false) String status, + @RequestParam(value = "dateOrderBy", required=false, defaultValue="DESC") String dateOrderBy + ) { + + List instances = null; + try { + + Integer pageNum = start/length + 1; + + dateOrderBy = dateOrderBy.toUpperCase(); + if (!dateOrderBy.equals("DESC") && !dateOrderBy.equals("ASC")) { + log.error("Invalid dateOrderBy of " + dateOrderBy + "! Forcing to be 'DESC'"); + dateOrderBy = "DESC"; + } + + log.debug("REST: getProcessInstances (superProcInstId='" + superProcInstId + + "', procInstId='" + procInstId + + "', procDefKey='"+procDefKey+ + "', status='"+status+"', minDate="+minDate+", maxDate="+maxDate+ + ", dateOrderBy="+dateOrderBy+")"); + + instances = cwsConsoleService.getFilteredProcessInstancesCamunda( + superProcInstId, procInstId, procDefKey, status, minDate, maxDate, dateOrderBy, pageNum); + + } + catch (Exception e) { + log.error("Problem getting process instance information!", e); + // return an empty set + return new GsonBuilder().setPrettyPrinting().create().toJson(new ArrayList()); + } + return new GsonBuilder().serializeNulls().create().toJson(instances); + } + /** * REST method used to get Processes table JSON * From a8c96db1515ea60dc56a0c2d08d2099a7873f102 Mon Sep 17 00:00:00 2001 From: zef Date: Tue, 1 Apr 2025 21:33:53 -0700 Subject: [PATCH 2/5] Send back required params to client for datatable server side pagination --- .../java/jpl/cws/controller/RestService.java | 24 ++++++---- .../cws/scheduler/CwsProcessInstancesDTO.java | 44 +++++++++++++++++++ 2 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 cws-service/src/main/java/jpl/cws/scheduler/CwsProcessInstancesDTO.java diff --git a/cws-service/src/main/java/jpl/cws/controller/RestService.java b/cws-service/src/main/java/jpl/cws/controller/RestService.java index 8b5f8e97..b6b1da55 100644 --- a/cws-service/src/main/java/jpl/cws/controller/RestService.java +++ b/cws-service/src/main/java/jpl/cws/controller/RestService.java @@ -70,6 +70,7 @@ import jpl.cws.process.initiation.CwsProcessInitiator; import jpl.cws.process.initiation.InitiatorsService; import jpl.cws.scheduler.CwsProcessInstance; +import jpl.cws.scheduler.CwsProcessInstancesDTO; import jpl.cws.scheduler.LogHistory; import jpl.cws.scheduler.Scheduler; import jpl.cws.service.CwsConsoleService; @@ -1268,6 +1269,7 @@ public GsonUTCDateAdapter() { @RequestParam(value = "start", required=true) int start, @RequestParam(value = "length", required=true) int length, @RequestParam(value = "draw", required=true) int draw, + @RequestParam(value = "size", required=true) int size, @RequestParam(value = "order[0][column]", required=true) int sortColIndex, @RequestParam(value = "order[0][dir]", required=true) String order, @RequestParam(value = "columns[0][data]", required=true) String col0DataAttrName, @@ -1281,6 +1283,7 @@ public GsonUTCDateAdapter() { ) { List instances = null; + CwsProcessInstancesDTO instancesDTO = new CwsProcessInstancesDTO(); try { Integer pageNum = start/length + 1; @@ -1291,22 +1294,25 @@ public GsonUTCDateAdapter() { dateOrderBy = "DESC"; } - log.debug("REST: getProcessInstances (superProcInstId='" + superProcInstId + - "', procInstId='" + procInstId + - "', procDefKey='"+procDefKey+ - "', status='"+status+"', minDate="+minDate+", maxDate="+maxDate+ - ", dateOrderBy="+dateOrderBy+")"); instances = cwsConsoleService.getFilteredProcessInstancesCamunda( superProcInstId, procInstId, procDefKey, status, minDate, maxDate, dateOrderBy, pageNum); - + + instancesDTO.setData(instances); + log.debug("REST: getInstancesCamundaServerSide (superProcInstId='" + superProcInstId + + "', procInstId='" + procInstId + + "', procDefKey='"+procDefKey+ + "', status='"+status+"', minDate="+minDate+", maxDate="+maxDate+ + ", dateOrderBy="+dateOrderBy+ "size=" + size + "number of instances retrieved="+ instances.size() + ")"); } catch (Exception e) { log.error("Problem getting process instance information!", e); - // return an empty set - return new GsonBuilder().setPrettyPrinting().create().toJson(new ArrayList()); + instancesDTO.setData(new ArrayList()); } - return new GsonBuilder().serializeNulls().create().toJson(instances); + instancesDTO.setRecordsFiltered(size); + instancesDTO.setRecordsTotal(size); // Needed to show Pagination in Datatable + instancesDTO.setDraw(draw); + return new GsonBuilder().serializeNulls().create().toJson(instancesDTO); } /** diff --git a/cws-service/src/main/java/jpl/cws/scheduler/CwsProcessInstancesDTO.java b/cws-service/src/main/java/jpl/cws/scheduler/CwsProcessInstancesDTO.java new file mode 100644 index 00000000..dc69a5d8 --- /dev/null +++ b/cws-service/src/main/java/jpl/cws/scheduler/CwsProcessInstancesDTO.java @@ -0,0 +1,44 @@ +package jpl.cws.scheduler; + +import java.util.List; + + +public class CwsProcessInstancesDTO { + public int draw; + public int recordsTotal; + public int recordsFiltered; + + public List data; + + public int getDraw() { + return draw; + } + + public void setDraw(int draw) { + this.draw = draw; + } + + public int getRecordsTotal() { + return recordsTotal; + } + + public void setRecordsTotal(int recordsTotal) { + this.recordsTotal = recordsTotal; + } + + public int getRecordsFiltered() { + return recordsFiltered; + } + + public void setRecordsFiltered(int recordsFiltered) { + this.recordsFiltered = recordsFiltered; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } +} From e8b2b675784bedf64711f6f3a8770513ba80ad24 Mon Sep 17 00:00:00 2001 From: zef Date: Wed, 2 Apr 2025 17:33:42 -0700 Subject: [PATCH 3/5] Fix page number --- .../src/main/java/jpl/cws/controller/RestService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cws-service/src/main/java/jpl/cws/controller/RestService.java b/cws-service/src/main/java/jpl/cws/controller/RestService.java index b6b1da55..0c4cd479 100644 --- a/cws-service/src/main/java/jpl/cws/controller/RestService.java +++ b/cws-service/src/main/java/jpl/cws/controller/RestService.java @@ -1286,7 +1286,7 @@ public GsonUTCDateAdapter() { CwsProcessInstancesDTO instancesDTO = new CwsProcessInstancesDTO(); try { - Integer pageNum = start/length + 1; + Integer pageNum = start/length; dateOrderBy = dateOrderBy.toUpperCase(); if (!dateOrderBy.equals("DESC") && !dateOrderBy.equals("ASC")) { @@ -1303,7 +1303,8 @@ public GsonUTCDateAdapter() { "', procInstId='" + procInstId + "', procDefKey='"+procDefKey+ "', status='"+status+"', minDate="+minDate+", maxDate="+maxDate+ - ", dateOrderBy="+dateOrderBy+ "size=" + size + "number of instances retrieved="+ instances.size() + ")"); + "', start='"+ start+"',lenght='"+ length + "', pageNum='" + pageNum +"'," + + ", dateOrderBy="+dateOrderBy+ "size=" + size + " number of instances retrieved="+ instances.size() + ")"); } catch (Exception e) { log.error("Problem getting process instance information!", e); From 4dc5ef4af1465dc61c0e6a67ebfb2d49253336a3 Mon Sep 17 00:00:00 2001 From: zef Date: Wed, 9 Apr 2025 16:09:04 -0700 Subject: [PATCH 4/5] Move common code to a common function for maintanability --- .../java/jpl/cws/controller/RestService.java | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/cws-service/src/main/java/jpl/cws/controller/RestService.java b/cws-service/src/main/java/jpl/cws/controller/RestService.java index 0c4cd479..84c55bdd 100644 --- a/cws-service/src/main/java/jpl/cws/controller/RestService.java +++ b/cws-service/src/main/java/jpl/cws/controller/RestService.java @@ -1260,6 +1260,22 @@ public GsonUTCDateAdapter() { } } + private List getCwsProcessInstances(Integer pageNum, String superProcInstId, String procInstId, + String status, String procDefKey, String minDate, String maxDate,String dateOrderBy) { + List instances = null; + dateOrderBy = dateOrderBy.toUpperCase(); + + if (!dateOrderBy.equals("DESC") && !dateOrderBy.equals("ASC")) { + log.error("Invalid dateOrderBy of " + dateOrderBy + "! Forcing to be 'DESC'"); + dateOrderBy = "DESC"; + } + + instances = cwsConsoleService.getFilteredProcessInstancesCamunda( + superProcInstId, procInstId, procDefKey, status, minDate, maxDate, dateOrderBy, pageNum); + + return instances; + } + /** * REST method used to get Processes table JSON serverside * @@ -1282,22 +1298,12 @@ public GsonUTCDateAdapter() { @RequestParam(value = "dateOrderBy", required=false, defaultValue="DESC") String dateOrderBy ) { - List instances = null; + CwsProcessInstancesDTO instancesDTO = new CwsProcessInstancesDTO(); try { Integer pageNum = start/length; - - dateOrderBy = dateOrderBy.toUpperCase(); - if (!dateOrderBy.equals("DESC") && !dateOrderBy.equals("ASC")) { - log.error("Invalid dateOrderBy of " + dateOrderBy + "! Forcing to be 'DESC'"); - dateOrderBy = "DESC"; - } - - - instances = cwsConsoleService.getFilteredProcessInstancesCamunda( - superProcInstId, procInstId, procDefKey, status, minDate, maxDate, dateOrderBy, pageNum); - + List instances = getCwsProcessInstances(pageNum, superProcInstId, procInstId, status, procDefKey, minDate, maxDate, dateOrderBy); instancesDTO.setData(instances); log.debug("REST: getInstancesCamundaServerSide (superProcInstId='" + superProcInstId + "', procInstId='" + procInstId + @@ -1333,26 +1339,19 @@ public GsonUTCDateAdapter() { @RequestParam(value = "maxReturn", required=false, defaultValue="5000") String maxReturn ) { - List instances = null; + List instances; try { Integer pageNum = Integer.parseInt(page); Integer intMaxReturn = Integer.parseInt(maxReturn); - dateOrderBy = dateOrderBy.toUpperCase(); - if (!dateOrderBy.equals("DESC") && !dateOrderBy.equals("ASC")) { - log.error("Invalid dateOrderBy of " + dateOrderBy + "! Forcing to be 'DESC'"); - dateOrderBy = "DESC"; - } - log.debug("REST: getProcessInstances (superProcInstId='" + superProcInstId + "', procInstId='" + procInstId + "', procDefKey='"+procDefKey+ "', status='"+status+"', minDate="+minDate+", maxDate="+maxDate+ ", dateOrderBy="+dateOrderBy+")"); - instances = cwsConsoleService.getFilteredProcessInstancesCamunda( - superProcInstId, procInstId, procDefKey, status, minDate, maxDate, dateOrderBy, pageNum); + instances = getCwsProcessInstances(pageNum, superProcInstId, procInstId, status, procDefKey, minDate, maxDate, dateOrderBy); if ((intMaxReturn != -1) && (instances.size() > intMaxReturn)) { instances = instances.subList(0, intMaxReturn); From 639c1de506bfdd9f835694a4ebfaaf671b797dcc Mon Sep 17 00:00:00 2001 From: zef Date: Wed, 9 Apr 2025 16:11:27 -0700 Subject: [PATCH 5/5] Cleanup --- .../src/main/java/jpl/cws/controller/RestService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cws-service/src/main/java/jpl/cws/controller/RestService.java b/cws-service/src/main/java/jpl/cws/controller/RestService.java index 84c55bdd..d07bbdf8 100644 --- a/cws-service/src/main/java/jpl/cws/controller/RestService.java +++ b/cws-service/src/main/java/jpl/cws/controller/RestService.java @@ -1262,7 +1262,7 @@ public GsonUTCDateAdapter() { private List getCwsProcessInstances(Integer pageNum, String superProcInstId, String procInstId, String status, String procDefKey, String minDate, String maxDate,String dateOrderBy) { - List instances = null; + dateOrderBy = dateOrderBy.toUpperCase(); if (!dateOrderBy.equals("DESC") && !dateOrderBy.equals("ASC")) { @@ -1270,7 +1270,7 @@ private List getCwsProcessInstances(Integer pageNum, String dateOrderBy = "DESC"; } - instances = cwsConsoleService.getFilteredProcessInstancesCamunda( + List instances = cwsConsoleService.getFilteredProcessInstancesCamunda( superProcInstId, procInstId, procDefKey, status, minDate, maxDate, dateOrderBy, pageNum); return instances; @@ -1323,7 +1323,7 @@ private List getCwsProcessInstances(Integer pageNum, String } /** - * REST method used to get Processes table JSON + * REST method used to get Processes table JSON clientside * */ @RequestMapping(value = "/processes/getInstancesCamunda", method = GET, produces="application/json")