diff --git a/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java b/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java index ff97a7d..1ca340f 100644 --- a/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java @@ -22,6 +22,11 @@ import jpa.PrimaryHealthCareCenterJPA; import jpa.QuestionJPA; import jpa.SpecialistDoctorJPA; +/*** + * + * @author Marcos García Núñez (mgarcianun@uoc.edu) + * + */ @Stateless public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { // Persistence Unit Context @@ -29,7 +34,9 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { private EntityManager entman; /** - * Metodo que devuelve todas las especialidades medicas + * Metodo que devuelve todas las especialidades medicas registradas en el sistema + * + * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). */ public List listAllMedicalSpecialities() { return this.listMedicalSpecialitiesPaged(0, 0); @@ -38,14 +45,26 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { /** * Metodo que devuelve las especialidades médicas de forma paginada * - * Acepta como parametro la página (comenzando en 0) y el número de elementos de - * cada página + * Acepta como parametro la página (comenzando en 0) y el número de elementos de cada página. * + * si pageSize == 0, entonces se devuelven todas las especialidades registradas (Se ignora el parámetro). + * + * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). */ public List listMedicalSpecialitiesPaged(int pageNumber, int pageSize) { return listMedicalSpecialitiesFiltered(null, pageNumber, pageSize); } + /** + * Método que devuelve una lista de espcialidades médicas que tienen una coincidencia parcial en el nombre o en la descripción con el termino de búsqueda (searchTerm) + * especificado. + * + * Además permite la paginacción de datos. Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * + * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el parámetro y devuelven todas las especialidades existentes. + * + * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). + */ public List listMedicalSpecialitiesFiltered(String searchTerm, int pageNumber, int pageSize) { String strQuery = "SELECT ms from MedicalSpecialtyJPA ms %s order by ms.name, ms.description"; String strFilter = ""; @@ -78,14 +97,36 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return allSpecialities; } + /** + * Método que devuelve todos los CAPs registrados en el sistema + * + * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). + */ public List listAllCAPs() { return this.listCAPsPaged(0, 0); } + /** + * Método que devuelve una lista de CAPs (Centros de Atención Primarios) de forma paginada + * + * Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * + * @return Devuelve una Lista de MedicalSpecialtyTO (Transfer Objects). + */ public List listCAPsPaged(int pageNumber, int pageSize) { return this.listCAPsFiltered(null, pageNumber, pageSize); } + /** + * Método que devuelve una lista de CAPs (Centros de Atención Primarios) que tienen una coincidencia parcial en el nombre o en la localización con el termino de búsqueda + * (searchTerm) especificado. + * + * Además permite la paginacción de datos. Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * + * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el parámetro y devuelven todos los CAPs existentes. + * + * @return Devuelve una Lista de PrimaryHealthCareCenterTO (Transfer Objects). + */ public List listCAPsFiltered(String searchTerm, int pageNumber, int pageSize) { String strQuery = "SELECT phc from PrimaryHealthCareCenterJPA phc %s order by phc.name, phc.location"; String strFilter = ""; @@ -118,14 +159,35 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return allCAPs; } + /** + * Método que devuelve una lista con todos los médicos de familia registrados en el sistema. + * + * @return Devuelve una Lista de FamilyDoctorTO (Transfer Objects). + */ public List listAllFamilyDoctors() { return this.listFamilyDoctorsPaged(0, 0); } + /** + * Método que devuelve una lista con todos los médicos de familia registrados en el sistema de forma paginada. + * + * Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * + * @return Devuelve una Lista de FamilyDoctorTO (Transfer Objects). + */ public List listFamilyDoctorsPaged(int pageNumber, int pageSize) { return this.listFamilyDoctorsFiltered(null, pageNumber, pageSize); } + /** + * Método que devuelve una lista de médicos de familia que tienen una coincidencia parcial en el nombre o en los apellidos con el termino de búsqueda (searchTerm) especificado. + * + * Además permite la paginacción de datos. Si pageSize == 0 no se realiza paginación y se devuelven todos los resultados. + * + * Si serachTerm es nulo o cadena vacía entonces no se tiene en cuenta el parámetro y devuelven todos los registros existentes. + * + * @return Devuelve una Lista de FamilyDoctorTO (Transfer Objects). + */ public List listFamilyDoctorsFiltered(String searchTerm, int pageNumber, int pageSize) { String strQuery = "SELECT fd FROM FamilyDoctorJPA fd %s order by fd.name, fd.surname"; String strFilter = ""; @@ -158,6 +220,11 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return allFDTOs; } + /** + * Método que convierte un objecto de tipo MedicalSpecialtyJPA (JPA) a su equivalente MedicalSpecialtyTO (Tranfer Object) + * + * @return MedicalSpecialtyTO (Transfer Object de una especialidad médica) + */ public MedicalSpecialtyTO getPOJOforMedicalSpecialtyJPA(MedicalSpecialtyJPA ms) { MedicalSpecialtyTO msTO = null; @@ -168,6 +235,11 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return msTO; } + /** + * Método que convierte un objecto de tipo PrimaryHealthCareCenterJPA (JPA) a su equivalente PrimaryHealthCareCenterTO (Tranfer Object) + * + * @return PrimaryHealthCareCenterTO (Transfer Object de un CAP) + */ public PrimaryHealthCareCenterTO getPOJOforPrimaryHealthCareCenterJPA(PrimaryHealthCareCenterJPA phc) { PrimaryHealthCareCenterTO phcTO = null; @@ -178,6 +250,14 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return phcTO; } + /** + * Método que convierte un objecto de tipo SpecialistDoctorJPA (JPA) a su equivalente SpecialistDoctorTO (Tranfer Object) + * + * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un + * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * + * @return SpecialistDoctorTO (Transfer Object de un médico especialista) + */ public SpecialistDoctorTO getPOJOforSpecialistDoctorJPA(SpecialistDoctorJPA sd, int nestedProps) { SpecialistDoctorTO sdTO = null; @@ -194,6 +274,14 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return sdTO; } + /** + * Método que convierte un objecto de tipo FamilyDoctorJPA (JPA) a su equivalente FamilyDoctorTO (Tranfer Object) + * + * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un + * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * + * @return FamilyDoctorTO (Transfer Object de un médico especialista) + */ public FamilyDoctorTO getPOJOforFamilyDoctorJPA(FamilyDoctorJPA fd, int nestedProps) { FamilyDoctorTO fdTO = null; @@ -210,6 +298,14 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return fdTO; } + /** + * Método que convierte un objecto de tipo PatientJPA (JPA) a su equivalente PatientTO (Tranfer Object) + * + * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un + * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * + * @return PatientTO (Transfer Object de un médico especialista) + */ public PatientTO getPOJOforPatientJPA(PatientJPA pat, int nestedProps) { PatientTO paTO = null; @@ -226,11 +322,21 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return paTO; } + /** + * Método que recupera un paciente a partir de su Identificador (Id) de base de datos. + * + * @return PatientTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ public PatientTO findPatientById(int patientId) { // Recuperamos propiedades anidadas 1 nivel! return this.getPOJOforPatientJPA(entman.find(PatientJPA.class, patientId), 1); } + /** + * Método que recupera un paciente a partir de su CIP (Código de Identificación de Paciente) + * + * @return PatientTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ public PatientTO findPatientByCode(String code) { TypedQuery query = entman.createQuery("from PatientJPA pat where pat.personalIdentificationCode=:code", PatientJPA.class); query.setMaxResults(1); @@ -243,10 +349,15 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return null; } - public PatientTO findPatientByNif(String searchValue) { + /** + * Método que recupera un paciente a partir de su NIF + * + * @return PatientTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ + public PatientTO findPatientByNif(String searchedNIF) { TypedQuery query = entman.createQuery("from PatientJPA pat where pat.nif=:nif", PatientJPA.class); query.setMaxResults(1); - query.setParameter("nif", searchValue); + query.setParameter("nif", searchedNIF); List results = query.getResultList(); if (results.size() > 0) @@ -255,10 +366,20 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return null; } + /** + * Método que recupera un médico de familia a partir de su Identificador (Id) de base de datos. + * + * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ public FamilyDoctorTO findFamilyDoctorById(int ProfessionalNumberId) { return this.getPOJOforFamilyDoctorJPA(entman.find(FamilyDoctorJPA.class, ProfessionalNumberId), 1); } + /** + * Método que recupera un médico de familia a partir de su NP (Número de profesional) + * + * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ public FamilyDoctorTO findFamilyDoctorByCode(String code) { TypedQuery query = entman.createQuery("from FamilyDoctorJPA d where d.professionalNumber=:code", FamilyDoctorJPA.class); @@ -271,10 +392,15 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return null; } - public FamilyDoctorTO findFamilyDoctorByNif(String searchValue) { + /** + * Método que recupera un médico de familia a partir de su NIF + * + * @return FamilyDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ + public FamilyDoctorTO findFamilyDoctorByNif(String searchedNIF) { TypedQuery query = entman.createQuery("from FamilyDoctorJPA d where d.nif=:nif", FamilyDoctorJPA.class); query.setMaxResults(1); - query.setParameter("nif", searchValue); + query.setParameter("nif", searchedNIF); List results = query.getResultList(); if (results.size() > 0) @@ -283,10 +409,20 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return null; } + /** + * Método que recupera un médico especialista a partir de su Identificador (Id) de base de datos. + * + * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ public SpecialistDoctorTO findSpecialistDoctorById(int ProfessionalNumberId) { return this.getPOJOforSpecialistDoctorJPA(entman.find(SpecialistDoctorJPA.class, ProfessionalNumberId), 1); } + /** + * Método que recupera un médico especialista a partir de su NP (Número de profesional) + * + * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ public SpecialistDoctorTO findSpecialistDoctorByCode(String code) { TypedQuery query = entman.createQuery("from SpecialistDoctorJPA d where d.professionalNumber=:code", SpecialistDoctorJPA.class); @@ -299,10 +435,15 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return null; } - public SpecialistDoctorTO findSpecialistDoctorByNif(String searchValue) { + /** + * Método que recupera un médico especialista a partir de su NIF + * + * @return SpecialistDoctorTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ + public SpecialistDoctorTO findSpecialistDoctorByNif(String searchedNIF) { TypedQuery query = entman.createQuery("from SpecialistDoctorJPA d where d.nif=:nif", SpecialistDoctorJPA.class); query.setMaxResults(1); - query.setParameter("nif", searchValue); + query.setParameter("nif", searchedNIF); List results = query.getResultList(); if (results.size() > 0) @@ -311,6 +452,14 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal { return null; } + /** + * Método que convierte un objecto de tipo QuestionJPA (JPA) a su equivalente QuestionTO (Tranfer Object) + * + * El parámetro nestedProps es un valor entero que indica a que nivel de profundidad se debe navegar a través de las propiedades relacionadas para convertirlas de JPA a TO. Un + * valor 0 indica que no se convertirá ninguna propiedad que tenga un entidad JPA relacionada (tendrá valor null en el objeto TO). + * + * @return QuestionTO (Transfer Object del objeto recuperado) o null si no se encuentra el objeto buscado + */ public QuestionTO getPOJOforQuestionJPA(QuestionJPA qs, int nestedProps) { QuestionTO qsTO = null; diff --git a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java index a94aeda..ae8cba6 100644 --- a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java @@ -32,6 +32,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote { @PersistenceContext(unitName = "MyHealth") private EntityManager entman; + //Propiedad que permite el acceso local a los métodos del EJB de servicios comunes (para recuperar entidades, etc). @EJB CommonFacadeLocal commonServices; @@ -96,8 +97,6 @@ public class ProfileFacadeBean implements ProfileFacadeRemote { * @return PatientTO Transfer Object correspondiente al paciente registrado. */ public PatientTO registerPatient(int id, String nif, String name, String surname, String password, String email) { - PatientTO paTO = null; - PatientJPA pat = new PatientJPA(this.getNextPersonalIdentificationCode(), nif, name, surname, HashUtils.hashMD5(password), email, null); entman.persist(pat); @@ -145,8 +144,6 @@ public class ProfileFacadeBean implements ProfileFacadeRemote { * @return FamilyDoctorTO Transfer Object correspondiente al médico de familia registrado. */ public FamilyDoctorTO registerFamilyDoctor(int id, String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterTO cap) throws Exception { - FamilyDoctorTO fdTO = null; - PrimaryHealthCareCenterJPA phcC = entman.find(PrimaryHealthCareCenterJPA.class, cap.getId()); if (phcC == null) { throw new Exception("No se encuentra el centro de atención primaria con identificador: " + cap.getName()); @@ -272,7 +269,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote { /*** * Cambia el CAP (Centro de Atención Primaria) asignado a un médico de familia. * - * Recibe como parametros el identificador del médico y el identificador del nuevo CAP a asginar. + * Recibe como parametros el identificador del médico y el identificador del nuevo CAP a asginar. * * Si el identificador del médico no corresponde a ningún médico de familia registrado se lanza una excepción. *