Search.java

package edu.rit.coopeval.search;

import edu.rit.coopeval.model.Evaluation;
import edu.rit.coopeval.dao.EvaluationRepository;
import edu.rit.coopeval.viewmodel.search.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by mhickson on 3/12/15.
 */
@Component
public class Search {
    @Autowired(required = true)
    private EvaluationRepository evalRepo;
    private String studentFirstNameCriteria;
    private String studentLastNameCriteria;
    private String studentIdCriteria;
    private String companyNameCriteria;
    private String advisorDCECriteria;
    private List<String> termCriteria;
    private List<String> departmentCriteria;
    private List<String> studentEvalStatusCriteria;
    private List<String> approvalStatusCriteria;
    private List<String> employerEvalStatusCriteria;

    public Search(){}

    public List<Evaluation> searchEvaluations(SearchCriteriaViewModel searchCriteriaViewModel){
        this.studentFirstNameCriteria = this.createStudentFirstNameCriteria(searchCriteriaViewModel.getStudentFirstName());
        this.studentLastNameCriteria = this.createStudentLastNameCriteria(searchCriteriaViewModel.getStudentLastName());
        this.studentIdCriteria = this.createStudentIdCriteria(searchCriteriaViewModel.getStudentId());
        this.companyNameCriteria = this.createCompanyNameCriteria(searchCriteriaViewModel.getCompanyName());
        this.advisorDCECriteria = this.createAdvisorDCECriteria(searchCriteriaViewModel.getAdvisorDCE());
        this.termCriteria = this.createTermCriteria(searchCriteriaViewModel.getTerms());
        this.departmentCriteria = this.createDepartmentCriteria(searchCriteriaViewModel.getDepartments());
        this.studentEvalStatusCriteria = this.createEvalStatusCriteria(searchCriteriaViewModel.getStudentEvalStatusList());
        this.approvalStatusCriteria = this.createApprovalStatusCriteria(searchCriteriaViewModel.getApprovalStatusList());
        this.employerEvalStatusCriteria = this.createEvalStatusCriteria(searchCriteriaViewModel.getEmployerEvalStatusList());

        List<Evaluation> searchResults = new ArrayList<Evaluation>();
        if(termCriteria.isEmpty() && departmentCriteria.isEmpty()){
            searchResults = evalRepo.searchWithoutTermAndDepartment(studentFirstNameCriteria, studentLastNameCriteria,
                    studentIdCriteria, companyNameCriteria, advisorDCECriteria,
                    studentEvalStatusCriteria, approvalStatusCriteria, employerEvalStatusCriteria);
        }
        else if(termCriteria.isEmpty()){
            searchResults = evalRepo.searchWithoutTerm(studentFirstNameCriteria, studentLastNameCriteria,
                    studentIdCriteria, companyNameCriteria, advisorDCECriteria, departmentCriteria,
                    studentEvalStatusCriteria, approvalStatusCriteria, employerEvalStatusCriteria);
        }
        else if(departmentCriteria.isEmpty()){
            searchResults = evalRepo.searchWithoutDeparment(studentFirstNameCriteria, studentLastNameCriteria,
                    studentIdCriteria, companyNameCriteria, advisorDCECriteria, termCriteria,
                    studentEvalStatusCriteria, approvalStatusCriteria, employerEvalStatusCriteria);
        }
        else{
            searchResults = evalRepo.search(studentFirstNameCriteria, studentLastNameCriteria,
                    studentIdCriteria, companyNameCriteria, advisorDCECriteria, termCriteria, departmentCriteria,
                    studentEvalStatusCriteria, approvalStatusCriteria, employerEvalStatusCriteria);
        }
        return searchResults;
    }

    private String createStudentFirstNameCriteria(String studentFirstName){
        return "%" + studentFirstName + "%";
    }

    private String createStudentLastNameCriteria(String studentLastName){
        return "%" + studentLastName + "%";
    }

    private String createStudentIdCriteria(String studentId){
        return "%" + studentId + "%";
    }

    private String createCompanyNameCriteria(String companyName){
        return "%" + companyName + "%";
    }

    private String createAdvisorDCECriteria(String advisorDCE){
        return "%" + advisorDCE + "%";
    }

    private List<String> createTermCriteria(List<TermCriteriaViewModel> termCriteriaList){
        List<String> criteria = new ArrayList<String>();
        for(TermCriteriaViewModel termCriteria: termCriteriaList){
            criteria.add(termCriteria.getTermCode());
        }
        return criteria;
    }

    private List<String> createDepartmentCriteria(List<DepartmentCriteriaViewModel> departmentCriteriaList){
        List<String> criteria = new ArrayList<String>();
        for(DepartmentCriteriaViewModel departmentCriteria: departmentCriteriaList){
            criteria.add(departmentCriteria.getDepartmentCode());
        }
        return criteria;
    }

    private List<String> createEvalStatusCriteria(List<EvaluationStatusCriteriaViewModel> evalStatusCriteriaList){
        List<String> criteria = new ArrayList<String>();
        List<String> allCriteria = new ArrayList<String>();
        for(EvaluationStatusCriteriaViewModel evalStatusCriteria: evalStatusCriteriaList){
            if(!evalStatusCriteria.isSelected()){
                criteria.add(evalStatusCriteria.getEvaluationStatus());
            }
            allCriteria.add(evalStatusCriteria.getEvaluationStatus());
        }
        if(criteria.isEmpty()){
            criteria = allCriteria;
        }
        return criteria;
    }

    private List<String> createApprovalStatusCriteria(List<ApprovalStatusCriteriaViewModel> approvalStatusCriteriaList){
        List<String> criteria = new ArrayList<String>();
        List<String> allCriteria = new ArrayList<String>();
        for(ApprovalStatusCriteriaViewModel approvalStatusCriteria: approvalStatusCriteriaList){
            if(!approvalStatusCriteria.isSelected()){
                criteria.add(approvalStatusCriteria.getApprovalStatus());
            }
            allCriteria.add(approvalStatusCriteria.getApprovalStatus());
        }
        if(criteria.isEmpty()){
            criteria = allCriteria;
        }
        return criteria;
    }



}