Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public static void main(String[] args) {

@Override
public void run(String... args) throws Exception {

List<Department> departments = Arrays.asList(
new Department("IT", "IT department"),
new Department("RAD", "research and development team"),
Expand All @@ -34,6 +35,8 @@ public void run(String... args) throws Exception {
new Department("AG", "Accounting")
);

employeeRepository.deleteAll();

List<Employee> employees = Arrays.asList(
new Employee("600f4997e3a11bc10091f786","Ferdinand","Wynne","Etiam.ligula.tortor@vestibulumMauris.com",departments.get(0)),
new Employee("600f49a1a5bd0e51ceb6c2d3","Grant","Quinlan","lobortis.ultrices.Vivamus@diamvelarcu.org",departments.get(0)),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.tutorial.springdatamongodbdynamicqueries.exception;

/**
* trigger for bad request exception
*/
public class BadRequestException extends RuntimeException {
public BadRequestException(String msg, Throwable t) {
super(msg, t);
}

public BadRequestException(String msg) {
super(msg);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class GenericFilterCriteriaBuilder {
FILTER_CRITERIA.put("LESS_THAN", condition -> Criteria.where(condition.getField()).lt(condition.getValue()));
FILTER_CRITERIA.put("LESSTHAN_OR_EQUAL_TO", condition -> Criteria.where(condition.getField()).lte(condition.getValue()));
FILTER_CRITERIA.put("CONTAINS", condition -> Criteria.where(condition.getField()).regex((String) condition.getValue()));
FILTER_CRITERIA.put("JOIN", condition -> Criteria.where(condition.getField()).is(new ObjectId((String) condition.getValue())));
FILTER_CRITERIA.put("JOIN", condition -> Criteria.where(condition.getField()).is(condition.getValue()));
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.tutorial.springdatamongodbdynamicqueries.controller.dto.FilterCondition;
import com.tutorial.springdatamongodbdynamicqueries.enums.FilterOperationEnum;
import com.tutorial.springdatamongodbdynamicqueries.exception.BadRequestException;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
Expand All @@ -28,28 +29,32 @@ public class FilterBuilderService {
* @return a list of {@link FilterCondition}
*/
public List<FilterCondition> createFilterCondition(String criteria) {
// TODO ajouter try catch


List<FilterCondition> filters = new ArrayList<>();

if (criteria != null && !criteria.isEmpty()) {
try {

if (criteria != null && !criteria.isEmpty()) {

final String FILTER_SHEARCH_DELIMITER = "&";
final String FILTER_CONDITION_DELIMITER = "\\|";
final String FILTER_SHEARCH_DELIMITER = "&";
final String FILTER_CONDITION_DELIMITER = "\\|";

List<String> values = split(criteria, FILTER_SHEARCH_DELIMITER);
if (!values.isEmpty()) {
values.forEach(x -> {
List<String> filter = split(x, FILTER_CONDITION_DELIMITER);
if (FilterOperationEnum.fromValue(filter.get(1)) != null) {
filters.add(new FilterCondition(filter.get(0), FilterOperationEnum.fromValue(filter.get(1)), filter.get(2)));
}
});
List<String> values = split(criteria, FILTER_SHEARCH_DELIMITER);
if (!values.isEmpty()) {
values.forEach(x -> {
List<String> filter = split(x, FILTER_CONDITION_DELIMITER);
if (FilterOperationEnum.fromValue(filter.get(1)) != null) {
filters.add(new FilterCondition(filter.get(0), FilterOperationEnum.fromValue(filter.get(1)), filter.get(2)));
}
});
}
}

return filters;

} catch (Exception ex) {
throw new BadRequestException("Cannot create condition filter " + ex.getMessage());
}

return filters;
}


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

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

if (order != null && !order.isEmpty()) {
try {
if (order != null && !order.isEmpty()) {

final String FILTER_CONDITION_DELIMITER = "\\|";
final String FILTER_CONDITION_DELIMITER = "\\|";

List<String> values = split(order, FILTER_CONDITION_DELIMITER);
String column = values.get(0);
String sortDirection = values.get(1);
List<String> values = split(order, FILTER_CONDITION_DELIMITER);
String column = values.get(0);
String sortDirection = values.get(1);

if (sortDirection.equalsIgnoreCase("ASC")) {
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.ASC, column));
} else if (sortDirection.equalsIgnoreCase("DESC")) {
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.DESC, column));
} else {
throw new IllegalArgumentException(String.format("Value for param 'order' is not valid : %s , must be 'asc' or 'desc'", sortDirection));
}

if (sortDirection.equalsIgnoreCase("ASC")) {
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.ASC, column));
} else if (sortDirection.equalsIgnoreCase("DESC")) {
return PageRequest.of((currentPage - 1), pageSize, Sort.by(Sort.Direction.DESC, column));
} else {
throw new IllegalArgumentException(String.format("Value for param 'order' is not valid : %s , must be 'asc' or 'desc'", sortDirection));
return PageRequest.of((currentPage - 1), pageSize);
}

}else {
return PageRequest.of((currentPage - 1), pageSize);
} catch (Exception ex) {
throw new BadRequestException("Cannot create condition filter " + ex.getMessage());
}
}




}