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.base.EducationalTimeUnit; import fi.otavanopisto.pyramus.domainmodel.courses.Course; import fi.otavanopisto.pyramus.domainmodel.courses.CourseComponent; import fi.otavanopisto.pyramus.domainmodel.courses.CourseComponent_; @Stateless public class CourseComponentDAO extends PyramusEntityDAO<CourseComponent> { /** * Creates a course component to the database. * * @param course The course * @param length Component length * @param name Component name * @param description Component description * * @return The created course component */ public CourseComponent create(Course course, Double componentLength, EducationalTimeUnit componentLengthTimeUnit, String name, String description) { EntityManager entityManager = getEntityManager(); CourseComponent courseComponent = new CourseComponent(); courseComponent.setCourse(course); courseComponent.setName(name); courseComponent.getLength().setUnit(componentLengthTimeUnit); courseComponent.getLength().setUnits(componentLength); courseComponent.setDescription(description); entityManager.persist(courseComponent); course.addCourseComponent(courseComponent); entityManager.persist(course); return courseComponent; } /** * Updates a course component to the database. * * @param courseComponent The course component to be updated * @param length Component length * @param name Component name * @param description Component description */ public CourseComponent update(CourseComponent courseComponent, Double length, EducationalTimeUnit lengthTimeUnit, String name, String description) { EntityManager entityManager = getEntityManager(); courseComponent.setName(name); courseComponent.getLength().setUnit(lengthTimeUnit); courseComponent.getLength().setUnits(length); courseComponent.setDescription(description); entityManager.persist(courseComponent); return courseComponent; } /** * Deletes the given course component from the database. * * @param courseComponent The course component to be deleted */ @Override public void delete(CourseComponent courseComponent) { EntityManager entityManager = getEntityManager(); if (courseComponent.getCourse() != null) courseComponent.getCourse().removeCourseComponent(courseComponent); entityManager.remove(courseComponent); } public List<CourseComponent> listByCourse(Course course) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<CourseComponent> criteria = criteriaBuilder.createQuery(CourseComponent.class); Root<CourseComponent> root = criteria.from(CourseComponent.class); criteria.select(root); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(CourseComponent_.archived), Boolean.FALSE), criteriaBuilder.equal(root.get(CourseComponent_.course), course) )); return entityManager.createQuery(criteria).getResultList(); } }