SearchController.java
package edu.rit.coopeval.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import edu.rit.coopeval.dao.*;
import edu.rit.coopeval.model.*;
import edu.rit.coopeval.search.Search;
import edu.rit.coopeval.security.SecurityUser;
import edu.rit.coopeval.viewmodel.search.SearchCriteriaViewModel;
import edu.rit.coopeval.viewmodel.search.SearchResultViewModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/services/SearchService")
public class SearchController {
@Autowired
private TermRepository termRepo;
@Autowired
private DepartmentRepository departmentRepo;
@Autowired
private DepartmentUserJoinRepository departmentUserJoinRepo;
@Autowired
private EvaluationStatusRepository evalStatusRepo;
@Autowired
private EvaluationApprovalStatusRepository evalApprovalStatusRepo;
@Autowired
private Search search;
@RequestMapping(value = "/getSearchResults", method = RequestMethod.POST)
public List<SearchResultViewModel> getSearchResults(@RequestBody SearchCriteriaViewModel searchCriteriaViewModel) {
ArrayList<SearchResultViewModel> results = new ArrayList<SearchResultViewModel>();
for (Evaluation eval : search.searchEvaluations(searchCriteriaViewModel)) {
results.add(new SearchResultViewModel(eval));
}
return results;
}
@RequestMapping(value = "/getSearchCriteria", method = RequestMethod.GET)
public SearchCriteriaViewModel getSearchCriteria(@AuthenticationPrincipal SecurityUser sUser) {
User currentUser = sUser.user();
SearchCriteriaViewModel criteria = null;
switch (currentUser.getRoles().stream().findFirst().get().getRole()) {
case "Administrator":
criteria = new SearchCriteriaViewModel(termRepo.findAll(), departmentRepo.findAll(),
evalStatusRepo.findAll(), evalApprovalStatusRepo.findAll());
break;
case "Evaluator":
List<Department> departments = departmentUserJoinRepo
.findDepartmentsByDepartmentUserName(currentUser.getUsername())
.stream()
.map(DepartmentUserJoin::getDepartment)
.collect(Collectors.toList());
criteria = new SearchCriteriaViewModel(termRepo.findAll(), departments,
evalStatusRepo.findAll(), evalApprovalStatusRepo.findAll());
break;
}
return criteria;
}
}