EvaluationController.java

package edu.rit.coopeval.controller;

import javax.servlet.http.HttpSession;
import java.util.List;

import edu.rit.coopeval.authentication.beans.User;
import edu.rit.coopeval.dao.EvaluationRepository;
import edu.rit.coopeval.evaluation.EvaluationModel;
import edu.rit.coopeval.evaluation.EvaluationType;
import edu.rit.coopeval.model.*;
import edu.rit.coopeval.viewmodel.evaluation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * Created by mhickson on 1/29/15.
 */
@RestController
@RequestMapping(value="/services/EvaluationService")
public class EvaluationController {

    @Autowired
    private EvaluationRepository evalRepo;
    @Autowired
    private EvaluationModel evalModel;

    @RequestMapping(value = "/getStudentOverview", method = RequestMethod.GET)
    public StudentOverviewViewModel getStudentOverview(@RequestParam(value="studentDCE", required = false) String studentDCE, HttpSession session) {
        User currentUser = (User) session.getAttribute("currentUser");
        StudentOverviewViewModel studentOverview = null;
        if(studentDCE == null){
            String suid = "";
            if(currentUser != null){
                suid = currentUser.getUid();
            }
            studentOverview = new StudentOverviewViewModel(evalRepo.findByStudentUid(suid));
        }
        else{
            studentOverview = new StudentOverviewViewModel(evalRepo.findByStudentDCE(studentDCE));
        }
        return studentOverview;
    }

    @RequestMapping(value = "/getEmployerOverview", method = RequestMethod.GET)
    public EmployerOverviewViewModel getEmployerOverview(HttpSession session) {
        String email = "";
        User currentUser = (User) session.getAttribute("currentUser");
        if(currentUser != null){
            email = currentUser.getUserName();
        }
        List<Evaluation> evaluations = evalRepo.findByEmployerEmail(email);
        return new EmployerOverviewViewModel(evaluations);
    }

    @RequestMapping(value = "/getStudentEval", method = RequestMethod.GET)
    public EvaluationViewModel getStudentEvaluation(@RequestParam(value="placementId") String placementId) {
        Evaluation evaluation = evalRepo.findByPlacementId(placementId);
        return new EvaluationViewModel(evaluation, true);
    }

    @RequestMapping(value = "/getEmployerEval", method = RequestMethod.GET)
    public EvaluationViewModel getEmployerEvaluation(@RequestParam(value="placementId") String placementId) {
        Evaluation evaluation = evalRepo.findByPlacementId(placementId);
        return new EvaluationViewModel(evaluation, false);
    }

    @RequestMapping(value = "/saveEval", method = RequestMethod.PUT)
    public void saveEvaluation(@RequestBody EvaluationViewModel updatedEval, HttpSession session) {
        User currentUser = (User) session.getAttribute("currentUser");
        Evaluation evaluation = evalRepo.findByPlacementId(updatedEval.getPlacementId());
        if(currentUser!=null){
            switch (currentUser.getAccountType()) {
                case STUDENT:
                    evaluation = this.parseStudentAnswers(updatedEval, evaluation);
                    this.evalModel.save(evaluation, EvaluationType.STUDENT);
                    break;
                case EMPLOYER:
                    evaluation = this.parseEmployerAnswers(updatedEval, evaluation);
                    this.evalModel.save(evaluation, EvaluationType.EMPLOYER);
                    break;
            }
        }
    }

    @RequestMapping(value = "/submitEval", method = RequestMethod.PUT)
    public void submitEvaluation(@RequestBody EvaluationViewModel updatedEval, HttpSession session) {
        User currentUser = (User) session.getAttribute("currentUser");
        Evaluation evaluation = evalRepo.findByPlacementId(updatedEval.getPlacementId());
        if(currentUser!=null){
            switch (currentUser.getAccountType()) {
                case STUDENT:
                    evaluation = this.parseStudentAnswers(updatedEval, evaluation);
                    this.evalModel.submit(evaluation, EvaluationType.STUDENT);
                    break;
                case EMPLOYER:
                    evaluation = this.parseEmployerAnswers(updatedEval, evaluation);
                    this.evalModel.submit(evaluation, EvaluationType.EMPLOYER);
                    break;
            }
        }
    }
    @RequestMapping(value = "/approveEval", method = RequestMethod.PUT)
    public void approveEvaluation(@RequestBody EvaluationViewModel eval, HttpSession session){
        User currentUser = (User) session.getAttribute("currentUser");
        if(eval.getPlacementId() != null){
            this.evalModel.setCurrentUser(currentUser);
            this.evalModel.approve(evalRepo.findByPlacementId(eval.getPlacementId()));
        }
    }

    @RequestMapping(value = "/rejectEval", method = RequestMethod.PUT)
    public void rejectEvaluation(@RequestBody EvaluationViewModel eval, HttpSession session){
        User currentUser = (User) session.getAttribute("currentUser");
        if(eval.getPlacementId() != null){
            this.evalModel.setCurrentUser(currentUser);
            this.evalModel.reject(evalRepo.findByPlacementId(eval.getPlacementId()));
        }
    }

    public Evaluation parseStudentAnswers(EvaluationViewModel updatedEval, Evaluation evaluation){
        for(QuestionGroupViewModel questionGroup: updatedEval.getQuestionGroups()){
            for(QuestionViewModel updatedQuestion: questionGroup.getQuestions()){
                for(StudentQuestionAnswer currentQuestionAnswer: evaluation.getStudentQuestionAnswersByEvaluationId()){
                    if(updatedQuestion.getQuestionAnswerId() == currentQuestionAnswer.getStudentQuestionAnswerId()){
                        currentQuestionAnswer.setAnswer(updatedQuestion.getAnswer());
                        if(currentQuestionAnswer.getFormQuestionByFormQuestionId().getIsCommentAllowed().equals("1")){
                            currentQuestionAnswer.setComment(updatedQuestion.getComment());
                        }
                        break;
                    }
                }
            }
        }
        return evaluation;
    }

    public Evaluation parseEmployerAnswers(EvaluationViewModel updatedEval, Evaluation evaluation){
        for(QuestionGroupViewModel questionGroup: updatedEval.getQuestionGroups()){
            for(QuestionViewModel updatedQuestion: questionGroup.getQuestions()){
                for(EmployerQuestionAnswer currentQuestionAnswer: evaluation.getEmployerQuestionAnswersByEvaluationId()){
                    if(updatedQuestion.getQuestionAnswerId() == currentQuestionAnswer.getEmployerQuestionAnswerId()){
                        currentQuestionAnswer.setAnswer(updatedQuestion.getAnswer());
                        if(currentQuestionAnswer.getFormQuestionByFormQuestionId().getIsCommentAllowed().equals("1")){
                            currentQuestionAnswer.setComment(updatedQuestion.getComment());
                        }
                        break;
                    }
                }
            }
        }
        return evaluation;
    }

}