package info.ozkan.vipera.dao.notification.android; import info.ozkan.vipera.business.notification.android.AndroidRegistrationDao; import info.ozkan.vipera.business.notification.android.AndroidRegistrationResult; import info.ozkan.vipera.business.notification.android.AndroidRegistrationStatus; import info.ozkan.vipera.entities.Doctor; import info.ozkan.vipera.entities.DoctorAndroidDevice; import java.util.Collections; import java.util.List; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; /** * {@link AndroidRegistrationDao} implementasyonu * * @author Ömer Özkan * */ @Named("androidRegistrationDao") public class AndroidRegistrationDaoImpl implements AndroidRegistrationDao { /** * cihazın kayıtlı olup olmadığını sorgulayan jql sorgusu */ private static final String JQL_HAS_EXIST = "from DoctorAndroidDevice a JOIN FETCH a.doctor WHERE a.doctor = :doctor " + "AND a.registrationId = :registrationId"; /** * hekime göre cihaz arar */ private static final String JQL_SELECT_BY_DOCTOR = "from DoctorAndroidDevice a JOIN FETCH a.doctor WHERE a.doctor = :doctor"; /** * persistence context */ private EntityManager em; public AndroidRegistrationResult add(final Doctor doctor, final String registrationId) { final boolean hasExist = checkHasExist(doctor, registrationId); if (!hasExist) { final DoctorAndroidDevice device = new DoctorAndroidDevice(); device.setDoctor(doctor); device.setRegistrationId(registrationId); em.merge(device); return createSuccessResult(); } else { final AndroidRegistrationResult result = new AndroidRegistrationResult(); result.setStatus(AndroidRegistrationStatus.HAS_EXIST); return result; } } /** * cihazın daha önceden kayıtlı olup olmadığını sorgular * * @param doctor * @param registrationId * @return */ private boolean checkHasExist(final Doctor doctor, final String registrationId) { final Query query = em.createQuery(JQL_HAS_EXIST); query.setParameter("doctor", doctor); query.setParameter("registrationId", registrationId); final List<DoctorAndroidDevice> devices = query.getResultList(); return devices.size() != 0; } /** * başarılı sonuç mesajı üretir * * @return */ private AndroidRegistrationResult createSuccessResult() { final AndroidRegistrationResult result = new AndroidRegistrationResult(); result.setStatus(AndroidRegistrationStatus.SUCCESS); return result; } public AndroidRegistrationResult remove(final Doctor doctor, final String registrationId) { final DoctorAndroidDevice device = em.find(DoctorAndroidDevice.class, registrationId); if (device != null) { em.remove(device); } return createSuccessResult(); } public AndroidRegistrationResult findDevices(final Doctor doctor) { AndroidRegistrationResult result; final Query query = em.createQuery(JQL_SELECT_BY_DOCTOR); query.setParameter("doctor", doctor); final List<DoctorAndroidDevice> devices = query.getResultList(); if (devices.size() > 0) { result = createSuccessResult(); result.setDevices(devices); } else { result = new AndroidRegistrationResult(); result.setStatus(AndroidRegistrationStatus.NOT_FOUND); result.setDevices(Collections.EMPTY_LIST); } return result; } /** * @param entityManager * the entityManager to set */ @PersistenceContext public void setEntityManager(final EntityManager entityManager) { em = entityManager; } }