Skip to content

Commit 7d1a9ee

Browse files
author
gustavnavar
committed
Fix error for columns with initial and extended sortings
1 parent 9b85880 commit 7d1a9ee

1 file changed

Lines changed: 37 additions & 89 deletions

File tree

gridcore/src/main/java/me/agno/gridcore/sorting/SortProcessor.java

Lines changed: 37 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ public List<Order> process(List<Order> orderList) {
3636
if (this.process != null)
3737
return this.process.apply(orderList);
3838

39+
if (orderList == null)
40+
orderList = new ArrayList<>();
41+
3942
var sortValues = this.settings.getSortValues();
4043
if (sortValues != null && !sortValues.isEmpty()) {
4144

@@ -46,103 +49,48 @@ public int compare(ColumnOrderValue c1, ColumnOrderValue c2) {
4649
}
4750
}).toList();
4851

49-
var firstSortedColumn = sortedColumns.get(0);
50-
var gridColumn = this.grid.getColumns().values().stream()
51-
.filter(c -> Objects.equals(c.getName().toUpperCase(),
52-
firstSortedColumn.getColumnName().toUpperCase()))
53-
.findFirst();
54-
if(gridColumn.isEmpty())
55-
return orderList;
56-
57-
var columnOrderer = gridColumn.get().getOrderers().get(0);
58-
var order = columnOrderer.applyOrder(this.grid.getCriteriaBuilder(), this.grid.getRoot(),
59-
firstSortedColumn.getDirection());
60-
if (order != null) {
61-
if (orderList == null)
62-
orderList = new ArrayList<>();
63-
orderList.add(order);
64-
}
52+
for(var sortedColumn : sortedColumns) {
53+
54+
var column = this.grid.getColumns().values().stream()
55+
.filter(r -> Objects.equals(r.getName().toUpperCase(),
56+
sortedColumn.getColumnName().toUpperCase())).findFirst();
57+
if(column.isEmpty() || column.get().getOrderers().isEmpty())
58+
continue;
6559

66-
for (int i = 1; i < gridColumn.get().getOrderers().size(); i++) {
67-
var orderer = gridColumn.get().getOrderers().get(i);
68-
order = orderer.applyOrder(this.grid.getCriteriaBuilder(), this.grid.getRoot(), GridSortDirection.ASCENDING);
69-
if (order != null) {
70-
if (orderList == null)
71-
orderList = new ArrayList<>();
60+
var order = column.get().getOrderers().get(0).applyOrder(this.grid.getCriteriaBuilder(),
61+
this.grid.getRoot(), sortedColumn.getDirection());
62+
if (order != null && orderList.stream()
63+
.noneMatch(r -> r.getExpression().equals(order.getExpression()))) {
7264
orderList.add(order);
7365
}
74-
}
75-
76-
if(sortedColumns.size() > 1) {
77-
for(int i = 1; i < sortedColumns.size(); i++) {
78-
79-
int finalI = i;
80-
var gridCol = this.grid.getColumns().values().stream()
81-
.filter(r -> Objects.equals(r.getName().toUpperCase(),
82-
sortedColumns.get(finalI).getColumnName().toUpperCase())).findFirst();
83-
if(gridCol.isEmpty() || gridCol.get().getOrderers().isEmpty())
84-
continue;
85-
86-
order = gridCol.get().getOrderers().get(0).applyOrder(this.grid.getCriteriaBuilder(),
87-
this.grid.getRoot(), sortedColumns.get(finalI).getDirection());
88-
if (order != null) {
89-
if (orderList == null)
90-
orderList = new ArrayList<>();
91-
orderList.add(order);
92-
}
9366

94-
for (int j = 1; j < gridCol.get().getOrderers().size(); j++) {
95-
var orderer = gridCol.get().getOrderers().get(j);
96-
order = orderer.applyOrder(this.grid.getCriteriaBuilder(), this.grid.getRoot(),
97-
GridSortDirection.ASCENDING);
98-
if (order != null) {
99-
if (orderList == null)
100-
orderList = new ArrayList<>();
101-
orderList.add(order);
102-
}
67+
for (var orderer : column.get().getOrderers()) {
68+
var order2 = orderer.applyOrder(this.grid.getCriteriaBuilder(), this.grid.getRoot(),
69+
GridSortDirection.ASCENDING);
70+
if (order2 != null && orderList.stream()
71+
.noneMatch(r -> r.getExpression().equals(order2.getExpression()))) {
72+
orderList.add(order2);
10373
}
10474
}
10575
}
106-
107-
if (this.settings.getColumnName() == null || this.settings.getColumnName().isEmpty())
108-
return orderList;
109-
110-
//determine gridColumn sortable:
111-
gridColumn = this.grid.getColumns().values().stream()
112-
.filter(c -> Objects.equals(c.getName().toUpperCase(),
113-
this.settings.getColumnName().toUpperCase())).findFirst();
114-
if (gridColumn.isEmpty() || !gridColumn.get().isSortEnabled())
115-
return orderList;
116-
117-
for (var colOrderer : gridColumn.get().getOrderers()) {
118-
order = colOrderer.applyOrder(this.grid.getCriteriaBuilder(), this.grid.getRoot(),
119-
this.settings.getDirection());
120-
if (order != null) {
121-
if (orderList == null)
122-
orderList = new ArrayList<>();
123-
orderList.add(order);
124-
}
125-
}
12676
}
127-
else {
128-
if (this.settings.getColumnName() == null || this.settings.getColumnName().isEmpty())
129-
return orderList;
130-
131-
//determine gridColumn sortable:
132-
var gridColumn = this.grid.getColumns().values().stream()
133-
.filter(c -> Objects.equals(c.getName().toUpperCase(),
134-
this.settings.getColumnName().toUpperCase())).findFirst();
135-
if (gridColumn.isEmpty() || !gridColumn.get().isSortEnabled())
136-
return orderList;
137-
138-
for (var columnOrderer : gridColumn.get().getOrderers()) {
139-
var order = columnOrderer.applyOrder(this.grid.getCriteriaBuilder(), this.grid.getRoot(),
140-
this.settings.getDirection());
141-
if (order != null) {
142-
if (orderList == null)
143-
orderList = new ArrayList<>();
144-
orderList.add(order);
145-
}
77+
78+
if (this.settings.getColumnName() == null || this.settings.getColumnName().isEmpty())
79+
return orderList;
80+
81+
//determine gridColumn sortable:
82+
var column = this.grid.getColumns().values().stream()
83+
.filter(c -> Objects.equals(c.getName().toUpperCase(),
84+
this.settings.getColumnName().toUpperCase())).findFirst();
85+
if (column.isEmpty() || !column.get().isSortEnabled())
86+
return orderList;
87+
88+
for (var colOrderer : column.get().getOrderers()) {
89+
var order = colOrderer.applyOrder(this.grid.getCriteriaBuilder(), this.grid.getRoot(),
90+
this.settings.getDirection());
91+
if (order != null && orderList.stream()
92+
.noneMatch(r -> r.getExpression().equals(order.getExpression()))) {
93+
orderList.add(order);
14694
}
14795
}
14896
return orderList;

0 commit comments

Comments
 (0)