package uk.ac.cam.echo.server.resources; 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.resources.ConferenceResource; import uk.ac.cam.echo.server.HibernateUtil; import uk.ac.cam.echo.server.analysis.internal.ForceGraphUtil; import uk.ac.cam.echo.server.analysis.internal.GraphUtil; import uk.ac.cam.echo.server.analysis.internal.GraphUtil2; import uk.ac.cam.echo.server.analysis.internal.NPForceGraph; import uk.ac.cam.echo.server.models.ConferenceModel; import uk.ac.cam.echo.server.models.ConversationModel; import uk.ac.cam.echo.server.models.ForceNodeModel; import uk.ac.cam.echo.server.models.UserModel; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; import java.util.Map; public class ConferenceResourceImpl implements ConferenceResource { @Override public Conference create(Conference data) { HibernateUtil.getTransaction().save(data); return data; } public List<Conference> getAll() { return HibernateUtil.getTransaction().createCriteria(ConferenceModel.class).list(); } @Override public Map<String, Long> getKeywords(long id, long conversationId, long lastTS) { Conversation conversation = (Conversation) HibernateUtil.getTransaction().get(ConversationModel.class, conversationId); return AnalystFactory.get(id).getKeywords(conversation, lastTS); } @Override public Map<String, Long> getKeywords(long id, long lastTS) { return AnalystFactory.get(id).getKeywords(lastTS); } @Override public String getKeywordGraph(long id) { AnalystFactory.get(id).updateGraph(); return GraphUtil.getJSONGraph(); } @Override public String getKeywordGraph(long id, int lim) { GraphUtil2.flush(); AnalystFactory.get(id).updateGraph(lim); return GraphUtil2.getJSONGraph(); } @Override public String getForceGraph(long id) { NPForceGraph.flush(); AnalystFactory.get(id).updateFGraph(); return NPForceGraph.getJSONFGraph(); } @Override public List<Object> getForceNodes(long id) { return new ArrayList<Object>(ForceGraphUtil.getAll()); } @Override public List<Object> getGraphNodes(long id) { return new ArrayList<Object>(GraphUtil.getAll()); } @Override public List<Object> findForceNode(long id, long type, long iid) { return new ArrayList<Object>(HibernateUtil.getTransaction().createCriteria(ForceNodeModel.class) .add(Restrictions.eq("type", type)) .add(Restrictions.eq("internalId", iid)).list()); } @Override public List<Conversation> getConversations(long id) { ConferenceModel conf = (ConferenceModel) get(id); return new ArrayList<Conversation>(conf.getConversationSet()); } @Override public List<Conversation> search(long id, String keyword, int n) { return AnalystFactory.get(id).search(keyword, n); } @Override public List<Conversation> onlyKeywordSearch(long id, String keyword, int n) { return AnalystFactory.get(id).onlyKeywordSearch(keyword, n); } @Override public List<Conversation> onlyTagSearch(long id, String keyword, int n) { return AnalystFactory.get(id).onlyTagSearch(keyword, n); } @Override public List<Conversation> onlyNameSearch(long id, String keyword, int n) { return AnalystFactory.get(id).onlyNameSearch(keyword, n); } @Override public List<Conversation> nameAndTagSearch(long id, String keyword, int n) { return AnalystFactory.get(id).nameAndTagSearch(keyword, n); } @Override public List<Conversation> mostUsers(long id, int n) { return AnalystFactory.get(id).mostUsers(n); } @Override public List<Conversation> mostActiveRecently(long id, long millis, int n) { return AnalystFactory.get(id).mostActiveRecently(millis, n); } @Override public List<Conversation> recommend(long id, long userID, int n) { User user = (User) HibernateUtil.getTransaction().get(UserModel.class, userID); return AnalystFactory.get(id).recommend(user, n); } @Override public Message notify(long id, long userID, long currConversationID, long millis) { User user = (User) HibernateUtil.getTransaction().get(UserModel.class, userID); return AnalystFactory.get(id).notify(user, currConversationID, millis); } @Override public List<Conversation> mostMessages(long id, int n) { return AnalystFactory.get(id).mostMessages(n); } @Override public List<User> mostActiveUsers(long id, int n) { return AnalystFactory.get(id).mostActiveUsers(n); } @Override public int activity(long id, long millis) { return AnalystFactory.get(id).hail(millis); } @Override public double maleToFemaleRatio(long id) { return AnalystFactory.get(id).maleToFemaleRatio(); } @Override public double maleToFemaleRatio(long id, long conversationId) { Conversation conversation = (Conversation) HibernateUtil.getTransaction().get(ConversationModel.class, conversationId); return AnalystFactory.get(id).maleToFemaleRatio(conversation); } @Override public int messageCount(long id, long convoId) { return AnalystFactory.get(id).messageCount(convoId); } @Override public int messageCount(long id) { return AnalystFactory.get(id).messageCount(); } @Override public int userCount(long id, long convoId) { return AnalystFactory.get(id).userCount(convoId); } @Override public int userCount(long id) { return AnalystFactory.get(id).userCount(); } @Override public int contributingUsers(long id, long convoId, boolean current) { return AnalystFactory.get(id).contributingUsers(convoId, current); } @Override public long lastTimeActive(long id, long userId) { User user = (User) HibernateUtil.getTransaction().get(UserModel.class, userId); return AnalystFactory.get(id).lastTimeActive(user); } public Conference get(long id) { return (Conference) HibernateUtil.getTransaction().get(ConferenceModel.class, id); } public Response update(Conference conference) { HibernateUtil.getTransaction().update(conference); return Response.ok().build(); } public Response delete(long id) { Conference u = get(id); HibernateUtil.getTransaction().delete(u); return Response.ok().build(); } }