From c60be5be71837305aff766335e05526abf042c7f Mon Sep 17 00:00:00 2001 From: Julius Sula Date: Tue, 16 May 2023 11:19:27 +0200 Subject: [PATCH] pagination for all and some --- .../calender/api/KalenderRestController.java | 2 +- .../nttdata/calender/api/RemedyJavaAPI.java | 56 +++++++++++++++---- .../com/nttdata/calender/changes/Change.java | 14 +++-- .../calender/changes/ChangeRequest.java | 29 ++++++---- .../calender/changes/query/Filter.java | 7 +++ backend/src/main/resources/log4j2.xml | 6 +- 6 files changed, 84 insertions(+), 30 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index 9c5abb7..a8feb77 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -86,7 +86,7 @@ public class KalenderRestController { public void getMany() { var query = new Query.QueryBuilder("ASF:WI_CFG_CIMaintenanceRel").addFieldId("something", 666000001).build(); try { - var entries = javaAPI.queryFieldsById("", query.getFieldIds(), query.getFormName(), null, 0, 2003); + var entries = javaAPI.queryFieldsById("", query.getFieldIds(), query.getFormName(), null, 0, 0); System.out.println(entries.size()); } catch (ARException e) { // TODO Auto-generated catch block diff --git a/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java b/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java index dc871e1..273fac4 100644 --- a/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java +++ b/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java @@ -209,32 +209,66 @@ public class RemedyJavaAPI { } else { sortOrder.add(sorting); } + // Retrieve entries from the form using the given // qualification. var settingMaxEntries = new int[] { Constants.AR_SERVER_INFO_MAX_ENTRIES }; var serverSettings = server.getServerInfo(settingMaxEntries); var maxEntriesNumber = serverSettings.get(Constants.AR_SERVER_INFO_MAX_ENTRIES).getIntValue(); + if (sliceEnd == 0) { + return getAllListEntryObjects(qual, formName, sortOrder, fieldIds, nMatches, + maxEntriesNumber); + } + return getSomeListEntryObjects(sliceStart, sliceEnd, qual, formName, sortOrder, fieldIds, nMatches, + maxEntriesNumber); + } + + private List getAllListEntryObjects(QualifierInfo qual, String formName, + List sortOrder, int[] fieldIds, OutputInteger nMatches, int maxEntriesNumber) throws ARException { List entries = new ArrayList(); List fetched = new ArrayList(); - var toFetchNumber = maxEntriesNumber; - if (sliceEnd != 0) { - toFetchNumber = sliceEnd; - } + var sliceStart = 0; do { fetched = server.getListEntryObjects( - formName, qual, sliceStart, - sliceEnd, + formName, qual, sliceStart, 0, sortOrder, fieldIds, true, nMatches); + sliceStart += fetched.size(); entries.addAll(fetched); - sliceStart = entries.size(); - if (sliceEnd != 0) { - toFetchNumber = toFetchNumber - entries.size(); - } - } while (fetched.size() == toFetchNumber); + + } while (fetched.size() == maxEntriesNumber); return entries; + } + private List getSomeListEntryObjects(int sliceStart, int sliceEnd, QualifierInfo qual, String formName, + List sortOrder, int[] fieldIds, OutputInteger nMatches, int maxEntriesNumber) throws ARException { + List entries = new ArrayList(); + List fetched = new ArrayList(); + var remainder = sliceEnd % maxEntriesNumber; + var loop = sliceEnd / maxEntriesNumber; + + for (int i = 0; i < loop; i++) { + fetched = server.getListEntryObjects( + formName, qual, sliceStart, 0, + sortOrder, fieldIds, true, nMatches); + entries.addAll(fetched); + sliceStart += fetched.size(); + } + entries.addAll(server.getListEntryObjects( + formName, qual, sliceStart, remainder, + sortOrder, fieldIds, true, nMatches)); + + return entries; + } + + public int getFormSize(String qualStr, String formName) throws ARException { + List fields = server.getListFieldObjects(formName); + QualifierInfo qual = server.parseQualification(qualStr, + fields, null, Constants.AR_QUALCONTEXT_DEFAULT); + var statistics = server.getEntryStatistics(server.getForm(formName).getKey(), qual, null, + Constants.AR_STAT_OP_COUNT, null); + return statistics.get(0).getResult().getIntValue(); } /** diff --git a/backend/src/main/java/com/nttdata/calender/changes/Change.java b/backend/src/main/java/com/nttdata/calender/changes/Change.java index 16a73c7..618d7c8 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/Change.java +++ b/backend/src/main/java/com/nttdata/calender/changes/Change.java @@ -20,6 +20,7 @@ import com.bmc.arsys.api.Timestamp; import com.bmc.arsys.api.Value; import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; +import com.nttdata.calender.changes.query.Filter; /** * Class representing the change with all of the change specific attributes. @@ -91,11 +92,14 @@ public class Change { } // constructs set of supportGroups and full name of impersonated User - Set peopleSupportGroup = peopleInfos.stream() + String[] peopleSupportGroup = peopleInfos.stream() .map(entry -> entry.get(queryPerson.getFieldId("SupportGroupId")).toString()) - .collect(Collectors.toSet()); + .toArray(String[]::new); var peopleFullName = peopleInfos.get(0).get(queryPerson.getFieldId("FullName")).toString(); + request.addFilter( + new Filter("SupportGroupId", "equals", peopleSupportGroup)); + var qualifier = ""; if (request.getFilter() != null) { qualifier = request.constructQualifier(queryChange, api); @@ -105,8 +109,8 @@ public class Change { this.queryChange.getFormName(), request.getSort().getSortInfo(queryChange), request.getSliceStart(), request.getSliceEnd()); - entries.removeIf(entry -> !peopleSupportGroup.contains(getValueStringByID(entry, "SupportGroupId"))); - + var entriesSize = api.getFormSize(qualifier, this.queryChange.getFormName()); + System.out.println(entriesSize); var changes = new ArrayList(); entries.forEach(entry -> { var change = new ChangeItem(entry.getEntryId()); @@ -142,7 +146,7 @@ public class Change { api.freeImpersonatedUser(); - return new ChangeResponse(entries.size(), changes); + return new ChangeResponse(entriesSize, changes); } /** diff --git a/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java b/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java index ec19d44..895451f 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java +++ b/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java @@ -1,5 +1,7 @@ package com.nttdata.calender.changes; +import java.util.ArrayList; + import com.bmc.arsys.api.ARException; import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; @@ -14,7 +16,7 @@ import com.nttdata.calender.changes.query.Sort; public class ChangeRequest { private int sliceStart; private int sliceEnd; - private Filter[] filter; + private ArrayList filter; private Sort sort; /** @@ -58,7 +60,7 @@ public class ChangeRequest { * * @return an array of {@link Filter} objects representing the filter criteria. */ - public Filter[] getFilter() { + public ArrayList getFilter() { return this.filter; } @@ -68,7 +70,7 @@ public class ChangeRequest { * @param filter an array of {@link Filter} objects representing the filter * criteria. */ - public void setFilter(Filter[] filter) { + public void setFilter(ArrayList filter) { this.filter = filter; } @@ -90,6 +92,13 @@ public class ChangeRequest { this.sort = sort; } + public void addFilter(Filter filter) { + if (this.filter == null) { + this.filter = new ArrayList(); + } + this.filter.add(filter); + } + /** * Constructs a qualifier based on the filters defined in the object and the * given Query object. @@ -105,14 +114,14 @@ public class ChangeRequest { public String constructQualifier(Query query, RemedyJavaAPI api) throws ARException { var qualifier = ""; - for (int i = 0; i < this.filter.length; i++) { - var column = this.filter[i].getColumn(); + for (int i = 0; i < this.filter.size(); i++) { + var column = this.filter.get(i).getColumn(); if (!column.isEmpty()) { var inner_qualifier = ""; if (column.equals("D2")) { - var startFrom = filter[i].getCriteria()[0]; - var startTo = filter[i].getCriteria()[1]; + var startFrom = filter.get(i).getCriteria()[0]; + var startTo = filter.get(i).getCriteria()[1]; if (!startFrom.isEmpty() && !startTo.isEmpty()) { var dateColumn = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); @@ -132,11 +141,11 @@ public class ChangeRequest { column = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); var inner_filter = "\'" + column + "\' "; - var criterias = filter[i].getCriteria(); + var criterias = filter.get(i).getCriteria(); var inner_concat = " OR "; var inner_criteria_prefix = ""; - switch (filter[i].getFilter()) { + switch (filter.get(i).getFilter()) { case "equals": inner_filter += "= "; break; @@ -158,7 +167,7 @@ public class ChangeRequest { } qualifier += "(" + inner_qualifier + ")"; - if (i < filter.length - 1) { + if (i < filter.size() - 1) { qualifier += " AND "; } } diff --git a/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java b/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java index 96411df..6f85879 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java +++ b/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java @@ -1,4 +1,5 @@ package com.nttdata.calender.changes.query; + import com.nttdata.calender.changes.Change; /** @@ -9,6 +10,12 @@ public class Filter { private String filter; private String[] criteria; + public Filter(String column, String filter, String[] criteria) { + this.column = column; + this.filter = filter; + this.criteria = criteria; + } + /** * Returns column of {@link Filter} * diff --git a/backend/src/main/resources/log4j2.xml b/backend/src/main/resources/log4j2.xml index f883f82..7e72545 100644 --- a/backend/src/main/resources/log4j2.xml +++ b/backend/src/main/resources/log4j2.xml @@ -2,7 +2,7 @@ + fileName="./backend/log/application.log" filePattern="application-%d{yyyy-MM-dd-HH-mm}-%i.log"> %d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full} @@ -11,7 +11,7 @@ + fileName="./backend/log/error.log" filePattern="error-%d{yyyy-MM-dd-HH-mm}-%i.log"> %d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full} @@ -20,7 +20,7 @@ + fileName="./backend/log/warn.log" filePattern="warn-%d{yyyy-MM-dd-HH-mm}-%i.log"> %d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n