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() {
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

View File

@ -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<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> fetched = new ArrayList<Entry>();
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<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.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<String> 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<ChangeItem>();
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);
}
/**

View File

@ -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> 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<Filter> 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> 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<Filter>();
}
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 ";
}
}

View File

@ -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}
*

View File

@ -2,7 +2,7 @@
<Configuration status="info">
<Appenders>
<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>
<Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full}</Pattern>
</PatternLayout>
@ -11,7 +11,7 @@
</Policies>
</RollingFile>
<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>
<Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n%ex{full}</Pattern>
</PatternLayout>
@ -20,7 +20,7 @@
</Policies>
</RollingFile>
<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>
<Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n</Pattern>
</PatternLayout>