Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. @Component
  2. public class SearchSpecification {
  3.  
  4. public static Specification<Task> locationNameContains(String location) {
  5. return (root, query, cb) -> cb.like(root.get(Task_.location), "%"+location.toLowerCase()+"%");
  6. }
  7.  
  8. public static Specification<Task> titleContainsQuery(String title) {
  9. return (root, query, cb) -> cb.like(root.get(Task_.title), "%"+ title + "%");
  10. }
  11.  
  12. public static Specification<Task> titleOrDescriptionContains(String searchTerm) {
  13. return (root, query, cb) -> {
  14. query.distinct(true);
  15. return cb.or(
  16. cb.like(root.get(Task_.title), "%"+ searchTerm.toLowerCase() + "%"),
  17. cb.like(root.get(Task_.description), "%"+ searchTerm.toLowerCase() + "%")
  18. );
  19. };
  20. }
  21.  
  22. public static Specification<Task> categoryContains(Category category) {
  23. return (root, query, cb) -> {
  24. query.distinct(true);
  25. return cb.equal(root.get(Task_.category), category);
  26. };
  27. }
  28.  
  29. public List<TaskResponse> searchTasksBySpecification(String query, String category, String location) throws Exception {
  30. ArrayList<TaskResponse> jobs = new ArrayList<>();
  31. Category categoryByTitle = categoryRepository.findByTitle(category);
  32.  
  33. if (query == null &&
  34. category == null &&
  35. location == null) {
  36. taskRepository.findAllByOrderByCreatedDateDesc().forEach(taskEntity -> {
  37. if (taskEntity.getIsOpen()) {
  38. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  39. jobs.add(job);
  40. }
  41. });
  42. return jobs;
  43.  
  44. } else if (category == null && location == null) {
  45. taskRepository.findAll(where(titleOrDescriptionContains(query))).forEach(taskEntity -> {
  46. if (taskEntity.getIsOpen()) {
  47. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  48. jobs.add(job);
  49. }
  50. });
  51. return jobs;
  52.  
  53. } else if (query == null && category == null) {
  54. taskRepository.findAll(where(locationNameContains(location))).forEach(taskEntity -> {
  55. if (taskEntity.getIsOpen()) {
  56. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  57. jobs.add(job);
  58. }
  59. });
  60. return jobs;
  61.  
  62. } else if (query == null && location == null) {
  63. taskRepository.findAll(where(categoryContains(categoryByTitle))).forEach(taskEntity -> {
  64. if (taskEntity.getIsOpen()) {
  65. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  66. jobs.add(job);
  67. }
  68. });
  69. return jobs;
  70.  
  71. } else if (query == null) {
  72. taskRepository.findByCategory_TitleAndLocationOrderByCreatedDateDesc(category, location).forEach(taskEntity -> {
  73. if (taskEntity.getIsOpen()) {
  74. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  75. jobs.add(job);
  76. }
  77. });
  78. return jobs;
  79.  
  80. } else if (category == null) {
  81. taskRepository.findAll(where(titleOrDescriptionContains(query)
  82. .and(locationNameContains(location)))).forEach(taskEntity -> {
  83. if (taskEntity.getIsOpen()) {
  84. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  85. jobs.add(job);
  86. }
  87. });
  88. return jobs;
  89.  
  90. } else if (location == null) {
  91. taskRepository.findAll(where(titleOrDescriptionContains(query)
  92. .and(categoryContains(categoryByTitle)))).forEach(taskEntity -> {
  93. if (taskEntity.getIsOpen()) {
  94. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  95. jobs.add(job);
  96. }
  97. });
  98. return jobs;
  99.  
  100. } else
  101. taskRepository.findAll(where(titleOrDescriptionContains(query)
  102. .and(categoryContains(categoryByTitle))
  103. .and(locationNameContains(location)))).forEach(taskEntity -> {
  104. if (taskEntity.getIsOpen()) {
  105. TaskResponse job = DTOMapper.map(taskEntity, TaskResponse.class);
  106. jobs.add(job);
  107. }
  108. });
  109. return jobs;
  110. }
  111.  
  112. taskRepository.findAll(where(titleOrDescriptionContains(query)
  113. .and(categoryContains(categoryByTitle))
  114. .and(locationNameContains(location))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement