Skip to content

Commit 093d168

Browse files
author
gustavnavar
committed
Add support for totals to additional date types
1 parent e56cc53 commit 093d168

1 file changed

Lines changed: 62 additions & 5 deletions

File tree

gridcore/src/main/java/me/agno/gridcore/totals/TotalsProcessor.java

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,6 @@ public void process(Predicate predicate) {
6363

6464
var type = gridColumn.getTargetType();
6565

66-
// java.sql.Date, java.sql.Time and java.sql.Timestamp,
67-
// LocalDate, LocalDateTime and ZonedDateTime are not Comparable
68-
6966
if (type == Byte.class || type == BigDecimal.class || type == BigInteger.class ||
7067
type == Integer.class || type == Short.class || type == Double.class ||
7168
type == Long.class || type == Float.class) {
@@ -82,6 +79,36 @@ public void process(Predicate predicate) {
8279
if (gridColumn.isMinEnabled())
8380
gridColumn.setMinValue(new Total(getMin(expression, this.grid)));
8481
}
82+
else if (type == java.sql.Time.class) {
83+
gridColumn.setSumEnabled(false);
84+
gridColumn.setAverageEnabled(false);
85+
86+
if (gridColumn.isMaxEnabled())
87+
gridColumn.setMaxValue(new Total(getGreatest(expression, this.grid, java.sql.Time.class)));
88+
89+
if (gridColumn.isMinEnabled())
90+
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, java.sql.Time.class)));
91+
}
92+
else if (type == java.sql.Date.class) {
93+
gridColumn.setSumEnabled(false);
94+
gridColumn.setAverageEnabled(false);
95+
96+
if (gridColumn.isMaxEnabled())
97+
gridColumn.setMaxValue(new Total(getGreatest(expression, this.grid, java.sql.Date.class)));
98+
99+
if (gridColumn.isMinEnabled())
100+
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, java.sql.Date.class)));
101+
}
102+
else if (type == java.sql.Timestamp.class) {
103+
gridColumn.setSumEnabled(false);
104+
gridColumn.setAverageEnabled(false);
105+
106+
if (gridColumn.isMaxEnabled())
107+
gridColumn.setMaxValue(new Total(getGreatest(expression, this.grid, java.sql.Timestamp.class)));
108+
109+
if (gridColumn.isMinEnabled())
110+
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, java.sql.Timestamp.class)));
111+
}
85112
else if (type == Date.class) {
86113
gridColumn.setSumEnabled(false);
87114
gridColumn.setAverageEnabled(false);
@@ -122,6 +149,26 @@ else if (type == LocalTime.class) {
122149
if (gridColumn.isMinEnabled())
123150
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, LocalTime.class)));
124151
}
152+
else if (type == LocalDate.class) {
153+
gridColumn.setSumEnabled(false);
154+
gridColumn.setAverageEnabled(false);
155+
156+
if (gridColumn.isMaxEnabled())
157+
gridColumn.setMaxValue(new Total(getGreatest(expression, this.grid, LocalDate.class)));
158+
159+
if (gridColumn.isMinEnabled())
160+
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, LocalDate.class)));
161+
}
162+
else if (type == LocalDateTime.class) {
163+
gridColumn.setSumEnabled(false);
164+
gridColumn.setAverageEnabled(false);
165+
166+
if (gridColumn.isMaxEnabled())
167+
gridColumn.setMaxValue(new Total(getGreatest(expression, this.grid, LocalDateTime.class)));
168+
169+
if (gridColumn.isMinEnabled())
170+
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, LocalDateTime.class)));
171+
}
125172
else if (type == OffsetTime.class) {
126173
gridColumn.setSumEnabled(false);
127174
gridColumn.setAverageEnabled(false);
@@ -142,6 +189,16 @@ else if (type == OffsetDateTime.class) {
142189
if (gridColumn.isMinEnabled())
143190
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, OffsetDateTime.class)));
144191
}
192+
else if (type == ZonedDateTime.class) {
193+
gridColumn.setSumEnabled(false);
194+
gridColumn.setAverageEnabled(false);
195+
196+
if (gridColumn.isMaxEnabled())
197+
gridColumn.setMaxValue(new Total(getGreatest(expression, this.grid, ZonedDateTime.class)));
198+
199+
if (gridColumn.isMinEnabled())
200+
gridColumn.setMinValue(new Total(getLeast(expression, this.grid, ZonedDateTime.class)));
201+
}
145202
else if (type == String.class) {
146203
gridColumn.setSumEnabled(false);
147204
gridColumn.setAverageEnabled(false);
@@ -284,7 +341,7 @@ private Number getMin(String expression, IGrid<T> grid) {
284341
return grid.getEntityManager().createQuery(totalQuery).getSingleResult();
285342
}
286343

287-
private <TData extends Comparable<TData>> TData getGreatest(String expression, IGrid<T> grid, Class<TData> type) {
344+
private <TData extends Comparable<? super TData>> TData getGreatest(String expression, IGrid<T> grid, Class<TData> type) {
288345

289346
var gridQuery = (SqmSelectStatement) grid.getCriteriaQuery();
290347
var gridQuerySpec = gridQuery.getQuerySpec();
@@ -305,7 +362,7 @@ private <TData extends Comparable<TData>> TData getGreatest(String expression, I
305362
return grid.getEntityManager().createQuery(totalQuery).getSingleResult();
306363
}
307364

308-
private <TData extends Comparable<TData>> TData getLeast(String expression, IGrid<T> grid, Class<TData> type) {
365+
private <TData extends Comparable<? super TData>> TData getLeast(String expression, IGrid<T> grid, Class<TData> type) {
309366

310367
var gridQuery = (SqmSelectStatement) grid.getCriteriaQuery();
311368
var gridQuerySpec = gridQuery.getQuerySpec();

0 commit comments

Comments
 (0)