package info.ozkan.vipera.business.doctor;
import info.ozkan.vipera.business.role.Role;
import info.ozkan.vipera.dao.doctor.DoctorBrowseFilter;
import info.ozkan.vipera.dao.doctor.DoctorDao;
import info.ozkan.vipera.dao.doctor.DoctorDaoResult;
import info.ozkan.vipera.entities.Doctor;
import java.util.List;
import javax.annotation.security.RolesAllowed;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
/**
* Hekimler üzerinde işlem yapan işletme katmanı sınıfı
*
* @author Ömer Özkan
*
*/
@Named("doctorManager")
public class DoctorManagerImpl implements DoctorManager {
/**
* LOGGER
*/
private static final Logger LOGGER = LoggerFactory
.getLogger(DoctorManagerImpl.class);
/**
* TCKN uzunluk
*/
private static final int TCKN_LENGTH = 11;
/**
* Veritabanı işlemleri
*/
@Inject
private DoctorDao doctorDao;
/*
* (non-Javadoc)
*
* @see
* info.ozkan.vipera.business.doctor.DoctorManager#add(info.ozkan.vipera
* .entities.Doctor)
*/
@Transactional
@RolesAllowed(Role.ROLE_ADMIN)
public DoctorManagerResult add(final Doctor doctor) {
final DoctorManagerResult result = new DoctorManagerResult();
final DoctorDaoResult daoResult = doctorDao.add(doctor);
if (!daoResult.isSuccess()) {
LOGGER.info("The new doctor cannot be added");
result.addError(daoResult.getError());
result.setSuccess(false);
} else {
LOGGER.info("The new doctor {} is added", doctor.getFullname());
result.setSuccess(true);
}
return result;
}
/**
* @param doctorDao
* the doctorDao to set
*/
public void setDoctorDao(final DoctorDao doctorDao) {
this.doctorDao = doctorDao;
}
/*
* (non-Javadoc)
*
* @see info.ozkan.vipera.business.doctor.DoctorManager#get(Long)
*/
@Transactional
public DoctorManagerResult getByTckn(final Long tckn) {
final DoctorDaoResult daoResult = doctorDao.getByTckn(tckn);
final DoctorManagerResult result = new DoctorManagerResult();
result.addDoctor(daoResult.getDoctor());
result.setSuccess(daoResult.isSuccess());
result.addError(daoResult.getError());
return result;
}
/*
* (non-Javadoc)
*
* @see
* info.ozkan.vipera.business.doctor.DoctorManager#search(DoctorBrowseModel)
*/
@Transactional
@RolesAllowed(Role.ROLE_ADMIN)
public DoctorManagerResult search(final DoctorBrowseModel model) {
final DoctorBrowseFilter filter = new DoctorBrowseFilter();
if (model.getTckn() != null
&& model.getTckn().toString().length() == TCKN_LENGTH) {
filter.addFilter(Doctor.TCKN, model.getTckn());
} else {
filter.addFilter(Doctor.NAME, model.getName());
filter.addFilter(Doctor.SURNAME, model.getSurname());
filter.addFilter(Doctor.TITLE, model.getTitle());
filter.addFilter(Doctor.ENABLED, model.getActive());
}
final List<Doctor> doctors = doctorDao.find(filter);
final DoctorManagerResult result = new DoctorManagerResult();
result.setDoctors(doctors);
return result;
}
@Transactional
public DoctorManagerResult getById(final Long id) {
final DoctorDaoResult daoResult = doctorDao.getById(id);
return daoResultToManagerResult(daoResult);
}
@Transactional
@RolesAllowed({ Role.ROLE_ADMIN, Role.ROLE_DOCTOR })
public DoctorManagerResult update(final Doctor doctor) {
final DoctorDaoResult daoResult = doctorDao.update(doctor);
return daoResultToManagerResult(daoResult);
}
@Transactional
@RolesAllowed(Role.ROLE_ADMIN)
public DoctorManagerResult delete(final Doctor doctor) {
final DoctorDaoResult daoResult = doctorDao.delete(doctor);
return daoResultToManagerResult(daoResult);
}
/**
* Dao sonuç nesnesini Manager sonuç nesnesine çevirir
*
* @param daoResult
* @return
*/
private DoctorManagerResult daoResultToManagerResult(
final DoctorDaoResult daoResult) {
final DoctorManagerResult result = new DoctorManagerResult();
result.setSuccess(daoResult.isSuccess());
result.addDoctor(daoResult.getDoctor());
return result;
}
@Transactional
public DoctorManagerResult getByApi(final String apiKey) {
final DoctorDaoResult daoResult = doctorDao.getByApi(apiKey);
return daoResultToManagerResult(daoResult);
}
}