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.common.EmailValidator;
import info.ozkan.vipera.entities.Authorize;
import info.ozkan.vipera.entities.Patient;
import info.ozkan.vipera.jsf.FacesMessage2;
import java.io.Serializable;
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 güncelleme ekranı
*
* @author Ömer Özkan
*
*/
@Named("patientUpdate")
@Scope("session")
public class PatientUpdateBean implements Serializable {
/**
* Serial
*/
private static final long serialVersionUID = -3592733254263641264L;
/**
* LOGGER
*/
private static final Logger LOGGER = LoggerFactory
.getLogger(PatientUpdateBean.class);
/**
* Beklenmeyen hata mesajı
*/
private static final String UNEXPECTED_ERROR_MSG =
"Hasta güncellenemedi! Beklenmeyen hata!";
/**
* Doğum tarihi geçersiz hata mesajı
*/
private static final String BIRTH_DATE_INVALID_ERROR_MSG =
"Girdiğiniz doğum tarihi geçersiz!";
/**
* Eposta geçersiz hata mesajı
*/
private static final String EMAIL_INVALID_ERROR_MSG =
"Girdiğiniz eposta adresi geçersiz!";
/**
* Boş string
*/
private static final String EMPTY = "";
/**
* Hasta nesnesi
*/
private Patient patient;
/**
* Hasta id
*/
private Long id;
/**
* Business object
*/
@Inject
private PatientFacade patientFacade;
/**
* FacesContext
*/
private FacesContext context;
/**
* Üye aktifliği
*/
private boolean enabled;
/**
* hasta yeniden yüklensin mi
*/
private boolean loadAgain = true;
/**
* Hastanın sistemden getirilmesini sağlar
*
*/
public void loadPatient() {
if (loadAgain) {
patient = PatientLoader.loadPatient(patientFacade, id);
setEnabledByPatient();
} else {
loadAgain = true;
}
}
/**
* Üye aktif ise {@link PatientUpdateBean#enabled} değerini true yapar
*/
private void setEnabledByPatient() {
if (patient.getEnable().equals(Authorize.ENABLE)) {
enabled = true;
} else {
enabled = false;
}
}
/**
* Hasta bilgilerinin güncellenmesini sağlar
*/
public void save() {
loadAgain = false;
context = FacesContext.getCurrentInstance();
final boolean success = checkFields();
setPatientActivation();
if (success) {
updatePatient();
}
}
/**
* Hastanın üye aktifliğini nesneye atar
*/
protected void setPatientActivation() {
if (enabled) {
patient.setEnable(Authorize.ENABLE);
} else {
patient.setEnable(Authorize.DISABLE);
}
}
/**
* Alanların kontrolünü gerçekleştirir
*
* @return
*/
private boolean checkFields() {
boolean success = true;
if (isValidEmail()) {
createErrorMessage(EMAIL_INVALID_ERROR_MSG);
success = false;
}
if (!BirthDateChecker.checkBirthDateInPast(patient.getBirthDate())) {
createErrorMessage(BIRTH_DATE_INVALID_ERROR_MSG);
success = false;
}
return success;
}
/**
* Eposta adresinin geçerliliğini kontrol eder
*
* @return
*/
private boolean isValidEmail() {
return !patient.getEmail().isEmpty()
&& !EmailValidator.isValid(patient.getEmail());
}
/**
* Hekimi günceller
*/
private void updatePatient() {
final PatientManagerResult result = patientFacade.update(patient);
if (isSuccess(result)) {
final String message =
String.format("%s %s güncellendi!", patient.getTckn(),
patient.getFullname());
createSuccessMessage(message);
LOGGER.info("The patient({}-{}) has been updated!",
patient.getTckn(), patient.getFullname());
} else {
createErrorMessage(UNEXPECTED_ERROR_MSG);
LOGGER.error("The patient ({}-{}) cannot be updated!",
patient.getTckn(), patient.getFullname());
}
}
/**
* Güncelleme işlemini başarılı olup olmadığını belirler
*
* @param result
* @return
*/
private boolean isSuccess(final PatientManagerResult result) {
final PatientManagerStatus status = result.getStatus();
return status.equals(PatientManagerStatus.SUCCESS);
}
/**
* JSF bilgi mesajı ekler
*
* @param message
* mesaj
*/
private void createSuccessMessage(final String message) {
context.addMessage(null, new FacesMessage2(FacesMessage.SEVERITY_INFO,
message, EMPTY));
}
/**
* JSF hata mesajı ekler
*
* @param message
* Mesaj
*/
private void createErrorMessage(final String message) {
context.addMessage(null, new FacesMessage2(FacesMessage.SEVERITY_ERROR,
message, EMPTY));
}
/**
* @return the patient
*/
public Patient getPatient() {
return patient;
}
/**
* @param patient
* the patient to set
*/
public void setPatient(final Patient patient) {
this.patient = patient;
}
/**
* @return the id
*/
public Long getId() {
return id;
}
/**
* @param id
* the id to set
*/
public void setId(final Long id) {
this.id = id;
}
/**
* @return the enabled
*/
public boolean isEnabled() {
return enabled;
}
/**
* @param enabled
* the enabled to set
*/
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
}