package info.ozkan.vipera.business.doctorpatient;
import info.ozkan.vipera.business.role.Role;
import info.ozkan.vipera.dao.doctor.DoctorDao;
import info.ozkan.vipera.dao.doctor.DoctorDaoResult;
import info.ozkan.vipera.dao.doctorpatient.DoctorPatientDao;
import info.ozkan.vipera.entities.Doctor;
import info.ozkan.vipera.entities.Patient;
import java.util.List;
import javax.annotation.security.RolesAllowed;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.transaction.annotation.Transactional;
/**
* Hekim hasta işlemlerini yapan manager sınıfı
*
* @author Ömer Özkan
*
*/
@Named("doctorPatientManager")
public class DoctorPatientManagerImpl implements DoctorPatientManager {
/**
* Veri katmanı nesnesi
*/
@Inject
private DoctorPatientDao doctorPatientDao;
/**
* Hekim üzerinde veritabanı işlemleri yapan veri katmanı nesnesi
*/
@Inject
private DoctorDao doctorDao;
@Transactional
@RolesAllowed(Role.ROLE_ADMIN)
public DoctorPatientManagerResult assign(final Doctor doctor,
final Patient patient) {
return doctorPatientDao.addPatientToDoctor(doctor, patient);
}
@Transactional
@RolesAllowed(Role.ROLE_ADMIN)
public void loadPatients(final Doctor doctor) {
doctorPatientDao.loadPatientsByDoctor(doctor);
}
/**
* @param doctorPatientDao
* the doctorPatientDao to set
*/
public void setDoctorPatientDao(final DoctorPatientDao doctorPatientDao) {
this.doctorPatientDao = doctorPatientDao;
}
@Transactional
@RolesAllowed(Role.ROLE_ADMIN)
public DoctorPatientManagerResult removeAssignment(final Doctor doctor,
final Patient patient) {
final List<Patient> patientList = doctor.getPatients();
DoctorPatientManagerResult result;
if (patientList.remove(patient)) {
result = updateDoctor(doctor);
} else {
result = assigmentNotExistResult();
}
return result;
}
/**
* Hekim güncellenir
*
* @param doctor
* Hekim
* @return
*/
private DoctorPatientManagerResult updateDoctor(final Doctor doctor) {
DoctorPatientManagerResult result;
final DoctorDaoResult daoResult = doctorDao.update(doctor);
if (daoResult.isSuccess()) {
result = successResult();
} else {
result = doctorNotExistResult();
}
return result;
}
/**
* Atama olmadığında gösterilecek olan hata
*
* @return
*/
private DoctorPatientManagerResult assigmentNotExistResult() {
final DoctorPatientManagerResult result =
new DoctorPatientManagerResult();
result.setStatus(DoctorPatientManagerStatus.ASSIGNMENT_NOT_EXIST);
return null;
}
/**
* Hekim kayıtlı olmadığında gösterilecek olan hata
*
* @return
*/
private DoctorPatientManagerResult doctorNotExistResult() {
final DoctorPatientManagerResult result =
new DoctorPatientManagerResult();
result.setStatus(DoctorPatientManagerStatus.DOCTOR_NOT_EXIST);
return result;
}
/**
* Başarılı sonuç oluşturur
*
* @return
*/
private DoctorPatientManagerResult successResult() {
final DoctorPatientManagerResult result =
new DoctorPatientManagerResult();
result.setStatus(DoctorPatientManagerStatus.SUCCESS);
return result;
}
/**
* @return the doctorDao
*/
public DoctorDao getDoctorDao() {
return doctorDao;
}
/**
* @param doctorDao
* the doctorDao to set
*/
public void setDoctorDao(final DoctorDao doctorDao) {
this.doctorDao = doctorDao;
}
@Transactional
@RolesAllowed(Role.ROLE_PATIENT)
public void loadDoctors(final Patient patient) {
doctorPatientDao.loadDoctorsByPatient(patient);
}
}