From d7d214f1e998c8676124382811c22526ab0d77f6 Mon Sep 17 00:00:00 2001 From: mgarcianun Date: Tue, 3 Dec 2019 21:49:02 +0100 Subject: [PATCH] =?UTF-8?q?Implementaci=C3=B3n=20de=20registro=20de=20usua?= =?UTF-8?q?rios=20para=20pacientes,=20medicos=20de=20familia=20y=20medicos?= =?UTF-8?q?=20especialistas.=20*=20Correcciones=20varias=20a=20clases=20JP?= =?UTF-8?q?A.=20*=20Correcciones=20en=20clases=20POJO.=20*=20Listas=20desp?= =?UTF-8?q?legables=20para=20selecci=C3=B3n=20de=20especialidaes=20y=20CAP?= =?UTF-8?q?s.=20*=20Validaciones=20varias.=20*=20Estilo=20de=20interfaz=20?= =?UTF-8?q?con=20flexUI=20de=20PrimeFaces.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.sources/MyHealth/.classpath | 3 +- 1.sources/MyHealth/docroot/header.xhtml | 2 +- .../docroot/profile/RegisterUser.xhtml | 144 ++++++++++++------ .../docroot/resources/css/estilos.css | 4 + .../MyHealth/src/TO/MedicalSpecialtyTO.java | 6 + .../src/TO/PrimaryHealthCareCenterTO.java | 32 +++- .../src/ejb/profile/ProfileFacadeBean.java | 4 +- .../src/ejb/profile/ProfileFacadeRemote.java | 8 +- .../systemAdmin/SystemAdminFacadeBean.java | 24 +++ .../systemAdmin/SystemAdminFacadeRemote.java | 2 + .../src/jpa/PrimaryHealthCareCenterJPA.java | 14 +- .../MyHealth/src/jpa/SpecialistDoctorJPA.java | 2 +- .../src/managedbean/common/UserType.java | 4 + .../profile/RegisterUserMBean.java | 119 ++++++++++----- 14 files changed, 262 insertions(+), 106 deletions(-) diff --git a/1.sources/MyHealth/.classpath b/1.sources/MyHealth/.classpath index 32e1501..b38cc9a 100644 --- a/1.sources/MyHealth/.classpath +++ b/1.sources/MyHealth/.classpath @@ -3,6 +3,7 @@ - + + diff --git a/1.sources/MyHealth/docroot/header.xhtml b/1.sources/MyHealth/docroot/header.xhtml index c0d068f..5c52793 100644 --- a/1.sources/MyHealth/docroot/header.xhtml +++ b/1.sources/MyHealth/docroot/header.xhtml @@ -88,7 +88,7 @@ - + diff --git a/1.sources/MyHealth/docroot/profile/RegisterUser.xhtml b/1.sources/MyHealth/docroot/profile/RegisterUser.xhtml index c7af620..ea150aa 100644 --- a/1.sources/MyHealth/docroot/profile/RegisterUser.xhtml +++ b/1.sources/MyHealth/docroot/profile/RegisterUser.xhtml @@ -9,85 +9,143 @@ function handleRequest(xhr, status, args) { if(args.specs) { - PF('panCentros').hide(); - $('#panCentros').fadeOut(); - PF('panEspecialidad').show() - $('#panEspecialidad').fadeIn(); + $('#panCentros').slideUp(); + $('#panEspecialidades').slideDown(); } else if (args.caps) { - PF('panEspecialidad').hide(); - $('#panEspecialidad').fadeOut(); - PF('panCentros').show() - $('#panCentros').fadeIn(); + $('#panEspecialidades').slideUp(); + $('#panCentros').slideDown(); + } else { + $('#panCentros').slideUp(); + $('#panEspecialidades').slideUp(); } } - + - - - - - - +
+
+ +
+
+ + + + +
+
+
- -
- + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- - - - - - - - - - - - - - - +
+
+
+
+
- +
+
+
+
+
+
- +
+
+
+
+
+
+
+
+
+ +
+
+ + + + #{phc.name} + #{phc.location} + +
+
+ +
+
+
+
+ +
+
+ + + + #{ms.name} + #{ms.description} + +
+
+ +
+
- - - - - - - +
+
+
+ +
+
+ +
+
+
+
diff --git a/1.sources/MyHealth/docroot/resources/css/estilos.css b/1.sources/MyHealth/docroot/resources/css/estilos.css index ff0b1b7..59fb335 100644 --- a/1.sources/MyHealth/docroot/resources/css/estilos.css +++ b/1.sources/MyHealth/docroot/resources/css/estilos.css @@ -1,3 +1,7 @@ BODY{ font-family: Verdana, Arial, Helvetica, sans-serif; +} + +.hide { + display: none; } \ No newline at end of file diff --git a/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java b/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java index 31269bc..bb60b57 100644 --- a/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java +++ b/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java @@ -41,4 +41,10 @@ public class MedicalSpecialtyTO implements Serializable { public void setDescription(String description) { this.description = description; } + + @Override + public String toString() { + return String.format("%s[name=%s]", getClass().getSimpleName(), getName()); + } + } diff --git a/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java b/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java index 886da76..5355ef5 100644 --- a/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java +++ b/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java @@ -15,16 +15,16 @@ public class PrimaryHealthCareCenterTO implements Serializable { private static final long serialVersionUID = 1L; private String name; - private String description; + private String location; public PrimaryHealthCareCenterTO() { super(); } - public PrimaryHealthCareCenterTO(String name, String description) { + public PrimaryHealthCareCenterTO(String name, String location) { this.name = name; - this.description = description; + this.location = location; } public String getName() { @@ -35,12 +35,30 @@ public class PrimaryHealthCareCenterTO implements Serializable { this.name = name; } - public String getDescription() { - return description; + public String getLocation() { + return location; } - public void setDescription(String description) { - this.description = description; + public void setLocation(String description) { + this.location = description; } + @Override + public boolean equals(Object other) { + return (other instanceof PrimaryHealthCareCenterTO) && (name != null) + ? name.equals(((PrimaryHealthCareCenterTO) other).getName()) + : (other == this); + } + + @Override + public int hashCode() { + return (name != null) + ? (this.getClass().hashCode() + name.hashCode()) + : super.hashCode(); + } + + @Override + public String toString() { + return String.format("%s[name=%s]", getClass().getSimpleName(), getName()); + } } diff --git a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java index fede361..c6719fa 100644 --- a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java @@ -67,10 +67,10 @@ public class ProfileFacadeBean implements ProfileFacadeRemote { return sdTO; } - public FamilyDoctorTO registerFamilyDoctor1(Integer id, String nif, String name, String surname, String password, String email, String cap) { + public FamilyDoctorTO registerFamilyDoctor1(Integer id, String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterTO cap) { FamilyDoctorTO fdTO = null; - PrimaryHealthCareCenterJPA phcC = entman.find(PrimaryHealthCareCenterJPA.class, cap); + PrimaryHealthCareCenterJPA phcC = entman.find(PrimaryHealthCareCenterJPA.class, cap.getName()); // TODO: Lanzar error si no encontramos el cap!!!!! if (phcC != null) { diff --git a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java index debceb4..8038dd7 100644 --- a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java +++ b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java @@ -20,15 +20,13 @@ public interface ProfileFacadeRemote { public PatientTO registerPatient(Integer id, String nif, String name, String surname, String password, String email); - public SpecialistDoctorTO registerSpecialistDoctor(Integer id, String nif, String name, String surname, String password, String email, - MedicalSpecialtyTO specialty); + public SpecialistDoctorTO registerSpecialistDoctor(Integer id, String nif, String name, String surname, String password, String email, MedicalSpecialtyTO specialty); - public FamilyDoctorTO registerFamilyDoctor1(Integer id, String nif, String name, String surname, String password, String email, String cap); + public FamilyDoctorTO registerFamilyDoctor1(Integer id, String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterTO cap); public PatientTO updatePacientData(Integer id, String nif, String name, String surname, String password, String email); - public SpecialistDoctorTO updateSpecialistDoctorData(Integer id, String nif, String name, String surname, String password, String email, - MedicalSpecialtyTO specialty); + public SpecialistDoctorTO updateSpecialistDoctorData(Integer id, String nif, String name, String surname, String password, String email, MedicalSpecialtyTO specialty); public FamilyDoctorTO updateFamilyDoctorData(Integer id, String nif, String name, String surname, String password, String email, String cap); diff --git a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java index 3c93f03..255bca7 100644 --- a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java @@ -9,7 +9,9 @@ import javax.persistence.PersistenceContext; import javax.persistence.Query; import TO.MedicalSpecialtyTO; +import TO.PrimaryHealthCareCenterTO; import jpa.MedicalSpecialtyJPA; +import jpa.PrimaryHealthCareCenterJPA; /** * EJB Session Bean Class para la Practica 2, Ejercicio 1 (ISCSD) Implementa los @@ -59,4 +61,26 @@ public class SystemAdminFacadeBean implements SystemAdminFacadeRemote { return allSpecialities; } + public Collection listAllCAPs() { + return this.listPagedAllCAPs(0, 0); + } + + public Collection listPagedAllCAPs(int pageNumber, int pageSize) { + Query query = entman.createQuery("from PrimaryHealthCareCenterJPA order by name"); + + if (pageSize > 0) { + query.setFirstResult(pageNumber * pageSize); + query.setMaxResults(pageSize); + } + + @SuppressWarnings("unchecked") + Collection allJPA = query.getResultList(); + Collection allCAPs = new ArrayList(); + + for (PrimaryHealthCareCenterJPA cap : allJPA) { + allCAPs.add(new PrimaryHealthCareCenterTO(cap.getName(), cap.getLocation())); + } + + return allCAPs; + } } diff --git a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java index 94a8e49..472581e 100644 --- a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java +++ b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeRemote.java @@ -5,6 +5,7 @@ import java.util.Collection; import javax.ejb.Remote; import TO.MedicalSpecialtyTO; +import TO.PrimaryHealthCareCenterTO; /** * Interfaz remota del EJB Definimos los métodos que estarán disponibles para @@ -19,4 +20,5 @@ public interface SystemAdminFacadeRemote { * Definimos la interfaz remota */ public Collection listAllMedicalSpecialities(); + public Collection listAllCAPs(); } \ No newline at end of file diff --git a/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java b/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java index c549e70..b63d562 100644 --- a/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java +++ b/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java @@ -19,7 +19,7 @@ public class PrimaryHealthCareCenterJPA implements Serializable { @Id private String name; - private String description; + private String location; /** * Class constructor methods @@ -28,9 +28,9 @@ public class PrimaryHealthCareCenterJPA implements Serializable { super(); } - public PrimaryHealthCareCenterJPA(String name, String description) { + public PrimaryHealthCareCenterJPA(String name, String location) { this.name = name; - this.description = description; + this.location = location; } public String getName() { @@ -41,11 +41,11 @@ public class PrimaryHealthCareCenterJPA implements Serializable { this.name = name; } - public String getDescription() { - return description; + public String getLocation() { + return location; } - public void setDescription(String description) { - this.description = description; + public void setLocation(String description) { + this.location = description; } } diff --git a/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java b/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java index 6785241..5672ff1 100644 --- a/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java +++ b/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java @@ -97,7 +97,7 @@ public class SpecialistDoctorJPA implements Serializable { } @ManyToOne - @JoinColumn(name = "MedicalSpecialtyName") + @JoinColumn(name = "MedicalSpecialtyId") public MedicalSpecialtyJPA getMedicalSpecialty() { return medicalSpecialty; } diff --git a/1.sources/MyHealth/src/managedbean/common/UserType.java b/1.sources/MyHealth/src/managedbean/common/UserType.java index b747673..891b36a 100644 --- a/1.sources/MyHealth/src/managedbean/common/UserType.java +++ b/1.sources/MyHealth/src/managedbean/common/UserType.java @@ -15,4 +15,8 @@ public enum UserType { public String getUserTypename() { return userTypename; } + + public String getName() { + return this.name(); + } } diff --git a/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java b/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java index 8ba8a13..63ebee5 100644 --- a/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java +++ b/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java @@ -3,15 +3,16 @@ package managedbean.profile; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; +import java.util.List; import java.util.Properties; import javax.annotation.PostConstruct; -import javax.enterprise.context.RequestScoped; import javax.faces.application.FacesMessage; +import javax.faces.view.ViewScoped; import javax.inject.Named; import javax.naming.Context; import javax.naming.InitialContext; +import javax.naming.NamingException; import javax.resource.NotSupportedException; import org.primefaces.PrimeFaces; @@ -26,14 +27,14 @@ import managedbean.common.UserType; import managedbean.common.ValidationUtils; /** - * ManagedBEan que gestiona la edición y actualización de una especialidad - * médica. + * ManagedBEan que gestiona el registro de usuarios: Usuarios de tipo "Paciente" + * Usuarios de tipo "Médico de Familia" usuarios de tipo "Médico especialista" * - * @author mark + * @author Marcos García Núñez (mgarcianun@uoc.edu) * */ @Named("registerUser") -@RequestScoped +@ViewScoped public class RegisterUserMBean extends ProfileMBeanBase implements Serializable { private static final long serialVersionUID = 1L; @@ -45,12 +46,13 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable private String password; private String passwordRepeat; private String email; - private HashMap userTypes; + // private HashMap userTypes; + private List userTypes; private String userType; - private String primaryHealthCareCenter; - private String medicalSpecialty; - private Collection medicalSpecialities; - private Collection healthcareCenters; + private PrimaryHealthCareCenterTO primaryHealthCareCenter; + private MedicalSpecialtyTO medicalSpecialty; + private Collection medicalSpecialitiesList; + private Collection primaryHealthCareCentersList; /** * Constructor. Inicializa la conexión con el EJB Remoto @@ -63,15 +65,27 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable @PostConstruct public void init() { - this.userTypes = new HashMap(); - this.userTypes.put(UserType.PATIENT.getUserTypename(), UserType.PATIENT.name()); - this.userTypes.put(UserType.FAMILY_DOCTOR.getUserTypename(), UserType.FAMILY_DOCTOR.name()); - this.userTypes.put(UserType.SPECIALIST_DOCTOR.getUserTypename(), UserType.SPECIALIST_DOCTOR.name()); - this.userType = UserType.PATIENT.getUserTypename(); + this.userTypes = new ArrayList(); + this.userTypes.add(UserType.PATIENT); + this.userTypes.add(UserType.FAMILY_DOCTOR); + this.userTypes.add(UserType.SPECIALIST_DOCTOR); + this.userType = UserType.PATIENT.name(); + + Properties props = System.getProperties(); + Context ctx; + try { + ctx = new InitialContext(props); + SystemAdminFacadeRemote rman = (SystemAdminFacadeRemote) ctx.lookup("java:app/MyHealth.jar/SystemAdminFacadeBean!ejb.systemAdmin.SystemAdminFacadeRemote"); + + this.medicalSpecialitiesList = rman.listAllMedicalSpecialities(); + this.primaryHealthCareCentersList = rman.listAllCAPs(); + } catch (NamingException e) { + this.manageException(e); + } } - public HashMap getUserTypes() { + public List getUserTypes() { return userTypes; } @@ -79,12 +93,6 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable switch (UserType.valueOf(this.userType)) { case SPECIALIST_DOCTOR: try { - Properties props = System.getProperties(); - Context ctx = new InitialContext(props); - SystemAdminFacadeRemote rman = (SystemAdminFacadeRemote) ctx.lookup("java:app/MyHealth.jar/SystemAdminFacadeBean!ejb.systemAdmin.SystemAdminFacadeRemote"); - - this.medicalSpecialities = rman.listAllMedicalSpecialities(); - PrimeFaces.current().ajax().addCallbackParam("specs", true); } catch (Exception e) { this.manageException(e); @@ -92,11 +100,6 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable break; case FAMILY_DOCTOR: try { - // TODO: Load Primary Healthcare Centers from remote EJB - this.healthcareCenters = new ArrayList(); - this.healthcareCenters.add(new PrimaryHealthCareCenterTO("Prueba", "Descripción prueba")); - this.healthcareCenters.add(new PrimaryHealthCareCenterTO("Centro 2", "Centro 2")); - PrimeFaces.current().ajax().addCallbackParam("caps", true); } catch (Exception e) { this.manageException(e); @@ -104,12 +107,37 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable break; case ADMINISTRADOR: case PATIENT: + PrimeFaces.current().ajax().addCallbackParam("pats", true); break; } } - public Collection getMedicalSpecialties() { - return medicalSpecialities; + public Collection getMedicalSpecialtiesList() { + return medicalSpecialitiesList; + } + +// public void setMedicalSpecialtiesList(Collection list) { +// medicalSpecialitiesList = list; +// } + + public Collection getPhcList() { + return primaryHealthCareCentersList; + } + +// public void setPhcList(Collection list) { +// primaryHealthCareCentersList = list; +// } + + public boolean isPatient() { + return (UserType.valueOf(this.userType) == UserType.PATIENT); + } + + public boolean isFamilyDoctor() { + return (UserType.valueOf(this.userType) == UserType.FAMILY_DOCTOR); + } + + public boolean isSpecialistDoctor() { + return (UserType.valueOf(this.userType) == UserType.SPECIALIST_DOCTOR); } public String getEmail() { @@ -161,9 +189,22 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable } public void addNewUser() { + int error = 0; + + if (this.isFamilyDoctor() && this.primaryHealthCareCenter == null) { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Centro de atención primaria no seleccionado", "Por favor, especifique un centro de atención primaria."); + error++; + } + if (this.isSpecialistDoctor() && this.medicalSpecialty == null) { + this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Especialidad médica no seleccionada", "Por favor, especifique una especialidad médica."); + error++; + } if (ValidationUtils.isValid(nif) == false) { this.addFacesMessage(FacesMessage.SEVERITY_WARN, "El NIF indicado no es válido", "Por favor, especifique un NIF válido."); - } else { + error++; + } + + if (error == 0) { try { switch (UserType.valueOf(this.userType)) { case PATIENT: @@ -171,11 +212,11 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable break; case FAMILY_DOCTOR: - FamilyDoctorTO fd = this.remoteManager.registerFamilyDoctor1(id, nif, name, surname, password, email, null); + FamilyDoctorTO fd = this.remoteManager.registerFamilyDoctor1(id, nif, name, surname, password, email, this.primaryHealthCareCenter); break; case SPECIALIST_DOCTOR: - SpecialistDoctorTO sd = this.remoteManager.registerSpecialistDoctor(id, nif, name, surname, password, email, null); + SpecialistDoctorTO sd = this.remoteManager.registerSpecialistDoctor(id, nif, name, surname, password, email, this.medicalSpecialty); break; case ADMINISTRADOR: @@ -207,21 +248,21 @@ public class RegisterUserMBean extends ProfileMBeanBase implements Serializable public void setUserType(String userType) { this.userType = userType; } - - public String getMedicalSpecialty() { + + public MedicalSpecialtyTO getMedicalSpecialty() { return medicalSpecialty; } - public void setMedicalSpecialty(String medicalSpecialty) { + public void setMedicalSpecialty(MedicalSpecialtyTO medicalSpecialty) { this.medicalSpecialty = medicalSpecialty; } - public String getPrimaryHealthCareCenter() { + public PrimaryHealthCareCenterTO getPrimaryHealthCareCenter() { return primaryHealthCareCenter; } - public void setPrimaryHealthCareCenter(String primaryHealthCareCenter) { + public void setPrimaryHealthCareCenter(PrimaryHealthCareCenterTO primaryHealthCareCenter) { this.primaryHealthCareCenter = primaryHealthCareCenter; } - + }