package fi.otavanopisto.muikku.plugins.material.coops; import java.util.Date; import java.util.List; import javax.enterprise.context.Dependent; import javax.enterprise.event.Event; import javax.inject.Inject; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.plugins.material.coops.dao.CoOpsSessionDAO; import fi.otavanopisto.muikku.plugins.material.coops.event.CoOpsSessionCloseEvent; import fi.otavanopisto.muikku.plugins.material.coops.event.CoOpsSessionOpenEvent; import fi.otavanopisto.muikku.plugins.material.coops.model.CoOpsSession; import fi.otavanopisto.muikku.plugins.material.coops.model.CoOpsSessionType; import fi.otavanopisto.muikku.plugins.material.model.HtmlMaterial; @Dependent public class CoOpsSessionController { private static final long SESSION_TIMEOUT = 10 * 1000; @Inject private Event<CoOpsSessionOpenEvent> sessionOpenEvent; @Inject private Event<CoOpsSessionCloseEvent> sessionCloseEvent; @Inject private CoOpsSessionDAO coOpsSessionDAO; public CoOpsSession createSession(HtmlMaterial htmlMaterial, UserEntity userEntity, String sessionId, Long joinRevision, String algorithm) { CoOpsSession session = coOpsSessionDAO.create(htmlMaterial, userEntity != null ? userEntity.getId() : null, sessionId, CoOpsSessionType.REST, joinRevision, algorithm, Boolean.FALSE, new Date()); sessionOpenEvent.fire(new CoOpsSessionOpenEvent(session.getSessionId())); return session; } public CoOpsSession findSessionBySessionId(String sessionId) { return coOpsSessionDAO.findBySessionId(sessionId); } public List<CoOpsSession> listTimedoutRestSessions() { Date accessedBefore = new Date(System.currentTimeMillis() - SESSION_TIMEOUT); return coOpsSessionDAO.listByAccessedBeforeAndTypeAndClosed(accessedBefore, CoOpsSessionType.REST, Boolean.FALSE); } public List<CoOpsSession> listSessionsByHtmlMaterialAndClosed(HtmlMaterial htmlMaterial, Boolean closed) { return coOpsSessionDAO.listByFileAndClosed(htmlMaterial, closed); } public List<CoOpsSession> listOpenSessions() { return coOpsSessionDAO.listByClosed(Boolean.FALSE); } public CoOpsSession updateSessionType(CoOpsSession coOpsSession, CoOpsSessionType type) { return coOpsSessionDAO.updateType(coOpsSession, type); } public void closeSession(CoOpsSession session) { closeSession(session, false); } public void deleteAllSessions() { List<CoOpsSession> sessions = coOpsSessionDAO.listAll(); for (CoOpsSession session : sessions) { coOpsSessionDAO.delete(session); } } public void closeSession(CoOpsSession session, boolean quiet) { coOpsSessionDAO.updateClosed(session, Boolean.TRUE); if (!quiet) { sessionCloseEvent.fire(new CoOpsSessionCloseEvent(session.getSessionId())); } } }