pagination for all and some
parent
2eff488b32
commit
c60be5be71
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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 ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue