package org.netomi.tracker.service; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.netomi.tracker.model.Satellite; import org.netomi.tracker.model.TleEntry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Service public class SatelliteServiceImpl implements SatelliteService { private final static Logger logger = LoggerFactory.getLogger(SatelliteServiceImpl.class); @PersistenceContext private EntityManager em; public EntityManager getEntityManager() { return em; } @Transactional(propagation = Propagation.REQUIRED) public void addSatellite(final Satellite sat) { if (logger.isDebugEnabled()) { logger.debug("addSatellite(" + sat + ")"); } em.persist(sat); } @Transactional(propagation = Propagation.REQUIRED) public Satellite updateSatellite(final Satellite sat) { if (logger.isDebugEnabled()) { logger.debug("updateSatellite(" + sat + ")"); } return em.merge(sat); } @Transactional(propagation = Propagation.REQUIRED) public Satellite getSatellite(final long catalogNumber) { if (logger.isDebugEnabled()) { logger.debug("getSatellite(int)"); } Query q = em.createNamedQuery(Satellite.QUERY_BY_CATALOGID).setParameter("catalogNumber", catalogNumber); @SuppressWarnings("rawtypes") List result = q.getResultList(); if (result == null || result.size() == 0) { return null; } else { return (Satellite) q.getSingleResult(); } } @SuppressWarnings("unchecked") @Transactional(propagation = Propagation.NOT_SUPPORTED) public List<Satellite> getSatellites() { if (logger.isDebugEnabled()) { logger.debug("getSatellites()"); } return (List<Satellite>) em.createNamedQuery(Satellite.QUERY_ALL).getResultList(); } @Transactional(propagation = Propagation.REQUIRED) public TleEntry getLatestTleEntry(final Satellite sat) { if (logger.isDebugEnabled()) { logger.debug("getTleEntry(int)"); } Query q = em.createNamedQuery(TleEntry.QUERY_BY_SATELLITE).setParameter("satellite", sat); @SuppressWarnings("rawtypes") List result = q.getResultList(); if (result == null || result.size() == 0) { return null; } else { return (TleEntry) q.getSingleResult(); } } @Transactional(propagation = Propagation.REQUIRED) public TleEntry updateTleEntry(final TleEntry tle) { if (logger.isDebugEnabled()) { logger.debug("updateTleEntry(" + tle + ")"); } return em.merge(tle); } @Transactional public void shutdown() { em.createNativeQuery("SHUTDOWN").executeUpdate(); } }