package fi.otavanopisto.pyramus.dao.grading;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.pyramus.dao.PyramusEntityDAO;
import fi.otavanopisto.pyramus.domainmodel.base.CourseOptionality;
import fi.otavanopisto.pyramus.domainmodel.base.Curriculum;
import fi.otavanopisto.pyramus.domainmodel.base.EducationalLength;
import fi.otavanopisto.pyramus.domainmodel.base.EducationalTimeUnit;
import fi.otavanopisto.pyramus.domainmodel.base.School;
import fi.otavanopisto.pyramus.domainmodel.base.Subject;
import fi.otavanopisto.pyramus.domainmodel.grading.Grade;
import fi.otavanopisto.pyramus.domainmodel.grading.TransferCredit;
import fi.otavanopisto.pyramus.domainmodel.students.Student;
import fi.otavanopisto.pyramus.domainmodel.users.StaffMember;
import fi.otavanopisto.pyramus.domainmodel.grading.TransferCredit_;
@Stateless
public class TransferCreditDAO extends PyramusEntityDAO<TransferCredit> {
public TransferCredit create(String courseName, Integer courseNumber, Double courseLength, EducationalTimeUnit courseLengthUnit, School school, Subject subject, CourseOptionality optionality, Student student, StaffMember assessingUser, Grade grade, Date date, String verbalAssessment, Curriculum curriculum) {
TransferCredit transferCredit = new TransferCredit();
EducationalLength length = new EducationalLength();
length.setUnits(courseLength);
length.setUnit(courseLengthUnit);
transferCredit.setAssessor(assessingUser);
transferCredit.setDate(date);
transferCredit.setGrade(grade);
transferCredit.setCourseLength(length);
transferCredit.setCourseName(courseName);
transferCredit.setCourseNumber(courseNumber);
transferCredit.setSchool(school);
transferCredit.setStudent(student);
transferCredit.setSubject(subject);
transferCredit.setOptionality(optionality);
transferCredit.setVerbalAssessment(verbalAssessment);
transferCredit.setCurriculum(curriculum);
transferCredit.setArchived(Boolean.FALSE);
EntityManager entityManager = getEntityManager();
entityManager.persist(length);
entityManager.persist(transferCredit);
return transferCredit;
}
/**
* Lists all student's transfer credits excluding archived ones
*
* @return list of all students transfer credits
*/
public List<TransferCredit> listByStudent(Student student) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<TransferCredit> criteria = criteriaBuilder.createQuery(TransferCredit.class);
Root<TransferCredit> root = criteria.from(TransferCredit.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(TransferCredit_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(TransferCredit_.student), student)
));
return entityManager.createQuery(criteria).getResultList();
}
/**
* Lists all student's transfer credits excluding archived ones
*
* @return list of all students transfer credits
*/
public List<TransferCredit> listByStudentAndSubject(Student student, Subject subject) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<TransferCredit> criteria = criteriaBuilder.createQuery(TransferCredit.class);
Root<TransferCredit> root = criteria.from(TransferCredit.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(TransferCredit_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(TransferCredit_.student), student),
criteriaBuilder.equal(root.get(TransferCredit_.subject), subject)
));
return entityManager.createQuery(criteria).getResultList();
}
public TransferCredit update(TransferCredit transferCredit, String courseName, Integer courseNumber, Double courseLength, EducationalTimeUnit courseLengthUnit, School school, Subject subject, CourseOptionality optionality, Student student, StaffMember assessingUser, Grade grade, Date date, String verbalAssessment, Curriculum curriculum) {
EntityManager entityManager = getEntityManager();
EducationalLength courseEducationalLength = transferCredit.getCourseLength();
courseEducationalLength.setUnits(courseLength);
courseEducationalLength.setUnit(courseLengthUnit);
entityManager.persist(courseEducationalLength);
transferCredit.setAssessor(assessingUser);
transferCredit.setCourseName(courseName);
transferCredit.setCourseNumber(courseNumber);
transferCredit.setDate(date);
transferCredit.setGrade(grade);
transferCredit.setOptionality(optionality);
transferCredit.setSchool(school);
transferCredit.setStudent(student);
transferCredit.setSubject(subject);
transferCredit.setVerbalAssessment(verbalAssessment);
transferCredit.setCurriculum(curriculum);
entityManager.persist(transferCredit);
return transferCredit;
}
public Long countByStudent(Student student) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
Root<TransferCredit> root = criteria.from(TransferCredit.class);
criteria.select(criteriaBuilder.count(root));
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(TransferCredit_.student), student),
criteriaBuilder.equal(root.get(TransferCredit_.archived), Boolean.FALSE)
));
return entityManager.createQuery(criteria).getSingleResult();
}
}