Evaluation.java

/*
 * +====================================================================+
 * |         Copyright (C) 2015 Rochester Institute of Technology,      |
 * |            103 Lomb Memorial Drive, Rochester, NY - 14623          |
 * |                        All Rights Reserved.                        |
 * +====================================================================+
 *   FILENAME
 *    Evaluation.java
 *
 *   AUTHOR
 *    @author mhickson
 *
 * =====================================================================
 */

package edu.rit.coopeval.model;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.Set;

import edu.rit.coopeval.comparators.*;
import org.hibernate.annotations.SortComparator;

@Entity
@Table(name = "EVALUATION")
public class Evaluation extends AuditableEntity {

    @Id
    @Column(name = "EVALUATIONID", nullable = false, insertable = true, updatable = true, precision = 0)
    private long evaluationId;

    @Column(name = "PLACEMENTID", nullable = true, insertable = true, updatable = true, length = 64)
    private String placementId;

    @Column(name = "STUDENTLASTUPDATEDDATE", nullable = true, insertable = true, updatable = true)
    private Timestamp studentLastUpdatedDate;

    @Column(name = "EMPLOYERLASTUPDATEDDATE", nullable = true, insertable = true, updatable = true)
    private Timestamp employerLastUpdatedDate;

    @Column(name = "STUDENTUID", nullable = true, insertable = true, updatable = true, length = 64)
    private String studentUid;

    @Column(name = "ADVISORFIRSTNAME", nullable = true, insertable = true, updatable = true, length = 64)
    private String advisorFirstName;

    @Column(name = "ADVISORLASTNAME", nullable = true, insertable = true, updatable = true, length = 64)
    private String advisorLastName;

    @Column(name = "JOBTITLE", nullable = true, insertable = true, updatable = true, length = 64)
    private String jobTitle;

    @Column(name = "STUDENTFIRSTNAME", nullable = true, insertable = true, updatable = true, length = 64)
    private String studentFirstName;

    @Column(name = "STUDENTLASTNAME", nullable = true, insertable = true, updatable = true, length = 64)
    private String studentLastName;

    @Column(name = "STUDENTEMAIL", nullable = true, insertable = true, updatable = true, length = 64)
    private String studentEmail;

    @Column(name = "GRADYEAR", nullable = true, insertable = true, updatable = true, length = 64)
    private String gradYear;

    @Lob
    @Column(name = "COMPANYLOCATION", nullable = true, insertable = true, updatable = true)
    private String companyLocation;

    @Column(name = "COMPANYPHONENUMBER", nullable = true, insertable = true, updatable = true, length = 64)
    private String companyPhoneNumber;

    @Column(name = "COOPSUPTONOW", nullable = true, insertable = true, updatable = true, precision = 0)
    private Long coopsUpToNow;

    @Column(name = "CURRENTYEAR", nullable = true, insertable = true, updatable = true, precision = 0)
    private Long currentYear;

    @Column(name = "GENDER", nullable = true, insertable = true, updatable = true, length = 64)
    private String gender;

    @Column(name = "ADVISORDCE", nullable = true, insertable = true, updatable = true, length = 64)
    private String advisorDCE;

    @Column(name = "STUDENTDCE", nullable = true, insertable = true, updatable = true, length = 64)
    private String studentDCE;

    @Column(name = "ADVISOREMAIL", nullable = true, insertable = true, updatable = true, length = 64)
    private String advisorEmail;

    @ManyToOne
    @JoinColumn(name = "TERMID")
    private Term termByTermId;

    @ManyToOne
    @JoinColumn(name = "EMPLOYERUSERID")
    private EmployerUser employerUserByEmployerUserId;

    @ManyToOne
    @JoinColumn(name = "EMPLOYEREVALUATIONSTATUSID")
    private EvaluationStatus evaluationStatusByEmployerEvaluationStatusId;

    @ManyToOne
    @JoinColumn(name = "STUDENTEVALUATIONSTATUSID")
    private EvaluationStatus evaluationStatusByStudentEvaluationStatusId;

    @ManyToOne
    @JoinColumn(name = "EMPLOYERFORMID")
    private Form formByEmployerFormId;

    @ManyToOne
    @JoinColumn(name = "STUDENTFORMID")
    private Form formByStudentFormId;

    @ManyToOne
    @JoinColumn(name = "DEPARTMENTID")
    private Department departmentByDepartmentId;

    @OneToOne(mappedBy = "evaluationByEvaluationId")
    private EvaluationApproval evaluationApprovalByEvaluationId;

    @OneToMany(mappedBy = "evaluationByEvaluationId")
    @SortComparator(StudentQuestionAnswerComparator.class)
    private Set<StudentQuestionAnswer> studentQuestionAnswersByEvaluationId;

    @OneToMany(mappedBy = "evaluationByEvaluationId")
    @SortComparator(EmployerQuestionAnswerComparator.class)
    private Set<EmployerQuestionAnswer> employerQuestionAnswersByEvaluationId;

    @OneToMany(mappedBy = "evaluationByEvaluationId", targetEntity = EmailLogEvent.class)
    @SortComparator(EmailLogComparator.class)
    private Set<EmailLogEvent> emailLogEventsByEvaluationId;

    public long getEvaluationId() {
        return evaluationId;
    }

    public void setEvaluationId(long evaluationId) {
        this.evaluationId = evaluationId;
    }

    public String getPlacementId() {
        return placementId;
    }

    public void setPlacementId(String placementId) {
        this.placementId = placementId;
    }

    public Timestamp getStudentLastUpdatedDate() {
        return studentLastUpdatedDate;
    }

    public void setStudentLastUpdatedDate(Timestamp studentLastUpdatedDate) {
        this.studentLastUpdatedDate = studentLastUpdatedDate;
    }

    public Timestamp getEmployerLastUpdatedDate() {
        return employerLastUpdatedDate;
    }

    public void setEmployerLastUpdatedDate(Timestamp employerLastUpdatedDate) {
        this.employerLastUpdatedDate = employerLastUpdatedDate;
    }

    public String getStudentUid() {
        return studentUid;
    }

    public void setStudentUid(String studentUid) {
        this.studentUid = studentUid;
    }

    public String getAdvisorFirstName() {
        return advisorFirstName;
    }

    public void setAdvisorFirstName(String advisorFirstName) {
        this.advisorFirstName = advisorFirstName;
    }

    public String getAdvisorLastName() {
        return advisorLastName;
    }

    public void setAdvisorLastName(String advisorLastName) {
        this.advisorLastName = advisorLastName;
    }

    public String getJobTitle() {
        return jobTitle;
    }

    public void setJobTitle(String jobTitle) {
        this.jobTitle = jobTitle;
    }

    public String getStudentFirstName() {
        return studentFirstName;
    }

    public void setStudentFirstName(String studentFirstName) {
        this.studentFirstName = studentFirstName;
    }

    public String getStudentLastName() {
        return studentLastName;
    }

    public void setStudentLastName(String studentLastName) {
        this.studentLastName = studentLastName;
    }

    public String getStudentEmail() {
        return studentEmail;
    }

    public void setStudentEmail(String studentEmail) {
        this.studentEmail = studentEmail;
    }

    public String getGradYear() {
        return gradYear;
    }

    public void setGradYear(String gradYear) {
        this.gradYear = gradYear;
    }

    public String getCompanyLocation() {
        return companyLocation;
    }

    public void setCompanyLocation(String companyLocation) {
        this.companyLocation = companyLocation;
    }

    public String getCompanyPhoneNumber() {
        return companyPhoneNumber;
    }

    public void setCompanyPhoneNumber(String companyPhoneNumber) {
        this.companyPhoneNumber = companyPhoneNumber;
    }

    public Long getCoopsUpToNow() {
        return coopsUpToNow;
    }

    public void setCoopsUpToNow(Long coopsUpToNow) {
        this.coopsUpToNow = coopsUpToNow;
    }

    public Long getCurrentYear() {
        return currentYear;
    }

    public void setCurrentYear(Long currentYear) {
        this.currentYear = currentYear;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAdvisorDCE() {
        return advisorDCE;
    }

    public void setAdvisorDCE(String advisorDCE) {
        this.advisorDCE = advisorDCE;
    }

    public String getStudentDCE() {
        return studentDCE;
    }

    public void setStudentDCE(String studentDCE) {
        this.studentDCE = studentDCE;
    }

    public String getAdvisorEmail() {
        return advisorEmail;
    }

    public void setAdvisorEmail(String advisorEmail) {
        this.advisorEmail = advisorEmail;
    }

    public Term getTermByTermId() {
        return termByTermId;
    }

    public void setTermByTermId(Term termByTermId) {
        this.termByTermId = termByTermId;
    }

    public EmployerUser getEmployerUserByEmployerUserId() {
        return employerUserByEmployerUserId;
    }

    public void setEmployerUserByEmployerUserId(EmployerUser employerUserByEmployerUserId) {
        this.employerUserByEmployerUserId = employerUserByEmployerUserId;
    }

    public EvaluationStatus getEvaluationStatusByEmployerEvaluationStatusId() {
        return evaluationStatusByEmployerEvaluationStatusId;
    }

    public void setEvaluationStatusByEmployerEvaluationStatusId(
            EvaluationStatus evaluationStatusByEmployerEvaluationStatusId) {
        this.evaluationStatusByEmployerEvaluationStatusId = evaluationStatusByEmployerEvaluationStatusId;
    }

    public EvaluationStatus getEvaluationStatusByStudentEvaluationStatusId() {
        return evaluationStatusByStudentEvaluationStatusId;
    }

    public void setEvaluationStatusByStudentEvaluationStatusId(
            EvaluationStatus evaluationStatusByStudentEvaluationStatusId) {
        this.evaluationStatusByStudentEvaluationStatusId = evaluationStatusByStudentEvaluationStatusId;
    }

    public Form getFormByEmployerFormId() {
        return formByEmployerFormId;
    }

    public void setFormByEmployerFormId(Form formByEmployerFormId) {
        this.formByEmployerFormId = formByEmployerFormId;
    }

    public Form getFormByStudentFormId() {
        return formByStudentFormId;
    }

    public void setFormByStudentFormId(Form formByStudentFormId) {
        this.formByStudentFormId = formByStudentFormId;
    }

    public Department getDepartmentByDepartmentId() {
        return departmentByDepartmentId;
    }

    public void setDepartmentByDepartmentId(Department departmentByDepartmentId) {
        this.departmentByDepartmentId = departmentByDepartmentId;
    }

    public Set<StudentQuestionAnswer> getStudentQuestionAnswersByEvaluationId() {
        return studentQuestionAnswersByEvaluationId;
    }

    public void setStudentQuestionAnswersByEvaluationId(
            Set<StudentQuestionAnswer> studentQuestionAnswersByEvaluationId) {
        this.studentQuestionAnswersByEvaluationId = studentQuestionAnswersByEvaluationId;
    }

    public Set<EmployerQuestionAnswer> getEmployerQuestionAnswersByEvaluationId() {
        return employerQuestionAnswersByEvaluationId;
    }

    public void setEmployerQuestionAnswersByEvaluationId(
            Set<EmployerQuestionAnswer> employerQuestionAnswersByEvaluationId) {
        this.employerQuestionAnswersByEvaluationId = employerQuestionAnswersByEvaluationId;
    }

    public Set<EmailLogEvent> getEmailLogEventsByEvaluationId() {
        return emailLogEventsByEvaluationId;
    }

    public void setEmailLogEventsByEvaluationId(Set<EmailLogEvent> emailLogEventsByEvaluationId) {
        this.emailLogEventsByEvaluationId = emailLogEventsByEvaluationId;
    }

    public EvaluationApproval getEvaluationApprovalByEvaluationId() {
        return evaluationApprovalByEvaluationId;
    }

    public void setEvaluationApprovalByEvaluationId(EvaluationApproval evaluationApprovalByEvaluationId) {
        this.evaluationApprovalByEvaluationId = evaluationApprovalByEvaluationId;
    }

    public String getCurrentStudentEmailStatus() {
        String studentEmailStatus = "";
        for (EmailLogEvent e : emailLogEventsByEvaluationId) {
            if (e.getRecipient().equals(this.studentEmail)) {
                studentEmailStatus = e.getEmailContentByEmailContentId().getEmailTypeByEmailTypeId().getName();
                break;
            }
        }
        return studentEmailStatus;
    }

    public String getCurrentEmployerEmailStatus() {
        String employerEmailStatus = "";
        for (EmailLogEvent e : emailLogEventsByEvaluationId) {
            if (e.getRecipient().equals(this.getEmployerUserByEmployerUserId().getEmployerEmail())) {
                employerEmailStatus = e.getEmailContentByEmailContentId().getEmailTypeByEmailTypeId().getName();
                break;
            }
        }
        return employerEmailStatus;
    }

    public Timestamp getCurrentStudentEmailStatusDate() {
        Timestamp studentEmailStatusDate = null;
        for (EmailLogEvent e : emailLogEventsByEvaluationId) {
            if (e.getRecipient().equals(this.studentEmail)) {
                studentEmailStatusDate = e.getLogEventByLogEventId().getTime();
                break;
            }
        }
        return studentEmailStatusDate;
    }

    public Timestamp getCurrentEmployerEmailStatusDate() {
        Timestamp employerEmailStatusDate = null;
        for (EmailLogEvent e : emailLogEventsByEvaluationId) {
            if (e.getRecipient().equals(this.getEmployerUserByEmployerUserId().getEmployerEmail())) {
                employerEmailStatusDate = e.getLogEventByLogEventId().getTime();
                break;
            }
        }
        return employerEmailStatusDate;
    }
}