package persistency.exposed; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.NoResultException; import javax.persistence.Query; import javax.servlet.http.HttpServletRequest; import persistency.entities.LoggedUser; import persistency.entities.Session; import service.rest.wrappers.SessionBasic; import service.rest.wrappers.SessionWrapped; import utils.DBUtils; public class SessionExposedBasic { public EntityManager entityManager = null; public static final String JTA_PU_NAME = "statCreateTablesJTA"; public SessionExposedBasic() { entityManager = DBUtils.getEMF().createEntityManager(); } public void createEntity(Session e) { EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); entityManager.persist(e); transaction.commit(); } public void updateEntity(Session e) { EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); entityManager.merge(e); transaction.commit(); } public List<SessionBasic> allEntities(HttpServletRequest request) { Query namedQuery = entityManager.createNamedQuery("allSessionsSQL"); List<Session> sessionList = namedQuery.getResultList(); List<SessionBasic> resultList = toSessionBasic(sessionList, request); return resultList; } public List<Session> allEntitiesRaw() { Query namedQuery = entityManager.createNamedQuery("allSessionsSQL"); List<Session> sessionList = namedQuery.getResultList(); return sessionList; } public List<SessionBasic> allEntitiesOnDate(HttpServletRequest hsr, int date) { List<SessionBasic> allEntities = allEntities(hsr); List<SessionBasic> entriesOnDate = new ArrayList<SessionBasic>(); for (SessionBasic sessionBasic : allEntities) { if(sessionBasic.getDate().startsWith(date+".")){ List<String> speakers = sessionBasic.getSpeakers(); if(speakers.size() > 1){ for (int i = 0; i < speakers.size(); i++) { if(i+1<speakers.size()){ speakers.set(i, speakers.get(i)+","); } } } entriesOnDate.add(sessionBasic); } } return entriesOnDate; } public List<SessionBasic> allEntities() { Query namedQuery = entityManager.createNamedQuery("allSessionsSQL"); List<Session> sessionList = namedQuery.getResultList(); List<SessionBasic> resultList = toSessionBasic(sessionList, null); return resultList; } private List<SessionBasic> toSessionBasic(List<Session> sessionList, HttpServletRequest request) { List<SessionBasic> resultList = new ArrayList<SessionBasic>(); LoggedUser p = null; if(request != null){ LoggedUserExposed pe = new LoggedUserExposed(); p = pe.getCurrentUser(request); } for (Session session : sessionList) { if(p != null){ session.setSelected(p.getSessions().contains(session)); } resultList.add(new SessionBasic(session)); } Collections.sort(resultList); return resultList; } private int getSpeakerRating(LoggedUser person, Session sessionEntry) { if (person != null) { Map<Integer, Integer> sessions = person.getSpeakerRatings(); if (sessions != null) { Set<Integer> sessionSet = sessions.keySet(); for (Integer sessionId : sessionSet) { if (sessionId == sessionEntry.getId()) { return sessions.get(sessionId); } } } } return 0; } private boolean isSelected(LoggedUser person, Session sessionEntry) { if (person != null) { List<Session> sessions = person.getSessions(); for (Session session : sessions) { if (session.getId() == sessionEntry.getId()) { return true; } } } return false; } private String computeTimeRange(SessionBasic sessionEntry) { int startTimeInt = sessionEntry.getStartTime(); String startTime = startTimeInt + ""; String minutes = startTime.substring(startTime.length() - 2); int minInt = Integer.parseInt(minutes); int duration = sessionEntry.getDuration(); int durationIndex = 1; int endTime = 0; if (minInt + duration >= 60) { durationIndex = (duration + minInt) / 60; endTime = startTimeInt + durationIndex * 40 + duration; } else { endTime = startTimeInt + duration; } String endTimeStr = endTime + ""; return (startTimeInt / 100) + ":" + minutes; // +" - "+(endTime/100)+":"+endTimeStr.substring(endTimeStr.length()-2); } public Session findSessionById(String id) { EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); Session result = null; try { Query namedQuery = entityManager.createNamedQuery("getSessionById"); namedQuery.setParameter("id", Integer.parseInt(id)); try { result = (Session) namedQuery.getSingleResult(); } catch (NoResultException e) { result = null; } } finally { transaction.commit(); } return result; } public SessionWrapped findSessionByIdWrapped(String id, LoggedUser p) { EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); Session result = null; try { Query namedQuery = entityManager.createNamedQuery("getSessionById"); namedQuery.setParameter("id", Integer.parseInt(id)); try { result = (Session) namedQuery.getSingleResult(); } catch (NoResultException e) { result = null; } } finally { transaction.commit(); } return result == null ? null : new SessionWrapped(result, p); } public void incSessionViews(Session e) { e.setViews(e.getViews() + 1); createEntity(e); } }