package fi.otavanopisto.muikku.plugins.workspace.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceNode_;
import fi.otavanopisto.muikku.plugins.CorePluginsDAO;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceNode;
public class WorkspaceNodeDAO extends CorePluginsDAO<WorkspaceNode> {
private static final long serialVersionUID = 6929866288759721384L;
public WorkspaceNode findByParentAndUrlName(WorkspaceNode parent, String urlName) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceNode> criteria = criteriaBuilder.createQuery(WorkspaceNode.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(root);
criteria.where(criteriaBuilder.and(criteriaBuilder.equal(root.get(WorkspaceNode_.parent), parent),
criteriaBuilder.equal(root.get(WorkspaceNode_.urlName), urlName)));
return getSingleResult(entityManager.createQuery(criteria));
}
public Integer getMaximumOrderNumber(WorkspaceNode parent) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Integer> criteria = criteriaBuilder.createQuery(Integer.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(criteriaBuilder.max(root.get(WorkspaceNode_.orderNumber)));
criteria.where(criteriaBuilder.equal(root.get(WorkspaceNode_.parent), parent));
return entityManager.createQuery(criteria).getSingleResult();
}
public List<WorkspaceNode> listByOrderNumberEqualOrGreater(WorkspaceNode node) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceNode> criteria = criteriaBuilder.createQuery(WorkspaceNode.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(root);
criteria.where(criteriaBuilder.and(criteriaBuilder.equal(root.get(WorkspaceNode_.parent), node.getParent()),
criteriaBuilder.greaterThanOrEqualTo(root.get(WorkspaceNode_.orderNumber), node.getOrderNumber())));
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceNode> listByOrderNumberGreater(WorkspaceNode node) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceNode> criteria = criteriaBuilder.createQuery(WorkspaceNode.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceNode_.parent), node.getParent()),
criteriaBuilder.greaterThan(root.get(WorkspaceNode_.orderNumber), node.getOrderNumber())
)
);
criteria.orderBy(criteriaBuilder.asc(root.get(WorkspaceNode_.orderNumber)));
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceNode> listParentByOrderNumberGreaterSortByGreater(WorkspaceNode parent, Integer orderNumber, Integer firstResult,
Integer maxResults) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceNode> criteria = criteriaBuilder.createQuery(WorkspaceNode.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(root);
criteria.where(criteriaBuilder.and(criteriaBuilder.equal(root.get(WorkspaceNode_.parent), parent),
criteriaBuilder.greaterThan(root.get(WorkspaceNode_.orderNumber), orderNumber)));
criteria.orderBy(criteriaBuilder.asc(root.get(WorkspaceNode_.orderNumber)));
TypedQuery<WorkspaceNode> query = entityManager.createQuery(criteria);
if (firstResult != null) {
query.setFirstResult(firstResult);
}
if (maxResults != null) {
query.setMaxResults(maxResults);
}
return query.getResultList();
}
public List<WorkspaceNode> listByParentSortByOrderNumber(WorkspaceNode parent) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceNode> criteria = criteriaBuilder.createQuery(WorkspaceNode.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(root);
criteria.where(criteriaBuilder.equal(root.get(WorkspaceNode_.parent), parent));
criteria.orderBy(criteriaBuilder.asc(root.get(WorkspaceNode_.orderNumber)));
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceNode> listByParentAndHiddenSortByOrderNumber(WorkspaceNode parent, Boolean hidden) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceNode> criteria = criteriaBuilder.createQuery(WorkspaceNode.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceNode_.parent), parent),
criteriaBuilder.equal(root.get(WorkspaceNode_.hidden), hidden)
)
);
criteria.orderBy(criteriaBuilder.asc(root.get(WorkspaceNode_.orderNumber)));
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceNode> listByParentAndHidden(WorkspaceNode parent, Boolean hidden) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceNode> criteria = criteriaBuilder.createQuery(WorkspaceNode.class);
Root<WorkspaceNode> root = criteria.from(WorkspaceNode.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceNode_.parent), parent),
criteriaBuilder.equal(root.get(WorkspaceNode_.hidden), hidden)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public WorkspaceNode updateParent(WorkspaceNode node, WorkspaceNode parent) {
node.setParent(parent);
return persist(node);
}
public WorkspaceNode updateOrderNumber(WorkspaceNode node, Integer orderNumber) {
node.setOrderNumber(orderNumber);
return persist(node);
}
public WorkspaceNode updateHidden(WorkspaceNode node, Boolean hidden) {
node.setHidden(hidden);
return persist(node);
}
public WorkspaceNode updateTitle(WorkspaceNode node, String title) {
node.setTitle(title);
return persist(node);
}
public WorkspaceNode updateUrlName(WorkspaceNode node, String urlName) {
node.setUrlName(urlName);
return persist(node);
}
}