package fi.otavanopisto.pyramus.dao.courses;
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.courses.Course;
import fi.otavanopisto.pyramus.domainmodel.courses.StudentCourseResource;
import fi.otavanopisto.pyramus.domainmodel.resources.Resource;
import fi.otavanopisto.pyramus.persistence.usertypes.MonetaryAmount;
import fi.otavanopisto.pyramus.domainmodel.courses.StudentCourseResource_;
@Stateless
public class StudentCourseResourceDAO extends PyramusEntityDAO<StudentCourseResource> {
/**
* Creates a student course resource to the database.
*
* @param course The course
* @param resource The resource
* @param hours Resource hours
* @param hourlyCost Resource hourly cost
* @param unitCost Resource unit cost
*
* @return The created student course resource
*/
public StudentCourseResource create(Course course, Resource resource, Double hours,
MonetaryAmount hourlyCost, MonetaryAmount unitCost) {
EntityManager entityManager = getEntityManager();
StudentCourseResource studentCourseResource = new StudentCourseResource(course, resource);
studentCourseResource.setHours(hours);
studentCourseResource.setHourlyCost(hourlyCost);
studentCourseResource.setUnitCost(unitCost);
entityManager.persist(studentCourseResource);
course.getStudentCourseResources().add(studentCourseResource);
entityManager.persist(course);
return studentCourseResource;
}
/**
* Updates the given student course resource to the database.
*
* @param studentCourseResource The student course resource to be updated
* @param hours Resource hours
* @param hourlyCost Resource hourly cost
* @param unitCost Resource unit cost
*/
public void update(StudentCourseResource studentCourseResource, Double hours,
MonetaryAmount hourlyCost, MonetaryAmount unitCost) {
EntityManager entityManager = getEntityManager();
studentCourseResource.setHours(hours);
studentCourseResource.setHourlyCost(hourlyCost);
studentCourseResource.setUnitCost(unitCost);
entityManager.persist(studentCourseResource);
}
public List<StudentCourseResource> listByCourse(Course course) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<StudentCourseResource> criteria = criteriaBuilder.createQuery(StudentCourseResource.class);
Root<StudentCourseResource> root = criteria.from(StudentCourseResource.class);
criteria.select(root);
criteria.where(
criteriaBuilder.equal(root.get(StudentCourseResource_.course), course)
);
return entityManager.createQuery(criteria).getResultList();
}
/**
* Deletes the given student course resource from the database.
*
* @param studentCourseResource The student course resource to be deleted
*/
@Override
public void delete(StudentCourseResource studentCourseResource) {
EntityManager entityManager = getEntityManager();
if (studentCourseResource.getCourse() != null)
studentCourseResource.getCourse().removeStudentCourseResource(studentCourseResource);
entityManager.remove(studentCourseResource);
}
}