package info.ozkan.vipera.views.patient;
import info.ozkan.vipera.business.patient.PatientFacade;
import info.ozkan.vipera.business.patient.PatientManagerResult;
import info.ozkan.vipera.business.patient.PatientManagerStatus;
import info.ozkan.vipera.entities.Patient;
import info.ozkan.vipera.jsf.FacesMessage2;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
/**
* Hasta silme ekranı
*
* @author Ömer Özkan
*
*/
@Named("patientDelete")
@Scope("session")
public class PatientDeleteBean {
/**
* LOGGER
*/
private static final Logger LOGGER = LoggerFactory
.getLogger(PatientDeleteBean.class);
/**
* Silme başarısız ise gösterilecek olan mesajın özeti
*/
private static final String DELETE_UNSUCCESSFULL_MSG_SUMMARY =
"Silme Başarısız!";
/**
* Silme işlemi başarılı ise gösterilecek olan mesajın özeti
*/
private static final String DELETED_MSG_SUMMARY = "Hasta silindi!";
/**
* Silme işlemi gerçekleştikten sonra form tekrar yüklenir. Fakat silme
* işlemi tekrar yapılamaz.
*/
private boolean disabled;
/**
* Id
*/
private Long id;
/**
* Hasta
*/
private Patient patient;
/**
* İşletme nesnesi
*/
@Inject
private PatientFacade patientFacade;
/**
* Hasta yükleme işlemi yapar
*
*/
public void loadPatient() {
if (differentId()) {
setPatient(PatientLoader.loadPatient(patientFacade, getId()));
setDisabled(false);
}
}
/**
* Başarılı mesajı oluşturur
*
* @param context
*/
private void addSuccessfullMessage(final FacesContext context) {
final String detail =
String.format("Hasta %s-%s sistemden kaldırıldı!", getPatient()
.getTckn(), getPatient().getFullname());
context.addMessage(null, new FacesMessage2(FacesMessage.SEVERITY_INFO,
DELETED_MSG_SUMMARY, detail));
}
/**
* Başarısız mesajı oluşturur
*
* @param context
*/
private void addUnsuccessfullMessage(final FacesContext context) {
final String detail =
"Silme işlemi başarısız oldu! Hasta daha önce silinmiş olabilir!";
context.addMessage(null, new FacesMessage2(FacesMessage.SEVERITY_FATAL,
DELETE_UNSUCCESSFULL_MSG_SUMMARY, detail));
}
/**
* Silme işlemini gerçekleştirir
*/
public void delete() {
final FacesContext context = FacesContext.getCurrentInstance();
final PatientManagerResult result = patientFacade.delete(getPatient());
if (deleteSuccess(result)) {
addSuccessfullMessage(context);
LOGGER.info("The patient '{} - {}' has deleted!",
patient.getTckn(), patient.getFullname());
disabled = true;
} else {
addUnsuccessfullMessage(context);
LOGGER.error("The patient '{} - {}' cannot be deleted!",
patient.getTckn(), patient.getFullname());
}
}
/**
* Silme işlemi başarılı ise true dönderir
*
* @param result
* @return
*/
private boolean deleteSuccess(final PatientManagerResult result) {
final PatientManagerStatus status = result.getStatus();
return status.equals(PatientManagerStatus.SUCCESS);
}
/**
* Bir önceki yüklenen hastanın farklı olup olmadığı kontrol edilir.
*
* @return
*/
private boolean differentId() {
return getPatient() == null || !getPatient().getId().equals(getId());
}
/**
* @return the id
*/
public Long getId() {
return id;
}
/**
* @return the patient
*/
public Patient getPatient() {
return patient;
}
/**
* @return the disabled
*/
public boolean isDisabled() {
return disabled;
}
/**
* @param disabled
* the disabled to set
*/
public void setDisabled(final boolean disabled) {
this.disabled = disabled;
}
/**
* @param id
* the id to set
*/
public void setId(final Long id) {
this.id = id;
}
/**
* @param patient
* the patient to set
*/
public void setPatient(final Patient patient) {
this.patient = patient;
}
/**
* @param patientFacade
* the patientFacade to set
*/
public void setPatientFacade(final PatientFacade patientFacade) {
this.patientFacade = patientFacade;
}
/**
* Hasta silindi ise Silindi değilse Evet yazısı dönderir
*
* @return
*/
public String getButtonValue() {
return disabled ? "Silindi" : "Evet";
}
}