package fi.otavanopisto.pyramus.dao.reports;
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.reports.Report;
import fi.otavanopisto.pyramus.domainmodel.reports.ReportCategory;
import fi.otavanopisto.pyramus.domainmodel.reports.ReportContext;
import fi.otavanopisto.pyramus.domainmodel.reports.ReportContextType;
import fi.otavanopisto.pyramus.domainmodel.users.User;
import fi.otavanopisto.pyramus.domainmodel.reports.ReportContext_;
@Stateless
public class ReportDAO extends PyramusEntityDAO<Report> {
public Report create(String name, String data, User creatingUser) {
Date now = new Date(System.currentTimeMillis());
Report report = new Report();
report.setData(data);
report.setName(name);
report.setCreated(now);
report.setCreator(creatingUser);
report.setLastModified(now);
report.setLastModifier(creatingUser);
getEntityManager().persist(report);
return report;
}
public void update(Report report, String name, ReportCategory reportCategory) {
EntityManager entityManager = getEntityManager();
report.setName(name);
report.setCategory(reportCategory);
entityManager.persist(report);
}
public void updateName(Report report, String name, User modifyingUser) {
Date now = new Date(System.currentTimeMillis());
report.setName(name);
report.setLastModified(now);
report.setLastModifier(modifyingUser);
getEntityManager().persist(report);
}
public Report updateCategory(Report report, ReportCategory category, User modifyingUser) {
Date now = new Date(System.currentTimeMillis());
report.setCategory(category);
report.setLastModified(now);
report.setLastModifier(modifyingUser);
return persist(report);
}
public void updateData(Report report, String data, User modifyingUser) {
Date now = new Date(System.currentTimeMillis());
report.setData(data);
report.setLastModified(now);
report.setLastModifier(modifyingUser);
getEntityManager().persist(report);
}
public List<Report> listByContextType(ReportContextType contextType) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Report> criteria = criteriaBuilder.createQuery(Report.class);
Root<ReportContext> root = criteria.from(ReportContext.class);
criteria.select(root.get(ReportContext_.report));
criteria.where(
criteriaBuilder.equal(root.get(ReportContext_.context), contextType)
);
return entityManager.createQuery(criteria).getResultList();
}
@Override
public void delete(Report report) {
super.delete(report);
}
}