Skip to content

Commit 3417974

Browse files
author
Sebastian Lang
committed
Refactoring: fix some warnings
1 parent 46bcfd5 commit 3417974

File tree

2 files changed

+45
-52
lines changed

2 files changed

+45
-52
lines changed

src/main/java/org/springframework/data/mongodb/datatables/DataTablesCriteria.java

+20-22
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.springframework.data.mongodb.datatables;
22

3+
import lombok.Getter;
34
import org.springframework.beans.BeanUtils;
45
import org.springframework.data.annotation.Id;
56
import org.springframework.data.domain.Sort;
@@ -33,20 +34,21 @@
3334
import static org.springframework.util.StringUtils.hasText;
3435

3536
final class DataTablesCriteria<T> {
36-
private Map<String, String> resolvedColumn = new HashMap<>();
37-
private Aggregation aggregation;
37+
private final Map<String, String> resolvedColumn = new HashMap<>();
38+
private final Aggregation aggregation;
3839

39-
private Aggregation filteredCountAggregation;
40-
private int filteredCountAggregationOperationCount;
40+
private final Aggregation filteredCountAggregation;
41+
@Getter
42+
private final int filteredCountAggregationOperationCount;
4143

42-
private Fields allClassFields;
44+
private final Fields allClassFields;
4345
private String originalIdField;
4446

45-
private Map<String, DataTablesInput.SearchConfiguration.ColumnSearchConfiguration> columnSearchConfiguration;
46-
private List<String> excludedColumns;
47-
private List<String> dateProjectionColumns = new ArrayList<>();
47+
private final Map<String, DataTablesInput.SearchConfiguration.ColumnSearchConfiguration> columnSearchConfiguration;
48+
private final List<String> dateProjectionColumns = new ArrayList<>();
4849

4950
DataTablesCriteria(DataTablesInput input, Criteria additionalCriteria, Criteria preFilteringCriteria, Class<T> classType) {
51+
List<String> excludedColumns;
5052
if (input.getSearchConfiguration() != null) {
5153
columnSearchConfiguration = input.getSearchConfiguration().getColumnSearchConfiguration();
5254
excludedColumns = input.getSearchConfiguration().getExcludedColumns();
@@ -65,7 +67,7 @@ final class DataTablesCriteria<T> {
6567

6668
setDeclaredIdField(classType);
6769

68-
if (!StringUtils.isEmpty(originalIdField)) {
70+
if (StringUtils.hasText(originalIdField)) {
6971
input.getColumn(originalIdField).ifPresent(c -> {
7072

7173
DataTablesInput.SearchConfiguration.ColumnSearchConfiguration searchConfig = columnSearchConfiguration.get(c.getData());
@@ -127,7 +129,7 @@ final class DataTablesCriteria<T> {
127129

128130
aggregation = Aggregation.newAggregation(aggregationOperations);
129131

130-
if (!StringUtils.isEmpty(originalIdField)) {
132+
if (StringUtils.hasText(originalIdField)) {
131133
input.getColumn("_id").ifPresent(c -> {
132134
c.setData(originalIdField);
133135
input.setColumns(input.getColumns());
@@ -259,7 +261,7 @@ private MatchOperation addColumnCriteria(DataTablesInput.Column column) {
259261
if (column.isSearchable() && hasText(column.getSearch().getValue())) {
260262
List<Criteria> criteria = createCriteria(column, column.getSearch());
261263
if (criteria.size() == 1) {
262-
return Aggregation.match(criteria.get(0));
264+
return Aggregation.match(criteria.getFirst());
263265
} else if (criteria.size() >= 2) {
264266
return Aggregation.match(new Criteria().orOperator(criteria.toArray(new Criteria[0])));
265267
}
@@ -337,7 +339,7 @@ private List<AggregationOperation> addSort(DataTablesInput input) {
337339
.filter(order -> isOrderable(input, order))
338340
.map(order -> toOrder(input, order)).collect(toList());
339341

340-
if (orders.size() != 0) {
342+
if (!orders.isEmpty()) {
341343
operations.add(Aggregation.sort(by(orders)));
342344
}
343345

@@ -360,7 +362,7 @@ private boolean isOrderable(DataTablesInput input, DataTablesInput.Order order)
360362
if (columnSearchConfiguration.containsKey(column.getData())) {
361363
DataTablesInput.SearchConfiguration.ColumnSearchConfiguration searchConfig = columnSearchConfiguration.get(column.getData());
362364
return isWithinBounds && column.isOrderable()
363-
&& (!searchConfig.isReference() || !StringUtils.isEmpty(searchConfig.getReferenceOrderColumn()));
365+
&& (!searchConfig.isReference() || StringUtils.hasText(searchConfig.getReferenceOrderColumn()));
364366
} else {
365367
return isWithinBounds && column.isOrderable();
366368
}
@@ -382,16 +384,16 @@ private Sort.Order toOrder(DataTablesInput input, DataTablesInput.Order order) {
382384

383385
private String getResolvedRefColumn(DataTablesInput.Column c, List<String> columnStrings) {
384386

385-
String resolvedColumn = c.getData();
387+
StringBuilder resolvedColumn = new StringBuilder(c.getData());
386388
boolean columnAlreadyExists;
387389

388390
do {
389-
resolvedColumn += "_";
390-
String columnName = resolvedColumn;
391+
resolvedColumn.append("_");
392+
String columnName = resolvedColumn.toString();
391393
columnAlreadyExists = columnStrings.stream().anyMatch(s -> s.startsWith(columnName));
392394
} while (columnAlreadyExists);
393395

394-
return resolvedColumn;
396+
return resolvedColumn.toString();
395397
}
396398

397399
public Aggregation toAggregation() {
@@ -402,10 +404,6 @@ public Aggregation toFilteredCountAggregation() {
402404
return filteredCountAggregation;
403405
}
404406

405-
public int getFilteredCountAggregationOperationCount() {
406-
return filteredCountAggregationOperationCount;
407-
}
408-
409407
private AggregationOperation createFieldProjection(DataTablesInput input) {
410408
List<String> columnStrings = input.getColumns().stream()
411409
.map(column -> column.getData().contains(".") ? column.getData().substring(0, column.getData().indexOf(".")) : column.getData())
@@ -417,7 +415,7 @@ private AggregationOperation createFieldProjection(DataTablesInput input) {
417415

418416
/**
419417
* Use official getFields method to list all fields of the class.
420-
* Source: https://github.com/spring-projects/spring-data-mongodb/blob/1a5de2e1db939f7b35579f11815894fd637fc227/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperationContext.java#L88
418+
* Source: <a href="https://github.com/spring-projects/spring-data-mongodb/blob/1a5de2e1db939f7b35579f11815894fd637fc227/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/AggregationOperationContext.java#L88">...</a>
421419
*
422420
* @return Class fields
423421
*/

src/main/java/org/springframework/data/mongodb/datatables/DataTablesRepositoryImpl.java

+25-30
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package org.springframework.data.mongodb.datatables;
22

33
import org.bson.Document;
4-
import org.springframework.data.mongodb.core.MongoOperations;
54
import org.springframework.data.mongodb.core.MongoTemplate;
65
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
76
import org.springframework.data.mongodb.core.query.Criteria;
8-
import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
7+
import org.springframework.data.mongodb.repository.support.MappingMongoEntityInformation;
98
import org.springframework.data.mongodb.repository.support.SimpleMongoRepository;
109

1110
import java.io.Serializable;
@@ -18,19 +17,19 @@
1817
final class DataTablesRepositoryImpl<T, ID extends Serializable> extends SimpleMongoRepository<T, ID>
1918
implements DataTablesRepository<T, ID> {
2019

21-
private final MongoEntityInformation<T, ID> metadata;
22-
private final MongoOperations mongoOperations;
20+
private final MappingMongoEntityInformation<T, ID> metadata;
21+
private final MongoTemplate mongoTemplate;
2322

2423
/**
25-
* Creates a new {@link SimpleMongoRepository} for the given {@link MongoEntityInformation} and {@link MongoTemplate}.
24+
* Creates a new {@link SimpleMongoRepository} for the given {@link MappingMongoEntityInformation} and {@link MongoTemplate}.
2625
*
2726
* @param metadata must not be {@literal null}.
28-
* @param mongoOperations must not be {@literal null}.
27+
* @param mongoTemplate must not be {@literal null}.
2928
*/
30-
public DataTablesRepositoryImpl(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
31-
super(metadata, mongoOperations);
29+
public DataTablesRepositoryImpl(MappingMongoEntityInformation<T, ID> metadata, MongoTemplate mongoTemplate) {
30+
super(metadata, mongoTemplate);
3231
this.metadata = metadata;
33-
this.mongoOperations = mongoOperations;
32+
this.mongoTemplate = mongoTemplate;
3433
}
3534

3635
@Override
@@ -72,13 +71,13 @@ public <R> DataTablesOutput<R> findAll(DataTablesInput input, Criteria additiona
7271
return output;
7372
}
7473

75-
DataTablesCriteria refCriteria = new DataTablesCriteria(input, additionalCriteria, preFilteringCriteria, metadata.getJavaType());
74+
DataTablesCriteria<T> refCriteria = new DataTablesCriteria<>(input, additionalCriteria, preFilteringCriteria, metadata.getJavaType());
7675
long recordsFiltered = 0;
7776

7877
if (!isFilteredCountNecessary(refCriteria, preFilteringCriteria)) {
7978
recordsFiltered = recordsTotal;
8079
} else {
81-
AggregationResults<Document> result = mongoOperations.aggregate(refCriteria.toFilteredCountAggregation(), metadata.getCollectionName(), Document.class);
80+
AggregationResults<Document> result = mongoTemplate.aggregate(refCriteria.toFilteredCountAggregation(), metadata.getCollectionName(), Document.class);
8281
if (result.getUniqueMappedResult() != null) {
8382
recordsFiltered = (Integer) result.getUniqueMappedResult().get("filtered_count");
8483
}
@@ -88,7 +87,8 @@ public <R> DataTablesOutput<R> findAll(DataTablesInput input, Criteria additiona
8887
return output;
8988
}
9089

91-
AggregationResults<T> data = mongoOperations.aggregate(refCriteria.toAggregation(), metadata.getCollectionName(), metadata.getJavaType());
90+
AggregationResults<T> data = mongoTemplate.aggregate(refCriteria.toAggregation(), metadata.getCollectionName(), metadata.getJavaType());
91+
9292
output.setData(converter == null ? (List<R>) data.getMappedResults() : data.getMappedResults().stream().map(converter).collect(toList()));
9393

9494
} catch (Exception e) {
@@ -109,9 +109,9 @@ private long count(Criteria preFilteringCriteria) {
109109
// 2. Case: Prefilter
110110
// If there is a prefilter that needs to be applied, it can be accelerated via database index, so both cases are reasonably fast.
111111
if (preFilteringCriteria == null || preFilteringCriteria.equals(new Criteria())) {
112-
return mongoOperations.estimatedCount(metadata.getCollectionName());
112+
return mongoTemplate.estimatedCount(metadata.getCollectionName());
113113
} else {
114-
return mongoOperations.count(query(preFilteringCriteria), metadata.getCollectionName());
114+
return mongoTemplate.count(query(preFilteringCriteria), metadata.getCollectionName());
115115
}
116116
}
117117

@@ -125,21 +125,16 @@ private boolean containsReferenceColumn(DataTablesInput input, Criteria criteria
125125
.anyMatch(c -> c.getValue().isReference() && criteria.getCriteriaObject().containsKey(c.getKey()));
126126
}
127127

128-
private boolean isFilteredCountNecessary(DataTablesCriteria refCriteria, Criteria preFilterCriteria) {
129-
130-
if (refCriteria.getFilteredCountAggregationOperationCount() == 1 ||
131-
refCriteria.getFilteredCountAggregationOperationCount() == 2 && preFilterCriteria != null && !preFilterCriteria.equals(new Criteria())) {
132-
// 1. Case
133-
// Only the count operation was added, thus it is a total count of documents and already done in the "count"-function.
134-
135-
// 2. Case
136-
// Two aggregation operations were added.
137-
// If preFilterCriteria is set it must be in the filtered account aggregation.
138-
// Thus, if it is set and there are two operations, these have to be preFilter + Count
139-
// -> already calculated with count(preFilteringCriteria)
140-
return false;
141-
}
142-
143-
return true;
128+
private boolean isFilteredCountNecessary(DataTablesCriteria<T> refCriteria, Criteria preFilterCriteria) {
129+
130+
// 1. Case
131+
// Only the count operation was added, thus it is a total count of documents and already done in the "count"-function.
132+
// 2. Case
133+
// Two aggregation operations were added.
134+
// If preFilterCriteria is set it must be in the filtered account aggregation.
135+
// Thus, if it is set and there are two operations, these have to be preFilter + Count
136+
// -> already calculated with count(preFilteringCriteria)
137+
return refCriteria.getFilteredCountAggregationOperationCount() != 1 &&
138+
(refCriteria.getFilteredCountAggregationOperationCount() != 2 || preFilterCriteria == null || preFilterCriteria.equals(new Criteria()));
144139
}
145140
}

0 commit comments

Comments
 (0)