package fi.otavanopisto.muikku.plugins.communicator.dao;
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.model.workspace.WorkspaceEntity;
import fi.otavanopisto.muikku.model.workspace.WorkspaceRoleArchetype;
import fi.otavanopisto.muikku.plugins.CorePluginsDAO;
import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessage;
import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipient;
import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipientWorkspaceGroup;
import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipient_;
public class CommunicatorMessageRecipientWorkspaceGroupDAO extends CorePluginsDAO<CommunicatorMessageRecipientWorkspaceGroup> {
private static final long serialVersionUID = 1450192242311134158L;
public CommunicatorMessageRecipientWorkspaceGroup create(WorkspaceEntity workspaceEntity, WorkspaceRoleArchetype archetype) {
CommunicatorMessageRecipientWorkspaceGroup workspaceGroup = new CommunicatorMessageRecipientWorkspaceGroup();
workspaceGroup.setArchetype(archetype);
workspaceGroup.setWorkspaceEntityId(workspaceEntity.getId());
getEntityManager().persist(workspaceGroup);
return workspaceGroup;
}
public List<CommunicatorMessageRecipientWorkspaceGroup> listByMessage(CommunicatorMessage communicatorMessage) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<CommunicatorMessageRecipientWorkspaceGroup> criteria = criteriaBuilder.createQuery(CommunicatorMessageRecipientWorkspaceGroup.class);
Root<CommunicatorMessageRecipientWorkspaceGroup> root = criteria.from(CommunicatorMessageRecipientWorkspaceGroup.class);
Root<CommunicatorMessageRecipient> root2 = criteria.from(CommunicatorMessageRecipient.class);
criteria.select(root).distinct(true);
criteria.where(
criteriaBuilder.and(
root2.get(CommunicatorMessageRecipient_.recipientGroup).in(root),
criteriaBuilder.equal(root2.get(CommunicatorMessageRecipient_.communicatorMessage), communicatorMessage)
)
);
return entityManager.createQuery(criteria).getResultList();
}
}