package fi.otavanopisto.muikku.plugins.workspace; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity; import fi.otavanopisto.muikku.plugins.workspace.dao.WorkspaceVisitDAO; import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceVisit; import fi.otavanopisto.muikku.schooldata.WorkspaceEntityController; import fi.otavanopisto.muikku.session.SessionController; import fi.otavanopisto.muikku.session.local.LocalSession; public class WorkspaceVisitController { @Inject private WorkspaceEntityController workspaceEntityController; @Inject private WorkspaceVisitDAO workspaceVisitDAO; @Inject @LocalSession private SessionController sessionController; public void visit(WorkspaceEntity workspaceEntity) { UserEntity userEntity = sessionController.getLoggedUserEntity(); if (userEntity == null) { return; } else { synchronized(userEntity) { WorkspaceVisit workspaceVisit = workspaceVisitDAO.lockingFindByUserEntityAndWorkspaceEntity(userEntity, workspaceEntity); if (workspaceVisit == null) { workspaceVisit = workspaceVisitDAO.create(userEntity, workspaceEntity, new Date()); } workspaceVisitDAO.updateNumVisitsAndLastVisit(workspaceVisit, workspaceVisit.getNumVisits() + 1, new Date()); } } } public long getNumVisits(WorkspaceEntity workspaceEntity) { UserEntity userEntity = sessionController.getLoggedUserEntity(); if (userEntity == null) { return 0l; } else { return getNumVisits(workspaceEntity, userEntity); } } public long getNumVisits(WorkspaceEntity workspaceEntity, UserEntity userEntity) { WorkspaceVisit workspaceVisit = workspaceVisitDAO.findByUserEntityAndWorkspaceEntity(userEntity, workspaceEntity); if (workspaceVisit == null) { return 0l; } return workspaceVisit.getNumVisits(); } public List<WorkspaceEntity> listWorkspaceEntitiesByMinVisitsOrderByLastVisit(UserEntity userEntity, Long numVisits) { List<WorkspaceVisit> workspaceVisits = workspaceVisitDAO.listByUserEntityAndMinVisitsOrderByLastVisit(userEntity, numVisits, null, null); List<WorkspaceEntity> result = new ArrayList<>(workspaceVisits.size()); for (WorkspaceVisit workspaceVisit : workspaceVisits) { result.add(workspaceEntityController.findWorkspaceEntityById(workspaceVisit.getWorkspaceEntityId())); } return result; } public List<WorkspaceEntity> listEnrolledWorkspaceEntitiesByMinVisitsOrderByLastVisit(UserEntity userEntity, Long numVisits) { List<WorkspaceEntity> workspaceEntities = workspaceEntityController.listWorkspaceEntitiesByWorkspaceUser(userEntity); Map<Long, WorkspaceEntity> workspaceEntityMap = new HashMap<>(); for (WorkspaceEntity workspaceEntity : workspaceEntities) { workspaceEntityMap.put(workspaceEntity.getId(), workspaceEntity); } List<WorkspaceVisit> workspaceVisits = workspaceVisitDAO.listByWorkspaceEntityIdsAndUserEntityAndMinVisitsOrderByLastVisit( workspaceEntityMap.keySet(), userEntity, numVisits, null, null); List<WorkspaceEntity> result = new ArrayList<>(workspaceVisits.size()); for (WorkspaceVisit workspaceVisit : workspaceVisits) { result.add(workspaceEntityMap.get(workspaceVisit.getWorkspaceEntityId())); } return result; } public Date getLastVisit(WorkspaceEntity workspaceEntity) { UserEntity userEntity = sessionController.getLoggedUserEntity(); if (userEntity == null) { return null; } else { return getLastVisit(workspaceEntity, userEntity); } } public Date getLastVisit(WorkspaceEntity workspaceEntity, UserEntity userEntity) { WorkspaceVisit workspaceVisit = workspaceVisitDAO.findByUserEntityAndWorkspaceEntity(userEntity, workspaceEntity); if (workspaceVisit == null) { return null; } return workspaceVisit.getLastVisit(); } }