Skip to content

Commit 1a516c2

Browse files
authored
Merge pull request #2 from anicetkeric/master
Catch exception filter
2 parents 2f84b6f + d3dd875 commit 1a516c2

File tree

4 files changed

+56
-32
lines changed

4 files changed

+56
-32
lines changed

src/main/java/com/tutorial/springdatamongodbdynamicqueries/SpringDataMongodbDynamicQueriesApplication.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public static void main(String[] args) {
2626

2727
@Override
2828
public void run(String... args) throws Exception {
29+
2930
List<Department> departments = Arrays.asList(
3031
new Department("IT", "IT department"),
3132
new Department("RAD", "research and development team"),
@@ -34,6 +35,8 @@ public void run(String... args) throws Exception {
3435
new Department("AG", "Accounting")
3536
);
3637

38+
employeeRepository.deleteAll();
39+
3740
List<Employee> employees = Arrays.asList(
3841
new Employee("600f4997e3a11bc10091f786","Ferdinand","Wynne","[email protected]",departments.get(0)),
3942
new Employee("600f49a1a5bd0e51ceb6c2d3","Grant","Quinlan","[email protected]",departments.get(0)),
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.tutorial.springdatamongodbdynamicqueries.exception;
2+
3+
/**
4+
* trigger for bad request exception
5+
*/
6+
public class BadRequestException extends RuntimeException {
7+
public BadRequestException(String msg, Throwable t) {
8+
super(msg, t);
9+
}
10+
11+
public BadRequestException(String msg) {
12+
super(msg);
13+
}
14+
15+
}

src/main/java/com/tutorial/springdatamongodbdynamicqueries/repository/support/GenericFilterCriteriaBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class GenericFilterCriteriaBuilder {
3434
FILTER_CRITERIA.put("LESS_THAN", condition -> Criteria.where(condition.getField()).lt(condition.getValue()));
3535
FILTER_CRITERIA.put("LESSTHAN_OR_EQUAL_TO", condition -> Criteria.where(condition.getField()).lte(condition.getValue()));
3636
FILTER_CRITERIA.put("CONTAINS", condition -> Criteria.where(condition.getField()).regex((String) condition.getValue()));
37-
FILTER_CRITERIA.put("JOIN", condition -> Criteria.where(condition.getField()).is(new ObjectId((String) condition.getValue())));
37+
FILTER_CRITERIA.put("JOIN", condition -> Criteria.where(condition.getField()).is(condition.getValue()));
3838
}
3939

4040

src/main/java/com/tutorial/springdatamongodbdynamicqueries/service/FilterBuilderService.java

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.tutorial.springdatamongodbdynamicqueries.controller.dto.FilterCondition;
44
import com.tutorial.springdatamongodbdynamicqueries.enums.FilterOperationEnum;
5+
import com.tutorial.springdatamongodbdynamicqueries.exception.BadRequestException;
56
import org.springframework.data.domain.PageRequest;
67
import org.springframework.data.domain.Sort;
78
import org.springframework.stereotype.Service;
@@ -28,28 +29,32 @@ public class FilterBuilderService {
2829
* @return a list of {@link FilterCondition}
2930
*/
3031
public List<FilterCondition> createFilterCondition(String criteria) {
31-
// TODO ajouter try catch
32-
33-
3432
List<FilterCondition> filters = new ArrayList<>();
3533

36-
if (criteria != null && !criteria.isEmpty()) {
34+
try {
35+
36+
if (criteria != null && !criteria.isEmpty()) {
3737

38-
final String FILTER_SHEARCH_DELIMITER = "&";
39-
final String FILTER_CONDITION_DELIMITER = "\\|";
38+
final String FILTER_SHEARCH_DELIMITER = "&";
39+
final String FILTER_CONDITION_DELIMITER = "\\|";
4040

41-
List<String> values = split(criteria, FILTER_SHEARCH_DELIMITER);
42-
if (!values.isEmpty()) {
43-
values.forEach(x -> {
44-
List<String> filter = split(x, FILTER_CONDITION_DELIMITER);
45-
if (FilterOperationEnum.fromValue(filter.get(1)) != null) {
46-
filters.add(new FilterCondition(filter.get(0), FilterOperationEnum.fromValue(filter.get(1)), filter.get(2)));
47-
}
48-
});
41+
List<String> values = split(criteria, FILTER_SHEARCH_DELIMITER);
42+
if (!values.isEmpty()) {
43+
values.forEach(x -> {
44+
List<String> filter = split(x, FILTER_CONDITION_DELIMITER);
45+
if (FilterOperationEnum.fromValue(filter.get(1)) != null) {
46+
filters.add(new FilterCondition(filter.get(0), FilterOperationEnum.fromValue(filter.get(1)), filter.get(2)));
47+
}
48+
});
49+
}
4950
}
51+
52+
return filters;
53+
54+
} catch (Exception ex) {
55+
throw new BadRequestException("Cannot create condition filter " + ex.getMessage());
5056
}
5157

52-
return filters;
5358
}
5459

5560

@@ -68,33 +73,34 @@ private static List<String> split(String search, String delimiter) {
6873
* @return PageRequest
6974
*/
7075
public PageRequest getPageable(int size, int page, String order) {
71-
// TODO ajouter try catch
7276

7377
int pageSize = (size <= 0) ? DEFAULT_SIZE_PAGE : size;
7478
int currentPage = (page <= 0) ? 1 : page;
7579

76-
if (order != null && !order.isEmpty()) {
80+
try {
81+
if (order != null && !order.isEmpty()) {
7782

78-
final String FILTER_CONDITION_DELIMITER = "\\|";
83+
final String FILTER_CONDITION_DELIMITER = "\\|";
7984

80-
List<String> values = split(order, FILTER_CONDITION_DELIMITER);
81-
String column = values.get(0);
82-
String sortDirection = values.get(1);
85+
List<String> values = split(order, FILTER_CONDITION_DELIMITER);
86+
String column = values.get(0);
87+
String sortDirection = values.get(1);
88+
89+
if (sortDirection.equalsIgnoreCase("ASC")) {
90+
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.ASC, column));
91+
} else if (sortDirection.equalsIgnoreCase("DESC")) {
92+
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.DESC, column));
93+
} else {
94+
throw new IllegalArgumentException(String.format("Value for param 'order' is not valid : %s , must be 'asc' or 'desc'", sortDirection));
95+
}
8396

84-
if (sortDirection.equalsIgnoreCase("ASC")) {
85-
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.ASC, column));
86-
} else if (sortDirection.equalsIgnoreCase("DESC")) {
87-
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.DESC, column));
8897
} else {
89-
throw new IllegalArgumentException(String.format("Value for param 'order' is not valid : %s , must be 'asc' or 'desc'", sortDirection));
98+
return PageRequest.of((currentPage - 1), pageSize);
9099
}
91-
92-
}else {
93-
return PageRequest.of((currentPage - 1), pageSize);
100+
} catch (Exception ex) {
101+
throw new BadRequestException("Cannot create condition filter " + ex.getMessage());
94102
}
95103
}
96104

97105

98-
99-
100106
}

0 commit comments

Comments
 (0)