package fi.otavanopisto.muikku.plugins.wall.dao;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.muikku.plugins.wall.model.WallEntry_;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.plugins.CorePluginsDAO;
import fi.otavanopisto.muikku.plugins.wall.model.Wall;
import fi.otavanopisto.muikku.plugins.wall.model.WallEntry;
import fi.otavanopisto.muikku.plugins.wall.model.WallEntryVisibility;
public class WallEntryDAO extends CorePluginsDAO<WallEntry> {
private static final long serialVersionUID = 5562545925007839415L;
public WallEntry create(Wall wall, String text, WallEntryVisibility visibility, UserEntity creator) {
Date now = new Date();
return create(wall, text, visibility, creator, creator, now, now, Boolean.FALSE);
}
public WallEntry create(Wall wall, String text, WallEntryVisibility visibility, UserEntity creator, UserEntity lastModfier, Date created, Date lastModified, Boolean archived) {
WallEntry wallEntry = new WallEntry();
wallEntry.setWall(wall);
wallEntry.setVisibility(visibility);
wallEntry.setCreated(created);
wallEntry.setLastModified(lastModified);
wallEntry.setCreator(creator.getId());
wallEntry.setLastModifier(lastModfier.getId());
wallEntry.setArchived(archived);
wallEntry.setText(text);
getEntityManager().persist(wallEntry);
return wallEntry;
}
public List<WallEntry> listEntriesByWall(Wall wall) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WallEntry> criteria = criteriaBuilder.createQuery(WallEntry.class);
Root<WallEntry> root = criteria.from(WallEntry.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WallEntry_.wall), wall),
criteriaBuilder.equal(root.get(WallEntry_.archived), Boolean.FALSE)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WallEntry> listPublicOrOwnedEntriesByWall(Wall wall, UserEntity owner) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WallEntry> criteria = criteriaBuilder.createQuery(WallEntry.class);
Root<WallEntry> root = criteria.from(WallEntry.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WallEntry_.wall), wall),
criteriaBuilder.equal(root.get(WallEntry_.archived), Boolean.FALSE),
criteriaBuilder.or(
criteriaBuilder.equal(root.get(WallEntry_.creator), owner.getId()),
criteriaBuilder.equal(root.get(WallEntry_.visibility), WallEntryVisibility.PUBLIC)
)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WallEntry> listPublicEntriesByWall(Wall wall) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WallEntry> criteria = criteriaBuilder.createQuery(WallEntry.class);
Root<WallEntry> root = criteria.from(WallEntry.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WallEntry_.wall), wall),
criteriaBuilder.equal(root.get(WallEntry_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(WallEntry_.visibility), WallEntryVisibility.PUBLIC)
)
);
return entityManager.createQuery(criteria).getResultList();
}
}