package com.chughes.dip.data; import java.util.List; import java.util.Set; import java.util.SortedSet; import org.hibernate.FlushMode; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import com.chughes.dip.chat.Message; import com.chughes.dip.chat.Post; import com.chughes.dip.chat.UIChatRequest; @Repository public class ChatRepository { protected @Autowired SessionFactory sessionFactory; @Transactional(readOnly=true) public Post getTopic(int id){ return (Post) sessionFactory.getCurrentSession().get(Post.class, id); } @Transactional(readOnly=true) public List<Post> getTopics(){ Query q = sessionFactory.getCurrentSession().createQuery("from Post where toplevel = true order by timestamp desc"); q.setMaxResults(15); return q.list(); } @Transactional public void savePost(Post p){ sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO); sessionFactory.getCurrentSession().saveOrUpdate(p); sessionFactory.getCurrentSession().flush(); } @Transactional public void saveMessage(Message m){ sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO); sessionFactory.getCurrentSession().saveOrUpdate(m); } @Transactional(readOnly=true) public List<Object[]> getMessages(int user, UIChatRequest req){ if (req.getFromid() == -1){ Query q = sessionFactory.getCurrentSession().createQuery("select m.id,m.text,m.from.id,m.from.user.username,m.timestamp from UserGameEntity u join u.messages m where u.game.id = :g and m.id > :l and m.to.id is null order by timestamp asc"); q.setInteger("g", req.getGameid()); q.setInteger("l", req.getLastseen()); return q.list(); } Query q = sessionFactory.getCurrentSession().createQuery("select m.id,m.text,m.from.id,m.from.user.username,m.timestamp from UserGameEntity u join u.messages m where u.user.id = :u and u.game.id = :g and (m.from.id = :f or m.to.id = :f) and m.id > :l order by timestamp asc"); q.setInteger("u", user); q.setInteger("g", req.getGameid()); q.setInteger("f", req.getFromid()); q.setInteger("l", req.getLastseen()); return q.list(); } }