package fi.otavanopisto.pyramus.dao.modules;
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.modules.Module;
import fi.otavanopisto.pyramus.domainmodel.modules.ModuleComponent;
import fi.otavanopisto.pyramus.domainmodel.modules.ModuleComponent_;
@Stateless
public class ModuleComponentDAO extends PyramusEntityDAO<ModuleComponent> {
public ModuleComponent create(Module module, Double length, EducationalTimeUnit lengthTimeUnit, String name, String description) {
EntityManager entityManager = getEntityManager();
ModuleComponent moduleComponent = new ModuleComponent();
moduleComponent.getLength().setUnit(lengthTimeUnit);
moduleComponent.getLength().setUnits(length);
moduleComponent.setName(name);
moduleComponent.setDescription(description);
entityManager.persist(moduleComponent);
module.addModuleComponent(moduleComponent);
entityManager.persist(module);
return moduleComponent;
}
public ModuleComponent update(ModuleComponent moduleComponent, Double length, EducationalTimeUnit lengthTimeUnit, String name,
String description) {
EntityManager entityManager = getEntityManager();
moduleComponent.setName(name);
moduleComponent.getLength().setUnit(lengthTimeUnit);
moduleComponent.getLength().setUnits(length);
moduleComponent.setDescription(description);
entityManager.persist(moduleComponent);
return moduleComponent;
}
public List<ModuleComponent> listByModule(Module module) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<ModuleComponent> criteria = criteriaBuilder.createQuery(ModuleComponent.class);
Root<ModuleComponent> root = criteria.from(ModuleComponent.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(ModuleComponent_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(ModuleComponent_.module), module)
));
return entityManager.createQuery(criteria).getResultList();
}
@Override
public void delete(ModuleComponent moduleComponent) {
if (moduleComponent.getModule() != null)
moduleComponent.getModule().removeModuleComponent(moduleComponent);
super.delete(moduleComponent);
}
}