pagination for all and some

main
Julius Sula 2023-05-16 11:19:27 +02:00
parent 2eff488b32
commit c60be5be71
6 changed files with 84 additions and 30 deletions

View File

@ -86,7 +86,7 @@ public class KalenderRestController {
public void getMany() { public void getMany() {
var query = new Query.QueryBuilder("ASF:WI_CFG_CIMaintenanceRel").addFieldId("something", 666000001).build(); var query = new Query.QueryBuilder("ASF:WI_CFG_CIMaintenanceRel").addFieldId("something", 666000001).build();
try { 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()); System.out.println(entries.size());
} catch (ARException e) { } catch (ARException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block

View File

@ -209,32 +209,66 @@ public class RemedyJavaAPI {
} else { } else {
sortOrder.add(sorting); sortOrder.add(sorting);
} }
// Retrieve entries from the form using the given // Retrieve entries from the form using the given
// qualification. // qualification.
var settingMaxEntries = new int[] { Constants.AR_SERVER_INFO_MAX_ENTRIES }; var settingMaxEntries = new int[] { Constants.AR_SERVER_INFO_MAX_ENTRIES };
var serverSettings = server.getServerInfo(settingMaxEntries); var serverSettings = server.getServerInfo(settingMaxEntries);
var maxEntriesNumber = serverSettings.get(Constants.AR_SERVER_INFO_MAX_ENTRIES).getIntValue(); 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<Entry> getAllListEntryObjects(QualifierInfo qual, String formName,
List<SortInfo> sortOrder, int[] fieldIds, OutputInteger nMatches, int maxEntriesNumber) throws ARException {
List<Entry> entries = new ArrayList<Entry>(); List<Entry> entries = new ArrayList<Entry>();
List<Entry> fetched = new ArrayList<Entry>(); List<Entry> fetched = new ArrayList<Entry>();
var toFetchNumber = maxEntriesNumber; var sliceStart = 0;
if (sliceEnd != 0) {
toFetchNumber = sliceEnd;
}
do { do {
fetched = server.getListEntryObjects( fetched = server.getListEntryObjects(
formName, qual, sliceStart, formName, qual, sliceStart, 0,
sliceEnd,
sortOrder, fieldIds, true, nMatches); sortOrder, fieldIds, true, nMatches);
sliceStart += fetched.size();
entries.addAll(fetched); entries.addAll(fetched);
sliceStart = entries.size();
if (sliceEnd != 0) { } while (fetched.size() == maxEntriesNumber);
toFetchNumber = toFetchNumber - entries.size();
}
} while (fetched.size() == toFetchNumber);
return entries; return entries;
}
private List<Entry> getSomeListEntryObjects(int sliceStart, int sliceEnd, QualifierInfo qual, String formName,
List<SortInfo> sortOrder, int[] fieldIds, OutputInteger nMatches, int maxEntriesNumber) throws ARException {
List<Entry> entries = new ArrayList<Entry>();
List<Entry> fetched = new ArrayList<Entry>();
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<Field> 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();
} }
/** /**

View File

@ -20,6 +20,7 @@ import com.bmc.arsys.api.Timestamp;
import com.bmc.arsys.api.Value; import com.bmc.arsys.api.Value;
import com.nttdata.calender.api.Query; import com.nttdata.calender.api.Query;
import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.api.RemedyJavaAPI;
import com.nttdata.calender.changes.query.Filter;
/** /**
* Class representing the change with all of the change specific attributes. * 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 // constructs set of supportGroups and full name of impersonated User
Set<String> peopleSupportGroup = peopleInfos.stream() String[] peopleSupportGroup = peopleInfos.stream()
.map(entry -> entry.get(queryPerson.getFieldId("SupportGroupId")).toString()) .map(entry -> entry.get(queryPerson.getFieldId("SupportGroupId")).toString())
.collect(Collectors.toSet()); .toArray(String[]::new);
var peopleFullName = peopleInfos.get(0).get(queryPerson.getFieldId("FullName")).toString(); var peopleFullName = peopleInfos.get(0).get(queryPerson.getFieldId("FullName")).toString();
request.addFilter(
new Filter("SupportGroupId", "equals", peopleSupportGroup));
var qualifier = ""; var qualifier = "";
if (request.getFilter() != null) { if (request.getFilter() != null) {
qualifier = request.constructQualifier(queryChange, api); qualifier = request.constructQualifier(queryChange, api);
@ -105,8 +109,8 @@ public class Change {
this.queryChange.getFormName(), this.queryChange.getFormName(),
request.getSort().getSortInfo(queryChange), request.getSliceStart(), request.getSort().getSortInfo(queryChange), request.getSliceStart(),
request.getSliceEnd()); 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<ChangeItem>(); var changes = new ArrayList<ChangeItem>();
entries.forEach(entry -> { entries.forEach(entry -> {
var change = new ChangeItem(entry.getEntryId()); var change = new ChangeItem(entry.getEntryId());
@ -142,7 +146,7 @@ public class Change {
api.freeImpersonatedUser(); api.freeImpersonatedUser();
return new ChangeResponse(entries.size(), changes); return new ChangeResponse(entriesSize, changes);
} }
/** /**

View File

@ -1,5 +1,7 @@
package com.nttdata.calender.changes; package com.nttdata.calender.changes;
import java.util.ArrayList;
import com.bmc.arsys.api.ARException; import com.bmc.arsys.api.ARException;
import com.nttdata.calender.api.Query; import com.nttdata.calender.api.Query;
import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.api.RemedyJavaAPI;
@ -14,7 +16,7 @@ import com.nttdata.calender.changes.query.Sort;
public class ChangeRequest { public class ChangeRequest {
private int sliceStart; private int sliceStart;
private int sliceEnd; private int sliceEnd;
private Filter[] filter; private ArrayList<Filter> filter;
private Sort sort; private Sort sort;
/** /**
@ -58,7 +60,7 @@ public class ChangeRequest {
* *
* @return an array of {@link Filter} objects representing the filter criteria. * @return an array of {@link Filter} objects representing the filter criteria.
*/ */
public Filter[] getFilter() { public ArrayList<Filter> getFilter() {
return this.filter; return this.filter;
} }
@ -68,7 +70,7 @@ public class ChangeRequest {
* @param filter an array of {@link Filter} objects representing the filter * @param filter an array of {@link Filter} objects representing the filter
* criteria. * criteria.
*/ */
public void setFilter(Filter[] filter) { public void setFilter(ArrayList<Filter> filter) {
this.filter = filter; this.filter = filter;
} }
@ -90,6 +92,13 @@ public class ChangeRequest {
this.sort = sort; this.sort = sort;
} }
public void addFilter(Filter filter) {
if (this.filter == null) {
this.filter = new ArrayList<Filter>();
}
this.filter.add(filter);
}
/** /**
* Constructs a qualifier based on the filters defined in the object and the * Constructs a qualifier based on the filters defined in the object and the
* given Query object. * given Query object.
@ -105,14 +114,14 @@ public class ChangeRequest {
public String constructQualifier(Query query, RemedyJavaAPI api) throws ARException { public String constructQualifier(Query query, RemedyJavaAPI api) throws ARException {
var qualifier = ""; var qualifier = "";
for (int i = 0; i < this.filter.length; i++) { for (int i = 0; i < this.filter.size(); i++) {
var column = this.filter[i].getColumn(); var column = this.filter.get(i).getColumn();
if (!column.isEmpty()) { if (!column.isEmpty()) {
var inner_qualifier = ""; var inner_qualifier = "";
if (column.equals("D2")) { if (column.equals("D2")) {
var startFrom = filter[i].getCriteria()[0]; var startFrom = filter.get(i).getCriteria()[0];
var startTo = filter[i].getCriteria()[1]; var startTo = filter.get(i).getCriteria()[1];
if (!startFrom.isEmpty() && !startTo.isEmpty()) { if (!startFrom.isEmpty() && !startTo.isEmpty()) {
var dateColumn = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); var dateColumn = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column));
@ -132,11 +141,11 @@ public class ChangeRequest {
column = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); column = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column));
var inner_filter = "\'" + column + "\' "; var inner_filter = "\'" + column + "\' ";
var criterias = filter[i].getCriteria(); var criterias = filter.get(i).getCriteria();
var inner_concat = " OR "; var inner_concat = " OR ";
var inner_criteria_prefix = ""; var inner_criteria_prefix = "";
switch (filter[i].getFilter()) { switch (filter.get(i).getFilter()) {
case "equals": case "equals":
inner_filter += "= "; inner_filter += "= ";
break; break;
@ -158,7 +167,7 @@ public class ChangeRequest {
} }
qualifier += "(" + inner_qualifier + ")"; qualifier += "(" + inner_qualifier + ")";
if (i < filter.length - 1) { if (i < filter.size() - 1) {
qualifier += " AND "; qualifier += " AND ";
} }
} }

View File

@ -1,4 +1,5 @@
package com.nttdata.calender.changes.query; package com.nttdata.calender.changes.query;
import com.nttdata.calender.changes.Change; import com.nttdata.calender.changes.Change;
/** /**
@ -9,6 +10,12 @@ public class Filter {
private String filter; private String filter;
private String[] criteria; 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} * Returns column of {@link Filter}
* *

View File

@ -2,7 +2,7 @@
<Configuration status="info"> <Configuration status="info">
<Appenders> <Appenders>
<RollingFile name="application" <RollingFile name="application"
fileName="./backend/log/application.log" filePattern="log/application-%d{yyyy-MM-dd-HH-mm}-%i.log"> fileName="./backend/log/application.log" filePattern="application-%d{yyyy-MM-dd-HH-mm}-%i.log">
<PatternLayout> <PatternLayout>
<Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full}</Pattern> <Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full}</Pattern>
</PatternLayout> </PatternLayout>
@ -11,7 +11,7 @@
</Policies> </Policies>
</RollingFile> </RollingFile>
<RollingFile name="error" <RollingFile name="error"
fileName="./backend/log/error.log" filePattern="log/error-%d{yyyy-MM-dd-HH-mm}-%i.log"> fileName="./backend/log/error.log" filePattern="error-%d{yyyy-MM-dd-HH-mm}-%i.log">
<PatternLayout> <PatternLayout>
<Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full}</Pattern> <Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full}</Pattern>
</PatternLayout> </PatternLayout>
@ -20,7 +20,7 @@
</Policies> </Policies>
</RollingFile> </RollingFile>
<RollingFile name="warn" <RollingFile name="warn"
fileName="./backend/log/warn.log" filePattern="log/warn-%d{yyyy-MM-dd-HH-mm}-%i.log"> fileName="./backend/log/warn.log" filePattern="warn-%d{yyyy-MM-dd-HH-mm}-%i.log">
<PatternLayout> <PatternLayout>
<Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n</Pattern> <Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n</Pattern>
</PatternLayout> </PatternLayout>