package fi.otavanopisto.muikku.plugins.calendar.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.muikku.plugins.calendar.model.UserCalendar_;
import fi.otavanopisto.muikku.dao.PluginDAO;
import fi.otavanopisto.muikku.plugins.calendar.model.UserCalendar;
public class UserCalendarDAO extends PluginDAO<UserCalendar> {
private static final long serialVersionUID = -4015334453127961131L;
@PersistenceContext (unitName = "muikku-calendar-plugin")
private EntityManager entityManager;
protected EntityManager getEntityManager() {
return entityManager;
}
public UserCalendar create(String calendarId, String calendarProvider, Long userId, Boolean visible) {
UserCalendar userCalendar = new UserCalendar();
userCalendar.setCalendarId(calendarId);
userCalendar.setCalendarProvider(calendarProvider);
userCalendar.setUserId(userId);
userCalendar.setVisible(visible);
return persist(userCalendar);
}
public UserCalendar findByUserIdAndCalendarProvider(Long userId, String calendarProvider) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<UserCalendar> criteria = criteriaBuilder.createQuery(UserCalendar.class);
Root<UserCalendar> root = criteria.from(UserCalendar.class);
criteria.select(root);
criteria.where(criteriaBuilder.and(criteriaBuilder.equal(root.get(UserCalendar_.userId), userId),
criteriaBuilder.equal(root.get(UserCalendar_.calendarProvider), calendarProvider)));
return getSingleResult(entityManager.createQuery(criteria));
}
public List<UserCalendar> listByUserId(Long userId) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<UserCalendar> criteria = criteriaBuilder.createQuery(UserCalendar.class);
Root<UserCalendar> root = criteria.from(UserCalendar.class);
criteria.select(root);
criteria.where(criteriaBuilder.and(criteriaBuilder.equal(root.get(UserCalendar_.userId), userId)));
return entityManager.createQuery(criteria).getResultList();
}
public List<Long> listIdsByUserId(Long userId) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
Root<UserCalendar> root = criteria.from(UserCalendar.class);
criteria.select(root.get(UserCalendar_.id));
criteria.where(criteriaBuilder.and(criteriaBuilder.equal(root.get(UserCalendar_.userId), userId)));
return entityManager.createQuery(criteria).getResultList();
}
public UserCalendar updateVisible(UserCalendar userCalendar, Boolean visible) {
userCalendar.setVisible(visible);
return persist(userCalendar);
}
}