Skip to content

Commit 9050bcd

Browse files
implements Grid SD Load Services in Java (#770)
Issue: 104658 Co-authored-by: claudiamurialdo <33756655+claudiamurialdo@users.noreply.github.com>
1 parent a54b7d8 commit 9050bcd

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.genexus;
2+
3+
import com.genexus.diagnostics.core.ILogger;
4+
import com.genexus.diagnostics.core.LogManager;
5+
import com.genexus.webpanels.HttpContextWeb;
6+
7+
public abstract class GXDataGridProcedure extends GXProcedure{
8+
9+
private static final ILogger logger = LogManager.getLogger(GXDataGridProcedure.class);
10+
11+
private static final String HAS_NEXT_PAGE = "HasNextPage";
12+
private static final String RECORD_COUNT = "RecordCount";
13+
private static final String RECORD_COUNT_SUPPORTED = "RecordCountSupported";
14+
private long totalRecordCount = -1;
15+
16+
public GXDataGridProcedure(int remoteHandle, ModelContext context, String location) {
17+
super(false, remoteHandle, context, location);
18+
}
19+
20+
protected long recordCount(){
21+
return -1;
22+
}
23+
24+
protected boolean recordCountSupported(){
25+
return true;
26+
}
27+
28+
protected void setPaginationHeaders(boolean hasNextPage) {
29+
try {
30+
setHasNextPageHeader(hasNextPage);
31+
setRecordCountSupportedHeader();
32+
}
33+
catch (Exception ex) {
34+
logger.warn("A processing error occurred while setting pagination headers", ex);
35+
}
36+
}
37+
38+
private void setRecordCountSupportedHeader() {
39+
if (!recordCountSupported()) {
40+
logger.debug("Adding '{RECORD_COUNT_SUPPORTED}' header");
41+
((HttpContextWeb) context.getHttpContext()).setHeader(RECORD_COUNT_SUPPORTED, String.valueOf(false));
42+
}
43+
}
44+
45+
private void setHasNextPageHeader(boolean hasNextPage) {
46+
((HttpContextWeb) context.getHttpContext()).setHeader(HAS_NEXT_PAGE, String.valueOf(hasNextPage));
47+
}
48+
49+
private void setRecordCountHeader() {
50+
boolean recordCountHeaderRequired = false;
51+
boolean setHeader = false;
52+
if (context.getHttpContext() != null) {
53+
recordCountHeaderRequired = !context.getHttpContext().getHeader(RECORD_COUNT).isEmpty();
54+
}
55+
if (totalRecordCount != -1) {
56+
setHeader = true;
57+
}
58+
else if (recordCountHeaderRequired) {
59+
totalRecordCount = recordCount();
60+
setHeader = true;
61+
}
62+
if (setHeader) {
63+
logger.debug("Adding '{RECORD_COUNT}' header: " + totalRecordCount);
64+
((HttpContextWeb) context.getHttpContext()).setHeader(RECORD_COUNT, String.valueOf(totalRecordCount));
65+
}
66+
}
67+
68+
protected long getPaginationStart(long start, long count) {
69+
if (start < 0) { //last page
70+
totalRecordCount = recordCount();
71+
long lastPageRecords = totalRecordCount % count;
72+
if (lastPageRecords == 0)
73+
start = totalRecordCount - count;
74+
else
75+
start = totalRecordCount - lastPageRecords;
76+
}
77+
setRecordCountHeader();
78+
return start;
79+
}
80+
}

0 commit comments

Comments
 (0)