All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fi.foyt.fni.persistence.dao.messages.RecipientMessageDAO Maven / Gradle / Ivy

package fi.foyt.fni.persistence.dao.messages;

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.Join;
import javax.persistence.criteria.Root;

import fi.foyt.fni.persistence.dao.GenericDAO;
import fi.foyt.fni.persistence.model.messages.Message;
import fi.foyt.fni.persistence.model.messages.Message_;
import fi.foyt.fni.persistence.model.messages.RecipientMessage;
import fi.foyt.fni.persistence.model.messages.MessageFolder;
import fi.foyt.fni.persistence.model.messages.RecipientMessage_;
import fi.foyt.fni.persistence.model.users.User;

public class RecipientMessageDAO extends GenericDAO {
	
	private static final long serialVersionUID = 1L;

	public RecipientMessage create(Message message, User recipient, MessageFolder folder, Boolean read, Boolean starred, Boolean removed) {
		RecipientMessage recipientMessage = new RecipientMessage();
		recipientMessage.setFolder(folder);
		recipientMessage.setMessage(message);
		recipientMessage.setRead(read);
		recipientMessage.setRecipient(recipient);
		recipientMessage.setStarred(starred);
		recipientMessage.setRemoved(removed);
		
		getEntityManager().persist(recipientMessage);
		
		return recipientMessage;
	}

	public RecipientMessage findByMessageAndRecipient(Message message, User recipient) {
		EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(root);
    criteria.where(
    	criteriaBuilder.and(
        criteriaBuilder.equal(root.get(RecipientMessage_.recipient), recipient),
        criteriaBuilder.equal(root.get(RecipientMessage_.message), message)
      )
    );
    
    return getSingleResult(entityManager.createQuery(criteria));
  }

	public List listByRecipient(User recipient) {
    EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(root);
    criteria.where(
      criteriaBuilder.equal(root.get(RecipientMessage_.recipient), recipient)
    );
    
    return entityManager.createQuery(criteria).getResultList();
  }
  
  public List listBySender(User sender) {
  	return listBySender(sender, null, null);
  }
  
  public List listBySender(User sender, Integer firstResult, Integer maxResults) {
    EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    Join messageJoin = root.join(RecipientMessage_.message);
    
    criteria.select(root);
    criteria.where(
      criteriaBuilder.equal(messageJoin.get(Message_.sender), sender)
    );
    
    TypedQuery query = entityManager.createQuery(criteria);
    
    if (firstResult != null)
      query.setFirstResult(firstResult);
    
    if (maxResults != null)
      query.setMaxResults(maxResults);
    
    return query.getResultList();
  }
  
  public List listByFolder(MessageFolder folder) {
    EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(root);

    criteria.where(
      criteriaBuilder.equal(root.get(RecipientMessage_.folder), folder)
    );
    
    return entityManager.createQuery(criteria).getResultList();
  }
  
  public List listByRecipientAndStarred(User recipient, Boolean starred) {
    return listByRecipientAndStarred(recipient, starred, null, null);
  }
  
  public List listByRecipientAndStarred(User recipient, Boolean starred, Integer firstResult, Integer maxResults) {
    EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(root);
    criteria.where(
    	criteriaBuilder.and(
        criteriaBuilder.equal(root.get(RecipientMessage_.starred), starred),
        criteriaBuilder.equal(root.get(RecipientMessage_.recipient), recipient)
      )
    );
    
    TypedQuery query = entityManager.createQuery(criteria);
    
    if (firstResult != null)
      query.setFirstResult(firstResult);
    
    if (maxResults != null)
      query.setMaxResults(maxResults);
    
    return query.getResultList();
  }

	public List listByRootFolderAndRecipientAndRemoved(User recipient, Boolean removed) {
	  return listByRootFolderAndRecipientAndRemoved(recipient, removed, null, null);
	}
		
	public List listByRootFolderAndRecipientAndRemoved(User recipient, Boolean removed, Integer firstResult, Integer maxResults) {
    EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(root);
    criteria.where(
    	criteriaBuilder.and(
        criteriaBuilder.isNull(root.get(RecipientMessage_.folder)),
        criteriaBuilder.equal(root.get(RecipientMessage_.recipient), recipient),
        criteriaBuilder.equal(root.get(RecipientMessage_.removed), removed)
      )
    );
    
    TypedQuery query = entityManager.createQuery(criteria);
    
    if (firstResult != null)
      query.setFirstResult(firstResult);
    
    if (maxResults != null)
      query.setMaxResults(maxResults);
    
    return query.getResultList();
  }
  
  public RecipientMessage updateFolder(RecipientMessage recipientMessage, MessageFolder folder) {
  	recipientMessage.setFolder(folder);
  	getEntityManager().persist(recipientMessage);
  	return recipientMessage;
  }

	public List listByRecipientAndRemoved(User recipient, Boolean removed) {
		return listByRecipientAndRemoved(recipient, removed, null, null);
	}
	
	public List listByRecipientAndRemoved(User recipient, Boolean removed, Integer firstResult, Integer maxResults) {
		EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(root);
    criteria.where(
    	criteriaBuilder.and(
        criteriaBuilder.equal(root.get(RecipientMessage_.recipient), recipient),
        criteriaBuilder.equal(root.get(RecipientMessage_.removed), removed)
      )
    );
    
    TypedQuery query = entityManager.createQuery(criteria);
    
    if (firstResult != null)
      query.setFirstResult(firstResult);
    
    if (maxResults != null)
      query.setMaxResults(maxResults);
    
    return query.getResultList();
  }

	public List listByMessage(Message message) {
		EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(RecipientMessage.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(root);
    criteria.where(
      criteriaBuilder.equal(root.get(RecipientMessage_.message), message)
    );
    
    return entityManager.createQuery(criteria).getResultList();
  }

	public Long countByRecipientAndReadAndRemoved(User recipient, Boolean read, Boolean removed) {
		EntityManager entityManager = getEntityManager();

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteria = criteriaBuilder.createQuery(Long.class);
    Root root = criteria.from(RecipientMessage.class);
    criteria.select(criteriaBuilder.count(root));
    criteria.where(
    	criteriaBuilder.and(
        criteriaBuilder.equal(root.get(RecipientMessage_.recipient), recipient),
        criteriaBuilder.equal(root.get(RecipientMessage_.removed), removed),
        criteriaBuilder.equal(root.get(RecipientMessage_.read), read)
      )
    );
    
    return entityManager.createQuery(criteria).getSingleResult();
  }
	
	public RecipientMessage updateRead(RecipientMessage recipientMessage, Boolean read) {
		recipientMessage.setRead(read);
		getEntityManager().persist(recipientMessage);
		return recipientMessage;
	}
	
	public RecipientMessage updateStarred(RecipientMessage recipientMessage, Boolean starred) {
		recipientMessage.setStarred(starred);
		getEntityManager().persist(recipientMessage);
		return recipientMessage;
	}
	
	public RecipientMessage updateRemoved(RecipientMessage recipientMessage, Boolean removed) {
		recipientMessage.setRemoved(removed);
		getEntityManager().persist(recipientMessage);
		return recipientMessage;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy