package uk.ac.cam.echo.server.resources; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import uk.ac.cam.echo.data.Conference; import uk.ac.cam.echo.data.Conversation; import uk.ac.cam.echo.data.Message; import uk.ac.cam.echo.data.User; import uk.ac.cam.echo.data.async.SubscriptionResource; import uk.ac.cam.echo.data.resources.ConversationResource; import uk.ac.cam.echo.data.resources.MessageResource; import uk.ac.cam.echo.data.resources.TagResource; import uk.ac.cam.echo.server.HibernateUtil; import uk.ac.cam.echo.server.models.ConversationModel; import javax.ws.rs.core.Response; import java.util.Collection; import java.util.List; public class ConversationResourceImpl implements ConversationResource { static private IdSubscriptionFactory<Long, Message> messagesSub = new IdSubscriptionFactory<Long, Message>(); public List<Conversation> getAll() { return HibernateUtil.getTransaction().createCriteria(ConversationModel.class).addOrder(Order.asc("id")).list(); } public Conversation get(long id) { return (Conversation) HibernateUtil.getTransaction().get(ConversationModel.class, id); } public Conversation get(String name) { return (Conversation) HibernateUtil.getTransaction().createCriteria(ConversationModel.class) .add(Restrictions.eq("name", name)).addOrder(Order.desc("id")).list().get(0); } public MessageResource getMessageResource(long id) { return new MessageResourceImpl(get(id)); } @Override public TagResource getTagResource(long id) { return new TagResourceImpl(get(id)); } public Conversation create(String name, long conference_id) { Conference conf = new ConferenceResourceImpl().get(conference_id); ConversationModel conversation = new ConversationModel(); conversation.setName(name); conversation.setConference(conf); HibernateUtil.getTransaction().save(conversation); return conversation; } public Response delete(long id) { Conversation u = get(id); HibernateUtil.getTransaction().delete(u); return Response.ok().build(); } public Response update(Conversation conversation) { HibernateUtil.getTransaction().update(conversation); return Response.ok().build(); } @Override public Conversation create(Conversation data) { HibernateUtil.getTransaction().save(data); return data; } public static void broadcastMessage(Message m) { messagesSub.get(m.getConversation().getId()).broadcast(m); } public SubscriptionResource listenToMessages(long id) { return messagesSub.get(id); } @Override public Collection<User> getUsers(long id) { return get(id).getUsers(); } }