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