diff --git a/1.sources/MyHealth/docroot/resources/css/estilos.css b/1.sources/MyHealth/docroot/resources/css/estilos.css
index 59fb335..f88cc78 100644
--- a/1.sources/MyHealth/docroot/resources/css/estilos.css
+++ b/1.sources/MyHealth/docroot/resources/css/estilos.css
@@ -1,7 +1,12 @@
-BODY{
+BODY {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
.hide {
- display: none;
+ display: none;
+}
+
+.nopadding {
+ padding: 0 !important;
+ margin: 0 !important;
}
\ No newline at end of file
diff --git a/1.sources/MyHealth/src/TO/FamilyDoctorTO.java b/1.sources/MyHealth/src/TO/FamilyDoctorTO.java
index 30e00cf..dd91620 100644
--- a/1.sources/MyHealth/src/TO/FamilyDoctorTO.java
+++ b/1.sources/MyHealth/src/TO/FamilyDoctorTO.java
@@ -14,6 +14,7 @@ public class FamilyDoctorTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
+ private String professionalNumber;
private String nif;
private String name;
private String surname;
@@ -25,14 +26,15 @@ public class FamilyDoctorTO implements Serializable {
super();
}
- public FamilyDoctorTO(Integer id, String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterTO phc) {
- this.setId(id);
- this.setNif(nif);
- this.setName(name);
- this.setSurname(surname);
- this.setPassword(password);
- this.setEmail(email);
- this.setPrimaryHealthCareCenter(phc);
+ public FamilyDoctorTO(Integer id, String pic, String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterTO phc) {
+ this.id = id;
+ this.professionalNumber = pic;
+ this.nif = nif;
+ this.name = name;
+ this.surname = surname;
+ this.password = password;
+ this.email =email;
+ this.primaryHealthCareCenter = phc;
}
public String getEmail() {
@@ -83,7 +85,7 @@ public class FamilyDoctorTO implements Serializable {
this.id = id;
}
- public String getDisplayDescription() {
+ public String getDisplayName() {
return String.format("[%d] %s %s", this.id, this.name, this.surname);
}
@@ -95,4 +97,11 @@ public class FamilyDoctorTO implements Serializable {
this.primaryHealthCareCenter = primaryHealthCareCenter;
}
+ public String getProfessionalNumber() {
+ return professionalNumber;
+ }
+
+ public void setProfessionalNumber(String professionalNumber) {
+ this.professionalNumber = professionalNumber;
+ }
}
diff --git a/1.sources/MyHealth/src/TO/LoggedUserTO.java b/1.sources/MyHealth/src/TO/LoggedUserTO.java
index 62a3907..0ea7a58 100644
--- a/1.sources/MyHealth/src/TO/LoggedUserTO.java
+++ b/1.sources/MyHealth/src/TO/LoggedUserTO.java
@@ -60,8 +60,8 @@ public class LoggedUserTO implements Serializable {
return userType;
}
- public void setUserType(UserType userType) {
- this.userType = userType;
+ public void setUserType(UserType value) {
+ this.userType = value;
}
}
diff --git a/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java b/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java
index 1780adf..40d43a4 100644
--- a/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java
+++ b/1.sources/MyHealth/src/TO/MedicalSpecialtyTO.java
@@ -13,7 +13,7 @@ import javax.xml.bind.annotation.XmlRootElement;
public class MedicalSpecialtyTO implements Serializable {
private static final long serialVersionUID = 1L;
-
+ private Integer id;
private String name;
private String description;
@@ -21,11 +21,20 @@ public class MedicalSpecialtyTO implements Serializable {
super();
}
- public MedicalSpecialtyTO(String name, String description) {
+ public MedicalSpecialtyTO(Integer id, String name, String description) {
+ this.id = id;
this.name = name;
this.description = description;
}
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
public String getName() {
return name;
}
@@ -42,7 +51,7 @@ public class MedicalSpecialtyTO implements Serializable {
this.description = description;
}
- public String getDisplayDescription() {
+ public String getDisplayName() {
return String.format("[%s] %s", this.name, this.description);
}
diff --git a/1.sources/MyHealth/src/TO/PatientTO.java b/1.sources/MyHealth/src/TO/PatientTO.java
index 69c555b..e694dcb 100644
--- a/1.sources/MyHealth/src/TO/PatientTO.java
+++ b/1.sources/MyHealth/src/TO/PatientTO.java
@@ -16,6 +16,7 @@ public class PatientTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
+ private String personalIdentificationCode;
private String nif;
private String name;
private String surname;
@@ -30,14 +31,15 @@ public class PatientTO implements Serializable {
super();
}
- public PatientTO(Integer id, String nif, String name, String surname, String password, String email, FamilyDoctorTO familyDoc) {
- this.setId(id);
- this.setNif(nif);
- this.setName(name);
- this.setSurname(surname);
- this.setPassword(password);
- this.setEmail(email);
- this.setFamilyDoctor(familyDoc);
+ public PatientTO(Integer id, String pic, String nif, String name, String surname, String password, String email, FamilyDoctorTO familyDoc) {
+ this.id = id;
+ this.personalIdentificationCode = pic;
+ this.nif = nif;
+ this.name = name;
+ this.surname = surname;
+ this.password = password;
+ this.email =email;
+ this.familyDoctor = familyDoc;
}
public String getEmail() {
@@ -96,5 +98,11 @@ public class PatientTO implements Serializable {
this.familyDoctor = familyDoctor;
}
+ public String getPersonalIdentificationCode() {
+ return personalIdentificationCode;
+ }
+ public void setPersonalIdentificationCode(String personalIdentificationCode) {
+ this.personalIdentificationCode = personalIdentificationCode;
+ }
}
diff --git a/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java b/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java
index a4b88fa..5160600 100644
--- a/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java
+++ b/1.sources/MyHealth/src/TO/PrimaryHealthCareCenterTO.java
@@ -13,20 +13,28 @@ import javax.xml.bind.annotation.XmlRootElement;
public class PrimaryHealthCareCenterTO implements Serializable {
private static final long serialVersionUID = 1L;
-
+ private Integer id;
private String name;
private String location;
-
public PrimaryHealthCareCenterTO() {
super();
}
- public PrimaryHealthCareCenterTO(String name, String location) {
+ public PrimaryHealthCareCenterTO(Integer Id, String name, String location) {
+ this.id = Id;
this.name = name;
this.location = location;
}
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
public String getName() {
return name;
}
@@ -39,16 +47,16 @@ public class PrimaryHealthCareCenterTO implements Serializable {
return location;
}
- public void setLocation(String description) {
- this.location = description;
+ public void setLocation(String value) {
+ this.location = value;
}
-
- public String getDisplayDescription() {
+
+ public String getDisplayName() {
return String.format("[%s] %s", this.name, this.location);
}
-
+
@Override
public String toString() {
- return String.format("%s[name=%s]", getClass().getSimpleName(), this.getName());
+ return String.format("%s[name=%s]", getClass().getSimpleName(), this.getName());
}
}
diff --git a/1.sources/MyHealth/src/TO/SpecialistDoctorTO.java b/1.sources/MyHealth/src/TO/SpecialistDoctorTO.java
index 5397814..596745e 100644
--- a/1.sources/MyHealth/src/TO/SpecialistDoctorTO.java
+++ b/1.sources/MyHealth/src/TO/SpecialistDoctorTO.java
@@ -14,6 +14,7 @@ public class SpecialistDoctorTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
+ private String professionalNumber;
private String nif;
private String name;
private String surname;
@@ -25,14 +26,15 @@ public class SpecialistDoctorTO implements Serializable {
super();
}
- public SpecialistDoctorTO(Integer id, String nif, String name, String surname, String password, String email, MedicalSpecialtyTO medicalSpec) {
- this.setId(id);
- this.setNif(nif);
- this.setName(name);
- this.setSurname(surname);
- this.setPassword(password);
- this.setEmail(email);
- this.setMedicalSpecialty(medicalSpec);
+ public SpecialistDoctorTO(Integer id, String pic, String nif, String name, String surname, String password, String email, MedicalSpecialtyTO medicalSpec) {
+ this.id = id;
+ this.professionalNumber = pic;
+ this.nif = nif;
+ this.name = name;
+ this.surname = surname;
+ this.password = password;
+ this.email =email;
+ this.medicalSpecialty = medicalSpec;
}
public String getEmail() {
@@ -91,4 +93,11 @@ public class SpecialistDoctorTO implements Serializable {
this.medicalSpecialty = medicalSpecialty;
}
+ public String getProfessionalNumber() {
+ return professionalNumber;
+ }
+
+ public void setProfessionalNumber(String professionalNumber) {
+ this.professionalNumber = professionalNumber;
+ }
}
diff --git a/1.sources/MyHealth/src/common/Constants.java b/1.sources/MyHealth/src/common/Constants.java
new file mode 100644
index 0000000..d56325e
--- /dev/null
+++ b/1.sources/MyHealth/src/common/Constants.java
@@ -0,0 +1,12 @@
+package common;
+
+/**
+ *
+ * @author Marcos García Núñez (mgarcianun@uoc.edu)
+ *
+ */
+public class Constants {
+ public static final int MAX_ITEMS_AUTOCOMPLETE_SEARCH = 200;
+ public static final String PROFESSIONAL_NUMBER_PREFIX = "PRO#";
+ public static final String PERSONAL_IDENTIFICATION_CODE_PREFIX = "PAT#";
+}
diff --git a/1.sources/MyHealth/src/common/HashUtils.java b/1.sources/MyHealth/src/common/HashUtils.java
index 5b7bd53..dc9d3e4 100644
--- a/1.sources/MyHealth/src/common/HashUtils.java
+++ b/1.sources/MyHealth/src/common/HashUtils.java
@@ -1,10 +1,14 @@
package common;
import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;
+/**
+ *
+ * @author Marcos García Núñez (mgarcianun@uoc.edu)
+ *
+ */
public class HashUtils {
public static String hashMD5(String stringValue) {
diff --git a/1.sources/MyHealth/src/common/QuestionStatus.java b/1.sources/MyHealth/src/common/QuestionStatus.java
new file mode 100644
index 0000000..b32bbf6
--- /dev/null
+++ b/1.sources/MyHealth/src/common/QuestionStatus.java
@@ -0,0 +1,24 @@
+package common;
+
+/**
+ *
+ * @author Marcos García Núñez (mgarcianun@uoc.edu)
+ *
+ */
+public enum QuestionStatus {
+ ANSWERED("Respondida"), PENDING("Pendiente");
+
+ private String questionStatusName;
+
+ private QuestionStatus(String typeName) {
+ this.questionStatusName = typeName;
+ }
+
+ public String getQuestionStatusName() {
+ return questionStatusName;
+ }
+
+ public String getName() {
+ return this.name();
+ }
+}
diff --git a/1.sources/MyHealth/src/common/TestType.java b/1.sources/MyHealth/src/common/TestType.java
new file mode 100644
index 0000000..d413bdd
--- /dev/null
+++ b/1.sources/MyHealth/src/common/TestType.java
@@ -0,0 +1,24 @@
+package common;
+
+/**
+ *
+ * @author Marcos García Núñez (mgarcianun@uoc.edu)
+ *
+ */
+public enum TestType {
+ MAGNETIC_RESONANCE_IMAGING("Imagen por Resonancia Magnética"), CT_SCAN("Tomografía Áxial Computerizada"), BLOOD_TEST("Análisis de sangre");
+
+ private String testTypeName;
+
+ private TestType(String typeName) {
+ this.testTypeName = typeName;
+ }
+
+ public String getTestTypeName() {
+ return testTypeName;
+ }
+
+ public String getName() {
+ return this.name();
+ }
+}
diff --git a/1.sources/MyHealth/src/common/UserType.java b/1.sources/MyHealth/src/common/UserType.java
index 3a49b5a..00d0de2 100644
--- a/1.sources/MyHealth/src/common/UserType.java
+++ b/1.sources/MyHealth/src/common/UserType.java
@@ -1,22 +1,24 @@
package common;
+/**
+ *
+ * @author Marcos García Núñez (mgarcianun@uoc.edu)
+ *
+ */
public enum UserType {
- PATIENT("Paciente"),
- FAMILY_DOCTOR("Médico de familia"),
- SPECIALIST_DOCTOR("Médico especialista"),
- ADMINISTRATOR("Administrador");
-
- private String userTypename;
-
- private UserType (String userTypename){
- this.userTypename = userTypename;
- }
+ PATIENT("Paciente"), FAMILY_DOCTOR("Médico de familia"), SPECIALIST_DOCTOR("Médico especialista"), ADMINISTRATOR("Administrador");
- public String getUserTypename() {
- return userTypename;
- }
-
- public String getName() {
- return this.name();
- }
+ private String userTypename;
+
+ private UserType(String userTypename) {
+ this.userTypename = userTypename;
}
+
+ public String getUserTypename() {
+ return userTypename;
+ }
+
+ public String getName() {
+ return this.name();
+ }
+}
diff --git a/1.sources/MyHealth/src/common/Utils.java b/1.sources/MyHealth/src/common/Utils.java
new file mode 100644
index 0000000..0926f7e
--- /dev/null
+++ b/1.sources/MyHealth/src/common/Utils.java
@@ -0,0 +1,19 @@
+package common;
+
+import java.text.Normalizer;
+
+/**
+ *
+ * @author Marcos García Núñez (mgarcianun@uoc.edu)
+ *
+ */
+public class Utils {
+ public static String stripAccents(String input) {
+ return input == null ? null : Normalizer.normalize(input, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
+ }
+
+ public static String normalizeTerm(String input) {
+ //return stripAccents(input).toLowerCase();
+ return input.toLowerCase();
+ }
+}
diff --git a/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java b/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java
index 44fdb1e..e150321 100644
--- a/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java
+++ b/1.sources/MyHealth/src/ejb/common/CommonFacadeBean.java
@@ -1,18 +1,22 @@
package ejb.common;
import java.util.ArrayList;
-import java.util.Collection;
+import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.jboss.security.auth.spi.Users.User;
import TO.FamilyDoctorTO;
import TO.MedicalSpecialtyTO;
import TO.PatientTO;
import TO.PrimaryHealthCareCenterTO;
import TO.SpecialistDoctorTO;
+import common.Utils;
import jpa.FamilyDoctorJPA;
import jpa.MedicalSpecialtyJPA;
import jpa.PatientJPA;
@@ -28,8 +32,8 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal {
/**
* Metodo que devuelve todas las especialidades medicas
*/
- public Collection
listAllMedicalSpecialities() {
- return this.listPagedMedicalSpecialities(0, 0);
+ public List listAllMedicalSpecialities() {
+ return this.listMedicalSpecialitiesPaged(0, 0);
}
/**
@@ -39,114 +43,233 @@ public class CommonFacadeBean implements CommonFacadeRemote, CommonFacadeLocal {
* cada página
*
*/
- public Collection listPagedMedicalSpecialities(int pageNumber, int pageSize) {
- Query query = entman.createQuery("from MedicalSpecialtyJPA order by name");
+ public List listMedicalSpecialitiesPaged(int pageNumber, int pageSize) {
+ return listMedicalSpecialitiesFiltered(null, pageNumber, pageSize);
+ }
+
+ 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 = "";
+ if (searchTerm == null)
+ searchTerm = "";
+ else
+ searchTerm = Utils.normalizeTerm(searchTerm);
+
+ if (searchTerm.length() > 0) {
+ strFilter = "WHERE lower(ms.name) LIKE :searchTerm OR lower(ms.description) LIKE :searchTerm";
+ }
+
+ TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), MedicalSpecialtyJPA.class);
+
+ if (searchTerm.length() > 0)
+ query.setParameter("searchTerm", "%" + searchTerm + "%");
if (pageSize > 0) {
query.setFirstResult(pageNumber * pageSize);
query.setMaxResults(pageSize);
}
- @SuppressWarnings("unchecked")
- Collection allJPA = query.getResultList();
- Collection allSpecialities = new ArrayList();
+ List allJPA = query.getResultList();
+ List allSpecialities = new ArrayList();
- for (MedicalSpecialtyJPA ms : allJPA) {
- allSpecialities.add(new MedicalSpecialtyTO(ms.getName(), ms.getDescription()));
+ for (MedicalSpecialtyJPA item : allJPA) {
+ allSpecialities.add(this.getPOJOforMedicalSpecialtyJPA(item));
}
return allSpecialities;
}
- public Collection listAllCAPs() {
- return this.listPagedAllCAPs(0, 0);
+ public List listAllCAPs() {
+ return this.listCAPsPaged(0, 0);
}
- public Collection listPagedAllCAPs(int pageNumber, int pageSize) {
- Query query = entman.createQuery("from PrimaryHealthCareCenterJPA order by name");
+ public List listCAPsPaged(int pageNumber, int pageSize) {
+ return this.listCAPsFiltered(null, pageNumber, pageSize);
+ }
+
+ 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 = "";
+ if (searchTerm == null)
+ searchTerm = "";
+ else
+ searchTerm = Utils.normalizeTerm(searchTerm);
+
+ if (searchTerm.length() > 0) {
+ strFilter = "WHERE lower(phc.name) LIKE :searchTerm OR lower(phc.location) LIKE :searchTerm";
+ }
+
+ TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), PrimaryHealthCareCenterJPA.class);
+
+ if (searchTerm.length() > 0)
+ query.setParameter("searchTerm", "%" + searchTerm + "%");
if (pageSize > 0) {
query.setFirstResult(pageNumber * pageSize);
query.setMaxResults(pageSize);
}
- @SuppressWarnings("unchecked")
- Collection allJPA = query.getResultList();
- Collection allCAPs = new ArrayList();
+ List allJPA = query.getResultList();
+ List allCAPs = new ArrayList();
- for (PrimaryHealthCareCenterJPA cap : allJPA) {
- allCAPs.add(new PrimaryHealthCareCenterTO(cap.getName(), cap.getLocation()));
+ for (PrimaryHealthCareCenterJPA item : allJPA) {
+ allCAPs.add(this.getPOJOforPrimaryHealthCareCenterJPA(item));
}
return allCAPs;
}
- public Collection listAllFamilyDoctors() {
- return this.listAllFamilyDoctors(0, 0);
+ public List listAllFamilyDoctors() {
+ return this.listFamilyDoctorsPaged(0, 0);
}
- public Collection listAllFamilyDoctors(int pageNumber, int pageSize) {
- Query query = entman.createQuery("from FamilyDoctorJPA order by name, surname");
+ public List listFamilyDoctorsPaged(int pageNumber, int pageSize) {
+ return this.listFamilyDoctorsFiltered(null, pageNumber, pageSize);
+ }
+
+ 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 = "";
+ if (searchTerm == null)
+ searchTerm = "";
+ else
+ searchTerm = Utils.normalizeTerm(searchTerm);
+
+ if (searchTerm.length() > 0) {
+ strFilter = "WHERE lower(fd.name) LIKE :searchTerm OR lower(fd.surname) LIKE :searchTerm";
+ }
+
+ TypedQuery query = entman.createQuery(String.format(strQuery, strFilter), FamilyDoctorJPA.class);
+
+ if (searchTerm.length() > 0)
+ query.setParameter("searchTerm", "%" + searchTerm + "%");
if (pageSize > 0) {
query.setFirstResult(pageNumber * pageSize);
query.setMaxResults(pageSize);
}
- @SuppressWarnings("unchecked")
- Collection allFDsJPA = query.getResultList();
- Collection allFDTOs = new ArrayList();
+ List allFDsJPA = query.getResultList();
+ List allFDTOs = new ArrayList();
for (FamilyDoctorJPA item : allFDsJPA) {
- allFDTOs.add(new FamilyDoctorTO(item.getId(), item.getNif(), item.getName(), item.getSurname(), item.getPassword(), item.getEmail(), null));
+ allFDTOs.add(this.getPOJOforFamilyDoctorJPA(item, 0));
}
- return allFDTOs;
+ return allFDTOs;
}
- public PatientTO retrievePatient(int patientId) throws Exception {
- PatientJPA pat = entman.find(PatientJPA.class, patientId);
-
- if (pat == null) {
- throw new Exception("No se pueden actualizar los datos del paciente porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(patientId));
+ public MedicalSpecialtyTO getPOJOforMedicalSpecialtyJPA(MedicalSpecialtyJPA ms) {
+ MedicalSpecialtyTO msTO = null;
+
+ if (ms != null) {
+ msTO = new MedicalSpecialtyTO(ms.getId(), ms.getName(), ms.getDescription());
}
-
- FamilyDoctorTO fdTO = null;
- if (pat.getFamilyDoctor() != null) {
- FamilyDoctorJPA fd = pat.getFamilyDoctor();
- fdTO = new FamilyDoctorTO(fd.getId(), fd.getNif(), fd.getName(), fd.getSurname(), fd.getPassword(), fd.getEmail(), null);
- }
-
- PatientTO paTO = new PatientTO(pat.getId(), pat.getNif(), pat.getName(), pat.getSurname(), pat.getPassword(), pat.getEmail(), fdTO);
- return paTO;
+
+ return msTO;
}
- public FamilyDoctorTO retrieveFamilyDoctor(int ProfessionalNumberId) throws Exception {
- FamilyDoctorJPA fd = entman.find(FamilyDoctorJPA.class, ProfessionalNumberId);
- if (fd == null) {
- throw new Exception("No se encuentra en la base de datos ningún médico de familia con id: " + String.valueOf(ProfessionalNumberId));
+ public PrimaryHealthCareCenterTO getPOJOforPrimaryHealthCareCenterJPA(PrimaryHealthCareCenterJPA phc) {
+ PrimaryHealthCareCenterTO phcTO = null;
+
+ if (phc != null) {
+ phcTO = new PrimaryHealthCareCenterTO(phc.getId(), phc.getName(), phc.getLocation());
}
-
- PrimaryHealthCareCenterTO phc = null;
- if (fd.getPrimaryHealthCareCenter() != null)
- phc = new PrimaryHealthCareCenterTO(fd.getPrimaryHealthCareCenter().getName(), fd.getPrimaryHealthCareCenter().getLocation());
-
- FamilyDoctorTO fdTO = new FamilyDoctorTO(fd.getId(), fd.getNif(), fd.getName(), fd.getSurname(), fd.getPassword(), fd.getEmail(), phc);
- return fdTO;
+
+ return phcTO;
}
- public SpecialistDoctorTO retrieveSpecialistDoctor(int professionalId) throws Exception {
- SpecialistDoctorJPA sd = entman.find(SpecialistDoctorJPA.class, professionalId);
- if (sd == null) {
- throw new Exception(
- "No se pueden actualizar los datos del médico de familia porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(professionalId));
+ public SpecialistDoctorTO getPOJOforSpecialistDoctorJPA(SpecialistDoctorJPA sd, int nestedProps) {
+ SpecialistDoctorTO sdTO = null;
+
+ if (sd != null) {
+ MedicalSpecialtyJPA ms = null;
+ if (nestedProps > 0)
+ ms = sd.getMedicalSpecialty();
+
+ nestedProps--;
+ sdTO = new SpecialistDoctorTO(sd.getId(), sd.getProfessionalNumber(), sd.getNif(), sd.getName(), sd.getSurname(), sd.getPassword(), sd.getEmail(), this.getPOJOforMedicalSpecialtyJPA(ms));
}
-
- MedicalSpecialtyTO ms = null;
- if (sd.getMedicalSpecialty() != null)
- ms = new MedicalSpecialtyTO(sd.getMedicalSpecialty().getName(), sd.getMedicalSpecialty().getDescription());
-
- SpecialistDoctorTO sdTO = new SpecialistDoctorTO(sd.getId(), sd.getNif(), sd.getName(), sd.getSurname(), sd.getPassword(), sd.getEmail(), ms);
+
return sdTO;
}
+
+ public FamilyDoctorTO getPOJOforFamilyDoctorJPA(FamilyDoctorJPA fd, int nestedProps) {
+ FamilyDoctorTO fdTO = null;
+
+ if (fd != null) {
+ PrimaryHealthCareCenterJPA phc = null;
+ if (nestedProps > 0)
+ phc = fd.getPrimaryHealthCareCenter();
+
+ nestedProps--;
+ fdTO = new FamilyDoctorTO(fd.getId(), fd.getProfessionalNumber(), fd.getNif(), fd.getName(), fd.getSurname(), fd.getPassword(), fd.getEmail(), this.getPOJOforPrimaryHealthCareCenterJPA(phc));
+ }
+
+ return fdTO;
+ }
+
+ public PatientTO getPOJOforPatientJPA(PatientJPA pat, int nestedProps) {
+ PatientTO paTO = null;
+
+ if (pat != null) {
+ FamilyDoctorJPA fd = null;
+ if (nestedProps > 0)
+ fd = pat.getFamilyDoctor();
+
+ nestedProps--;
+ paTO = new PatientTO(pat.getId(), pat.getPersonalIdentificationCode(), pat.getNif(), pat.getName(), pat.getSurname(), pat.getPassword(), pat.getEmail(), this.getPOJOforFamilyDoctorJPA(fd, nestedProps));
+ }
+
+ return paTO;
+ }
+
+ public PatientTO findPatientById(int patientId) {
+ // Recuperamos propiedades anidadas 1 nivel!
+ return this.getPOJOforPatientJPA(entman.find(PatientJPA.class, patientId), 1);
+ }
+
+
+ public PatientJPA findPatientByCode(String code) {
+ TypedQuery query = entman.createQuery("from PatientJPA pat where pat.personalIdentificationCode=:code", PatientJPA.class);
+
+ query.setParameter("code", code);
+
+ List results = query.getResultList();
+ if (results.size() > 0)
+ return results.get(0);
+ else
+ return null; }
+
+ public FamilyDoctorTO findFamilyDoctorById(int ProfessionalNumberId) {
+ return this.getPOJOforFamilyDoctorJPA(entman.find(FamilyDoctorJPA.class, ProfessionalNumberId), 1);
+ }
+
+ public FamilyDoctorJPA findFamilyDoctorByCode(String code) {
+ TypedQuery query = entman.createQuery("from FamilyDoctorJPA d where d.professionalNumber=:code", FamilyDoctorJPA.class);
+
+ query.setParameter("code", code);
+
+ List results = query.getResultList();
+ if (results.size() > 0)
+ return results.get(0);
+ else
+ return null;
+ }
+
+ public SpecialistDoctorTO findSpecialistDoctorById(int ProfessionalNumberId) {
+ return this.getPOJOforSpecialistDoctorJPA(entman.find(SpecialistDoctorJPA.class, ProfessionalNumberId), 1);
+ }
+
+ public SpecialistDoctorJPA findSpecialistDoctorByCode(String code) {
+ TypedQuery query = entman.createQuery("from SpecialistDoctorJPA d where d.professionalNumber=:code", SpecialistDoctorJPA.class);
+
+ query.setParameter("code", code);
+
+ List results = query.getResultList();
+ if (results.size() > 0)
+ return results.get(0);
+ else
+ return null;
+ }
}
diff --git a/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java b/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java
index 3ec40c9..bd6a081 100644
--- a/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java
+++ b/1.sources/MyHealth/src/ejb/common/CommonFacadeLocal.java
@@ -1,6 +1,7 @@
package ejb.common;
import java.util.Collection;
+import java.util.List;
import javax.ejb.Local;
@@ -9,6 +10,11 @@ import TO.MedicalSpecialtyTO;
import TO.PatientTO;
import TO.PrimaryHealthCareCenterTO;
import TO.SpecialistDoctorTO;
+import jpa.FamilyDoctorJPA;
+import jpa.MedicalSpecialtyJPA;
+import jpa.PatientJPA;
+import jpa.PrimaryHealthCareCenterJPA;
+import jpa.SpecialistDoctorJPA;
/**
*
@@ -18,21 +24,44 @@ import TO.SpecialistDoctorTO;
@Local
public interface CommonFacadeLocal {
- public Collection listAllMedicalSpecialities();
+ public List listAllMedicalSpecialities();
- public Collection listPagedMedicalSpecialities(int pageNumber, int pageSize);
+ public List listMedicalSpecialitiesPaged(int pageNumber, int pageSize);
- public Collection listAllCAPs();
-
- public Collection listPagedAllCAPs(int pageNumber, int pageSize);
+ public List listMedicalSpecialitiesFiltered(String searchTerm, int pageNumber, int pageSize);
- public Collection listAllFamilyDoctors();
-
- public Collection listAllFamilyDoctors(int pageNumber, int pageSize);
-
- public PatientTO retrievePatient(int patientId) throws Exception;
+ public List listAllCAPs();
- public FamilyDoctorTO retrieveFamilyDoctor(int ProfessionalNumberId) throws Exception;
+ public List listCAPsPaged(int pageNumber, int pageSize);
+
+ public List listCAPsFiltered(String searchTerm, int pageNumber, int pageSize);
+
+ public List listAllFamilyDoctors();
+
+ public List listFamilyDoctorsPaged(int pageNumber, int pageSize);
+
+ public List listFamilyDoctorsFiltered(String searchTerm, int pageNumber, int pageSize);
+
+ public PatientTO findPatientById(int patientId);
+
+ public PatientJPA findPatientByCode(String code);
+
+ public FamilyDoctorTO findFamilyDoctorById(int ProfessionalNumberId);
+
+ public FamilyDoctorJPA findFamilyDoctorByCode(String code);
+
+ public SpecialistDoctorTO findSpecialistDoctorById(int ProfessionalNumberId);
+
+ public SpecialistDoctorJPA findSpecialistDoctorByCode(String code);
+
+ public MedicalSpecialtyTO getPOJOforMedicalSpecialtyJPA(MedicalSpecialtyJPA ms);
+
+ public SpecialistDoctorTO getPOJOforSpecialistDoctorJPA(SpecialistDoctorJPA sd, int nestedProps);
+
+ public PrimaryHealthCareCenterTO getPOJOforPrimaryHealthCareCenterJPA(PrimaryHealthCareCenterJPA phc);
+
+ public FamilyDoctorTO getPOJOforFamilyDoctorJPA(FamilyDoctorJPA fd, int nestedProps);
+
+ public PatientTO getPOJOforPatientJPA(PatientJPA pat, int nestedProps);
- public SpecialistDoctorTO retrieveSpecialistDoctor(int ProfessionalNumberId) throws Exception;
}
diff --git a/1.sources/MyHealth/src/ejb/common/CommonFacadeRemote.java b/1.sources/MyHealth/src/ejb/common/CommonFacadeRemote.java
index 6a9732b..44f38cc 100644
--- a/1.sources/MyHealth/src/ejb/common/CommonFacadeRemote.java
+++ b/1.sources/MyHealth/src/ejb/common/CommonFacadeRemote.java
@@ -1,6 +1,7 @@
package ejb.common;
import java.util.Collection;
+import java.util.List;
import javax.ejb.Remote;
@@ -9,6 +10,9 @@ import TO.MedicalSpecialtyTO;
import TO.PatientTO;
import TO.PrimaryHealthCareCenterTO;
import TO.SpecialistDoctorTO;
+import jpa.FamilyDoctorJPA;
+import jpa.PatientJPA;
+import jpa.SpecialistDoctorJPA;
/**
*
@@ -18,21 +22,34 @@ import TO.SpecialistDoctorTO;
@Remote
public interface CommonFacadeRemote {
- public Collection listAllMedicalSpecialities();
+ public List listAllMedicalSpecialities();
- public Collection listPagedMedicalSpecialities(int pageNumber, int pageSize);
+ public List listMedicalSpecialitiesPaged(int pageNumber, int pageSize);
- public Collection listAllCAPs();
-
- public Collection listPagedAllCAPs(int pageNumber, int pageSize);
+ public List listMedicalSpecialitiesFiltered(String searchTerm, int pageNumber, int pageSize);
- public Collection listAllFamilyDoctors();
-
- public Collection listAllFamilyDoctors(int pageNumber, int pageSize);
-
- public PatientTO retrievePatient(int patientId) throws Exception;
+ public List listAllCAPs();
- public FamilyDoctorTO retrieveFamilyDoctor(int ProfessionalNumberId) throws Exception;
+ public List listCAPsPaged(int pageNumber, int pageSize);
+
+ public List listCAPsFiltered(String searchTerm, int pageNumber, int pageSize);
+
+ public List listAllFamilyDoctors();
+
+ public List listFamilyDoctorsPaged(int pageNumber, int pageSize);
+
+ public List listFamilyDoctorsFiltered(String searchTerm, int pageNumber, int pageSize);
+
+ public PatientTO findPatientById(int patientId);
+
+ public PatientJPA findPatientByCode(String code);
+
+ public FamilyDoctorTO findFamilyDoctorById(int ProfessionalNumberId);
+
+ public FamilyDoctorJPA findFamilyDoctorByCode(String code);
+
+ public SpecialistDoctorTO findSpecialistDoctorById(int ProfessionalNumberId);
+
+ public SpecialistDoctorJPA findSpecialistDoctorByCode(String code);
- public SpecialistDoctorTO retrieveSpecialistDoctor(int ProfessionalNumberId) throws Exception;
}
diff --git a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java
index e6c34b7..5260402 100644
--- a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java
+++ b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeBean.java
@@ -4,16 +4,16 @@ import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
import TO.FamilyDoctorTO;
import TO.MedicalSpecialtyTO;
import TO.PatientTO;
import TO.PrimaryHealthCareCenterTO;
import TO.SpecialistDoctorTO;
+import common.Constants;
import common.HashUtils;
-import ejb.common.CommonFacadeBean;
import ejb.common.CommonFacadeLocal;
-import ejb.common.CommonFacadeRemote;
import jpa.FamilyDoctorJPA;
import jpa.MedicalSpecialtyJPA;
import jpa.PatientJPA;
@@ -31,70 +31,72 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
// Persistence Unit Context
@PersistenceContext(unitName = "MyHealth")
private EntityManager entman;
-
- @EJB
- CommonFacadeLocal commonServices;
- public PatientTO changeFamilyDoctor(int patientId, int ProfessionalNumberId) throws Exception {
+ @EJB
+ CommonFacadeLocal commonServices;
+
+ private String getNextProfessionalNumber() {
+ Query q = entman.createNativeQuery("select nextval('myhealth.profesionalnumber')");
+ return Constants.PROFESSIONAL_NUMBER_PREFIX.concat(String.valueOf(q.getSingleResult()));
+ }
+
+ private String getNextPersonalIdentificationCode() {
+ Query q = entman.createNativeQuery("select nextval('myhealth.profesionalnumber')");
+ return Constants.PERSONAL_IDENTIFICATION_CODE_PREFIX.concat(String.valueOf(q.getSingleResult()));
+ }
+
+ public PatientTO changeFamilyDoctor(int patientId, int newDoctor) throws Exception {
PatientJPA pat = entman.find(PatientJPA.class, patientId);
if (pat == null) {
throw new Exception("No se pueden actualizar los datos del paciente porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(patientId));
}
- FamilyDoctorJPA fd = entman.find(FamilyDoctorJPA.class, ProfessionalNumberId);
+ FamilyDoctorJPA fd = entman.find(FamilyDoctorJPA.class, newDoctor);
if (fd == null) {
- throw new Exception("No se pueden actualizar los datos del médico de familia porque no se encuentra en la base de datos ningún registro con id: "
- + String.valueOf(ProfessionalNumberId));
+ throw new Exception(
+ "No se pueden actualizar los datos del médico de familia porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(newDoctor));
}
- PatientTO paTO = null;
pat.setFamilyDoctor(fd);
entman.persist(pat);
- //CommonFacadeRemote common = new CommonFacadeBean();
- return commonServices.retrievePatient(pat.getId());
+ return this.commonServices.getPOJOforPatientJPA(pat, 1);
}
public PatientTO registerPatient(int id, String nif, String name, String surname, String password, String email) {
PatientTO paTO = null;
- PatientJPA pat = new PatientJPA(nif, name, surname, HashUtils.hashMD5(password), email, null);
+ PatientJPA pat = new PatientJPA(this.getNextPersonalIdentificationCode(), nif, name, surname, HashUtils.hashMD5(password), email, null);
entman.persist(pat);
- paTO = new PatientTO(pat.getId(), pat.getNif(), pat.getName(), pat.getSurname(), pat.getPassword(), pat.getEmail(), null);
- return paTO;
+ return this.commonServices.getPOJOforPatientJPA(pat, 1);
}
public SpecialistDoctorTO registerSpecialistDoctor(int id, String nif, String name, String surname, String password, String email, MedicalSpecialtyTO specialty)
throws Exception {
- MedicalSpecialtyJPA ms = entman.find(MedicalSpecialtyJPA.class, specialty.getName());
+ MedicalSpecialtyJPA ms = entman.find(MedicalSpecialtyJPA.class, specialty.getId());
if (ms == null) {
throw new Exception("No se encuentra la especialidad médica con identificador: " + specialty.getName());
}
- SpecialistDoctorJPA sd = new SpecialistDoctorJPA(nif, name, surname, HashUtils.hashMD5(password), email, ms);
+ SpecialistDoctorJPA sd = new SpecialistDoctorJPA(this.getNextProfessionalNumber(), nif, name, surname, HashUtils.hashMD5(password), email, ms);
entman.persist(sd);
- SpecialistDoctorTO sdTO = null;
- sdTO = new SpecialistDoctorTO(sd.getId(), sd.getNif(), sd.getName(), sd.getSurname(), sd.getPassword(), sd.getEmail(), specialty);
-
- return sdTO;
+ return this.commonServices.getPOJOforSpecialistDoctorJPA(sd, 1);
}
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.getName());
+ 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());
}
- FamilyDoctorJPA fd = new FamilyDoctorJPA(nif, name, surname, HashUtils.hashMD5(password), email, phcC);
+ FamilyDoctorJPA fd = new FamilyDoctorJPA(this.getNextProfessionalNumber(), nif, name, surname, HashUtils.hashMD5(password), email, phcC);
entman.persist(fd);
- fdTO = new FamilyDoctorTO(fd.getId(), fd.getNif(), fd.getName(), fd.getSurname(), fd.getPassword(), fd.getEmail(), cap);
-
- return fdTO;
+ return commonServices.getPOJOforFamilyDoctorJPA(fd, 1);
}
public PatientTO updatePatientData(int id, String nif, String name, String surname, String password, String email) throws Exception {
@@ -114,10 +116,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
entman.persist(pat);
- PatientTO patTO = null;
- patTO = new PatientTO(pat.getId(), pat.getNif(), pat.getName(), pat.getSurname(), pat.getPassword(), pat.getEmail(), null);
-
- return patTO;
+ return this.commonServices.getPOJOforPatientJPA(pat, 1);
}
public SpecialistDoctorTO updateSpecialistDoctorData(int id, String nif, String name, String surname, String password, String email, MedicalSpecialtyTO specialty)
@@ -127,7 +126,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
throw new Exception("No se pueden actualizar los datos del médico de familia porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(id));
}
- MedicalSpecialtyJPA ms = entman.find(MedicalSpecialtyJPA.class, specialty.getName());
+ MedicalSpecialtyJPA ms = entman.find(MedicalSpecialtyJPA.class, specialty.getId());
if (ms == null) {
throw new Exception("No se encuentra la especialidad médica con identificador: " + specialty.getName());
}
@@ -143,10 +142,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
entman.persist(sd);
- SpecialistDoctorTO sdTO = null;
- sdTO = new SpecialistDoctorTO(sd.getId(), sd.getNif(), sd.getName(), sd.getSurname(), sd.getPassword(), sd.getEmail(), specialty);
-
- return sdTO;
+ return this.commonServices.getPOJOforSpecialistDoctorJPA(sd, 1);
}
public FamilyDoctorTO updateFamilyDoctorData(int id, String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterTO phcTO) throws Exception {
@@ -155,7 +151,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
throw new Exception("No se pueden actualizar los datos del médico de familia porque no se encuentra en la base de datos ningún registro con id: " + String.valueOf(id));
}
- PrimaryHealthCareCenterJPA phcC = entman.find(PrimaryHealthCareCenterJPA.class, phcTO.getName());
+ PrimaryHealthCareCenterJPA phcC = entman.find(PrimaryHealthCareCenterJPA.class, phcTO.getId());
if (phcC == null) {
throw new Exception("No se encuentra el centro de atención primaria con identificador: " + phcTO.getName());
}
@@ -171,10 +167,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
entman.persist(fd);
- FamilyDoctorTO fdTO = null;
- fdTO = new FamilyDoctorTO(fd.getId(), fd.getNif(), fd.getName(), fd.getSurname(), fd.getPassword(), fd.getEmail(), phcTO);
-
- return fdTO;
+ return this.commonServices.getPOJOforFamilyDoctorJPA(fd, 1);
}
public FamilyDoctorTO changePrimaryHealthCareCenter(int professionalId, PrimaryHealthCareCenterTO newCenter) throws Exception {
@@ -185,15 +178,14 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
throw new Exception("No se encuentra en la base de datos ningún médico de familia con id: " + String.valueOf(professionalId));
}
- PrimaryHealthCareCenterJPA phcC = entman.find(PrimaryHealthCareCenterJPA.class, newCenter.getName());
+ PrimaryHealthCareCenterJPA phcC = entman.find(PrimaryHealthCareCenterJPA.class, newCenter.getId());
if (phcC == null) {
throw new Exception("No se encuentra el centro de atención primaria con identificador: " + newCenter.getName());
}
fd.setPrimaryHealthCareCenter(phcC);
entman.persist(fd);
- fdTO = new FamilyDoctorTO(fd.getId(), fd.getNif(), fd.getName(), fd.getSurname(), fd.getPassword(), fd.getEmail(), newCenter);
- return fdTO;
+ return this.commonServices.getPOJOforFamilyDoctorJPA(fd, 1);
}
}
diff --git a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java
index d75674c..5e1ed76 100644
--- a/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java
+++ b/1.sources/MyHealth/src/ejb/profile/ProfileFacadeRemote.java
@@ -16,7 +16,7 @@ import TO.SpecialistDoctorTO;
@Remote
public interface ProfileFacadeRemote {
- public PatientTO changeFamilyDoctor(int id, int ProfessionalNumberId) throws Exception;
+ public PatientTO changeFamilyDoctor(int id, int newDoctor) throws Exception;
public PatientTO registerPatient(int id, String nif, String name, String surname, String password, String email);
diff --git a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java
index ba4469c..ea2eccf 100644
--- a/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java
+++ b/1.sources/MyHealth/src/ejb/systemAdmin/SystemAdminFacadeBean.java
@@ -1,23 +1,18 @@
package ejb.systemAdmin;
-import java.util.ArrayList;
-import java.util.Collection;
-
+import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
import TO.LoggedUserTO;
-import TO.MedicalSpecialtyTO;
-import TO.PrimaryHealthCareCenterTO;
+import common.Constants;
import common.HashUtils;
import common.UserType;
+import ejb.common.CommonFacadeLocal;
import jpa.AdministratorJPA;
import jpa.FamilyDoctorJPA;
-import jpa.MedicalSpecialtyJPA;
import jpa.PatientJPA;
-import jpa.PrimaryHealthCareCenterJPA;
import jpa.SpecialistDoctorJPA;
/**
@@ -32,49 +27,80 @@ public class SystemAdminFacadeBean implements SystemAdminFacadeRemote {
@PersistenceContext(unitName = "MyHealth")
private EntityManager entman;
- public LoggedUserTO login(String id, String pwd) {
+ @EJB
+ CommonFacadeLocal commonServices;
+
+ /**
+ * Si la autenticación no es correcgta devuelve null, sino devuelve un POJO con
+ * datos del usuario logeado.
+ *
+ * La autenticación se realiza en 2 pasos:
+ *
+ * Paso 1. Se intenta localizar un registro de usuario, por orden:
+ *
+ * a. Primero Paciente, si el identificador comienza por los caracteres
+ * correctos.
+ *
+ * b.Después médico de familia, si el identificador es de profesional
+ *
+ * c. Si no lo localizamos buscamos el identificador en la tabla de médicos
+ * especialistas (el identificador es de profesional)
+ *
+ * d. Si no hemos localizado aún al usuario, lo buscamos en la tabla de
+ * administradores, aún cuando el identificador comience por cualquier carácter
+ * (podría ser una dirección de email que comienza por caracteres del
+ * identificaodr de paciente o profesional)
+ *
+ * Paso 2. Si hemos localizado un registro de usuario, verificamos si el
+ * password recibido coincide con el de la base de datos, en tal caso la
+ * autenticación se compelta y es correcta.
+ */
+ public LoggedUserTO login(String userCode, String pwd) {
LoggedUserTO usr = null;
- // First try to login as Admin
- AdministratorJPA adm = entman.find(AdministratorJPA.class, id);
- if (adm != null) {
- usr = new LoggedUserTO(adm.getEmail(), adm.getEmail(), adm.getPassword(), UserType.ADMINISTRATOR);
- } else {
- try {
- int iId = Integer.parseInt(id);
-
- // Try to login Patient, FamilyDoctor or SpecialistDoctor
- // TODO: Si Patient, FamilyDoctor o Specialist Doctor tienen el mismo id, solo
- // el paciente se puede logear. ¿Deberíamos cambiar esto permitiendo seleccionar
- // el perfil a logearse?
- PatientJPA pat = entman.find(PatientJPA.class, iId);
-
- if (pat != null) {
- usr = new LoggedUserTO(String.valueOf(pat.getId()), pat.getName(), pat.getPassword(), UserType.PATIENT);
- } else {
- FamilyDoctorJPA fdoc = entman.find(FamilyDoctorJPA.class, iId);
-
- if (fdoc != null) {
- usr = new LoggedUserTO(String.valueOf(fdoc.getId()), fdoc.getName(), fdoc.getPassword(), UserType.FAMILY_DOCTOR);
- } else {
- SpecialistDoctorJPA sdoc = entman.find(SpecialistDoctorJPA.class, iId);
-
- if (sdoc != null) {
- usr = new LoggedUserTO(String.valueOf(sdoc.getId()), sdoc.getName(), sdoc.getPassword(), UserType.SPECIALIST_DOCTOR);
- }
- }
- }
- } catch (NumberFormatException nf) {
- // id is not an intenger, so, login fails
- usr = null;
+ if (userCode.startsWith(Constants.PERSONAL_IDENTIFICATION_CODE_PREFIX)) {
+ // Si el identificador de usuario es de tipo paciente, intentamos realizar el
+ // login.
+ PatientJPA pat = this.commonServices.findPatientByCode(userCode);
+ if (pat != null) {
+ usr = new LoggedUserTO(String.valueOf(pat.getId()), pat.getName(), pat.getPassword(), UserType.PATIENT);
}
+ } else if (userCode.startsWith(Constants.PROFESSIONAL_NUMBER_PREFIX)) {
+ // Si el identificador de usuario es de tipo profesional, intentamos realizar el
+ // login, primero como médico de familia, después como especialista
+ FamilyDoctorJPA fd = this.commonServices.findFamilyDoctorByCode(userCode);
+ if (fd != null) {
+ usr = new LoggedUserTO(String.valueOf(fd.getId()), fd.getName(), fd.getPassword(), UserType.FAMILY_DOCTOR);
+ } else {
+ // No era un código de médico de familia, intenamos logearlo como especialista
+ SpecialistDoctorJPA sd = this.commonServices.findSpecialistDoctorByCode(userCode);
+
+ if (sd != null) {
+ usr = new LoggedUserTO(String.valueOf(sd.getId()), sd.getName(), sd.getPassword(), UserType.SPECIALIST_DOCTOR);
+ }
+ }
}
+ // Si todavía no hemos conseguido autenticar al usuario, podría tratarse de una
+ // dirección de email de un administrador que empiece por
+ // PERSONAL_IDENTIFICATION_CODE_PREFIX o por PROFESSIONAL_NUMBER_PREFIX, por lo
+ // cual intentamos login contra la tabla de administradores
+ if (usr == null) {
+ // Intentamos recuperar un registro de administrador
+ AdministratorJPA adm = entman.find(AdministratorJPA.class, userCode);
+
+ if (adm != null) {
+ usr = new LoggedUserTO(adm.getEmail(), adm.getEmail(), adm.getPassword(), UserType.ADMINISTRATOR);
+ }
+ }
+
+ // Si el objeto usr, es que hemos localizado un registro de usuario, verificamos
+ // la contraseña.
if (usr != null) {
// Comprobamos el password
if (usr.getPassword().equals(HashUtils.hashMD5(pwd)) == false) {
- // Bad Password, devolvemos null!
+ // Bad Password, devolvemos null! La autenticación falla.
usr = null;
}
}
diff --git a/1.sources/MyHealth/src/jpa/FamilyDoctorJPA.java b/1.sources/MyHealth/src/jpa/FamilyDoctorJPA.java
index dd02336..0c77993 100644
--- a/1.sources/MyHealth/src/jpa/FamilyDoctorJPA.java
+++ b/1.sources/MyHealth/src/jpa/FamilyDoctorJPA.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
@@ -26,8 +27,11 @@ public class FamilyDoctorJPA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
+ @Column(updatable = false)
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
+ @Column(nullable = false, unique = true)
+ private String professionalNumber;
private String nif;
private String name;
private String surname;
@@ -47,7 +51,8 @@ public class FamilyDoctorJPA implements Serializable {
super();
}
- public FamilyDoctorJPA(String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterJPA phc) {
+ public FamilyDoctorJPA(String pin, String nif, String name, String surname, String password, String email, PrimaryHealthCareCenterJPA phc) {
+ this.setProfessionalNumber(pin);
this.nif = nif;
this.name = name;
this.surname = surname;
@@ -122,4 +127,12 @@ public class FamilyDoctorJPA implements Serializable {
public void setPrimaryHealthCareCenter(PrimaryHealthCareCenterJPA center) {
this.primaryHealthCareCenter = center;
}
+
+ public String getProfessionalNumber() {
+ return professionalNumber;
+ }
+
+ public void setProfessionalNumber(String professionalNumber) {
+ this.professionalNumber = professionalNumber;
+ }
}
\ No newline at end of file
diff --git a/1.sources/MyHealth/src/jpa/MedicalSpecialtyJPA.java b/1.sources/MyHealth/src/jpa/MedicalSpecialtyJPA.java
index 92bd161..8b15906 100644
--- a/1.sources/MyHealth/src/jpa/MedicalSpecialtyJPA.java
+++ b/1.sources/MyHealth/src/jpa/MedicalSpecialtyJPA.java
@@ -2,7 +2,10 @@ package jpa;
import java.io.Serializable;
+import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@@ -18,6 +21,9 @@ public class MedicalSpecialtyJPA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
+ @Column(updatable = false)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Integer id;
private String name;
private String description;
@@ -33,7 +39,14 @@ public class MedicalSpecialtyJPA implements Serializable {
this.description = description;
}
- @Id
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer value) {
+ this.id = value;
+ }
+
public String getName() {
return name;
}
diff --git a/1.sources/MyHealth/src/jpa/PatientJPA.java b/1.sources/MyHealth/src/jpa/PatientJPA.java
index be58fef..764b444 100644
--- a/1.sources/MyHealth/src/jpa/PatientJPA.java
+++ b/1.sources/MyHealth/src/jpa/PatientJPA.java
@@ -2,6 +2,7 @@ package jpa;
import java.io.Serializable;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -22,15 +23,18 @@ public class PatientJPA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(updatable = false)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
+ @Column(nullable = false, unique = true)
+ private String personalIdentificationCode;
private String nif;
private String name;
private String surname;
private String password;
private String email;
@ManyToOne
- @JoinColumn (name="FamilyDoctorId")
+ @JoinColumn(name = "FamilyDoctorId")
private FamilyDoctorJPA familyDoctor;
/**
@@ -40,7 +44,8 @@ public class PatientJPA implements Serializable {
super();
}
- public PatientJPA(String nif, String name, String surname, String password, String email, FamilyDoctorJPA familyDoc) {
+ public PatientJPA(String pic, String nif, String name, String surname, String password, String email, FamilyDoctorJPA familyDoc) {
+ this.personalIdentificationCode = pic;
this.nif = nif;
this.name = name;
this.surname = surname;
@@ -96,11 +101,20 @@ public class PatientJPA implements Serializable {
public void setEmail(String email) {
this.email = email;
}
-
+
public FamilyDoctorJPA getFamilyDoctor() {
return familyDoctor;
}
- public void setFamilyDoctor(FamilyDoctorJPA familyDoc) {
+
+ public void setFamilyDoctor(FamilyDoctorJPA familyDoc) {
this.familyDoctor = familyDoc;
}
+
+ public String getPersonalIdentificationCode() {
+ return personalIdentificationCode;
+ }
+
+ public void setPersonalIdentificationCode(String personalIdentificationCode) {
+ this.personalIdentificationCode = personalIdentificationCode;
+ }
}
diff --git a/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java b/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java
index ce81e61..cfbece7 100644
--- a/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java
+++ b/1.sources/MyHealth/src/jpa/PrimaryHealthCareCenterJPA.java
@@ -2,7 +2,10 @@ package jpa;
import java.io.Serializable;
+import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@@ -18,6 +21,9 @@ public class PrimaryHealthCareCenterJPA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
+ @Column(updatable = false)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Integer id;
private String name;
private String location;
@@ -33,6 +39,14 @@ public class PrimaryHealthCareCenterJPA implements Serializable {
this.location = location;
}
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer value) {
+ this.id = value;
+ }
+
public String getName() {
return name;
}
diff --git a/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java b/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java
index 7c7e1b5..c845966 100644
--- a/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java
+++ b/1.sources/MyHealth/src/jpa/SpecialistDoctorJPA.java
@@ -2,6 +2,7 @@ package jpa;
import java.io.Serializable;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -22,15 +23,18 @@ public class SpecialistDoctorJPA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @Column(updatable = false)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
+ @Column(nullable = false, unique = true)
+ private String professionalNumber;
private String nif;
private String name;
private String surname;
private String password;
private String email;
@ManyToOne
- @JoinColumn(name = "MedicalSpecialtyId")
+ @JoinColumn(name = "MedicalSpecialtyId")
private MedicalSpecialtyJPA medicalSpecialty;
/**
@@ -40,7 +44,8 @@ public class SpecialistDoctorJPA implements Serializable {
super();
}
- public SpecialistDoctorJPA(String nif, String name, String surname, String password, String email, MedicalSpecialtyJPA ms) {
+ public SpecialistDoctorJPA(String pic, String nif, String name, String surname, String password, String email, MedicalSpecialtyJPA ms) {
+ this.setProfessionalNumber(pic);
this.nif = nif;
this.name = name;
this.surname = surname;
@@ -104,4 +109,12 @@ public class SpecialistDoctorJPA implements Serializable {
public void setMedicalSpecialty(MedicalSpecialtyJPA specialty) {
this.medicalSpecialty = specialty;
}
+
+ public String getProfessionalNumber() {
+ return professionalNumber;
+ }
+
+ public void setProfessionalNumber(String professionalNumber) {
+ this.professionalNumber = professionalNumber;
+ }
}
diff --git a/1.sources/MyHealth/src/jpa/VisitJPA.java b/1.sources/MyHealth/src/jpa/VisitJPA.java
index e6e6b36..bb5ef55 100644
--- a/1.sources/MyHealth/src/jpa/VisitJPA.java
+++ b/1.sources/MyHealth/src/jpa/VisitJPA.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.sql.Time;
import java.util.Date;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -12,7 +13,6 @@ import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
-
/**
*
* @author Marcos García Núñez (mgarcianun@uoc.edu)
@@ -25,17 +25,19 @@ public class VisitJPA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
+ @Column(updatable = false)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Date date;
private Time time;
private String observations;
private String result;
- @ManyToOne
- @JoinColumn (name="FamilyDoctorId")
- private FamilyDoctorJPA familyDoctor;
- @ManyToOne
- @JoinColumn (name="PatientId")
- private PatientJPA patient;
+ @ManyToOne
+ @JoinColumn(name = "FamilyDoctorId")
+ private FamilyDoctorJPA familyDoctor;
+ @ManyToOne
+ @JoinColumn(name = "PatientId")
+ private PatientJPA patient;
/**
* Class constructor methods
@@ -46,14 +48,14 @@ public class VisitJPA implements Serializable {
public VisitJPA(Integer id, Date date, Time time, String observations, String result) {
this.id = id;
- this.date=date;
+ this.date = date;
this.time = time;
this.observations = observations;
this.result = result;
}
@Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
@@ -85,21 +87,23 @@ public class VisitJPA implements Serializable {
public void setObservations(String observation) {
this.observations = observations;
}
+
/**
* Methods get/set persistent relationships
*/
public FamilyDoctorJPA getFamilyDoctor() {
return familyDoctor;
}
- public void setFamilyDoctor(FamilyDoctorJPA familyDoc) {
+
+ public void setFamilyDoctor(FamilyDoctorJPA familyDoc) {
this.familyDoctor = familyDoc;
}
-
+
public PatientJPA getPatient() {
return patient;
}
-
- public void setPatient (PatientJPA pat) {
- this.patient=pat;
+
+ public void setPatient(PatientJPA pat) {
+ this.patient = pat;
}
-}
+}
diff --git a/1.sources/MyHealth/src/managedbean/profile/ChangeFamilyDoctorMBean.java b/1.sources/MyHealth/src/managedbean/profile/ChangeFamilyDoctorMBean.java
index 77996c8..463af12 100644
--- a/1.sources/MyHealth/src/managedbean/profile/ChangeFamilyDoctorMBean.java
+++ b/1.sources/MyHealth/src/managedbean/profile/ChangeFamilyDoctorMBean.java
@@ -1,7 +1,7 @@
package managedbean.profile;
import java.io.Serializable;
-import java.util.Collection;
+import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
@@ -11,6 +11,7 @@ import javax.inject.Named;
import TO.FamilyDoctorTO;
import TO.LoggedUserTO;
import TO.PatientTO;
+import common.Constants;
import common.UserType;
import managedbean.common.ManagedBeanBase;
import managedbean.common.SessionUtils;
@@ -28,7 +29,8 @@ public class ChangeFamilyDoctorMBean extends ManagedBeanBase implements Serializ
private int id;
private FamilyDoctorTO currentFamilyDoctor;
private FamilyDoctorTO newFamilyDoctor;
- private Collection familyDoctorList;
+ private List familyDoctorList;
+ private String lastUIQuery;
public ChangeFamilyDoctorMBean() {
@@ -38,6 +40,7 @@ public class ChangeFamilyDoctorMBean extends ManagedBeanBase implements Serializ
public void init() {
// Recuperamos el usuario logeado actual
LoggedUserTO usr = null;
+ this.lastUIQuery = "";
try {
usr = SessionUtils.getloggedOnUser();
@@ -48,9 +51,9 @@ public class ChangeFamilyDoctorMBean extends ManagedBeanBase implements Serializ
this.id = Integer.valueOf(usr.getId());
if (usr.getUserType() == UserType.PATIENT) {
- this.familyDoctorList = this.getRemoteManagerCommon().listAllFamilyDoctors();
+ this.familyDoctorList = this.getRemoteManagerCommon().listFamilyDoctorsPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
- PatientTO pat = this.getRemoteManagerCommon().retrievePatient(this.id);
+ PatientTO pat = this.getRemoteManagerCommon().findPatientById(this.id);
this.setCurrentFamilyDoctor(pat.getFamilyDoctor());
}
}
@@ -60,10 +63,19 @@ public class ChangeFamilyDoctorMBean extends ManagedBeanBase implements Serializ
}
- public Collection getFamilyDoctorList() {
+ public List getFamilyDoctorList() {
return familyDoctorList;
}
+ public List completeFamilyDoctor(String query) {
+ if (query != null && query.equals(this.lastUIQuery) == false) {
+ this.lastUIQuery = query;
+ // Recuperamos las 200 primeras coincidencias
+ this.familyDoctorList = this.getRemoteManagerCommon().listFamilyDoctorsFiltered(query, 0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ }
+ return this.familyDoctorList;
+ }
+
public int getId() {
return id;
}
diff --git a/1.sources/MyHealth/src/managedbean/profile/ChangePrimaryHealthCareCenterMBean.java b/1.sources/MyHealth/src/managedbean/profile/ChangePrimaryHealthCareCenterMBean.java
index 7d894a0..f0c6107 100644
--- a/1.sources/MyHealth/src/managedbean/profile/ChangePrimaryHealthCareCenterMBean.java
+++ b/1.sources/MyHealth/src/managedbean/profile/ChangePrimaryHealthCareCenterMBean.java
@@ -2,6 +2,7 @@ package managedbean.profile;
import java.io.Serializable;
import java.util.Collection;
+import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
@@ -11,6 +12,7 @@ import javax.inject.Named;
import TO.FamilyDoctorTO;
import TO.LoggedUserTO;
import TO.PrimaryHealthCareCenterTO;
+import common.Constants;
import common.UserType;
import managedbean.common.ManagedBeanBase;
import managedbean.common.SessionUtils;
@@ -28,7 +30,8 @@ public class ChangePrimaryHealthCareCenterMBean extends ManagedBeanBase implemen
private int id;
private PrimaryHealthCareCenterTO currentCenter;
private PrimaryHealthCareCenterTO newCenter;
- private Collection primaryHealthCareCentersList;
+ private List primaryHealthCareCentersList;
+ private String lastUIQuery;
public ChangePrimaryHealthCareCenterMBean() {
@@ -38,6 +41,8 @@ public class ChangePrimaryHealthCareCenterMBean extends ManagedBeanBase implemen
public void init() {
// Recuperamos el usuario logeado actual
LoggedUserTO usr = null;
+ this.lastUIQuery = "";
+
try {
usr = SessionUtils.getloggedOnUser();
@@ -48,9 +53,9 @@ public class ChangePrimaryHealthCareCenterMBean extends ManagedBeanBase implemen
this.id = Integer.valueOf(usr.getId());
if (usr.getUserType() == UserType.FAMILY_DOCTOR) {
- this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listAllCAPs();
+ this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listCAPsPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
- FamilyDoctorTO fd = this.getRemoteManagerCommon().retrieveFamilyDoctor(this.id);
+ FamilyDoctorTO fd = this.getRemoteManagerCommon().findFamilyDoctorById(this.id);
this.setCurrentCenter(fd.getPrimaryHealthCareCenter());
}
}
@@ -60,9 +65,18 @@ public class ChangePrimaryHealthCareCenterMBean extends ManagedBeanBase implemen
}
- public Collection getPhcList() {
+ public List getPhcList() {
return primaryHealthCareCentersList;
}
+
+ public List completePrimaryHealCareCenter(String query) {
+ if (query != null && query.equals(this.lastUIQuery) == false) {
+ this.lastUIQuery = query;
+ // Recuperamos las 200 primeras coincidencias
+ this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listCAPsFiltered(query, 0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ }
+ return this.primaryHealthCareCentersList;
+ }
public int getId() {
return id;
diff --git a/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java b/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java
index 331f6eb..d53a778 100644
--- a/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java
+++ b/1.sources/MyHealth/src/managedbean/profile/RegisterUserMBean.java
@@ -2,7 +2,6 @@ package managedbean.profile;
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
import javax.annotation.PostConstruct;
@@ -19,6 +18,7 @@ import TO.MedicalSpecialtyTO;
import TO.PatientTO;
import TO.PrimaryHealthCareCenterTO;
import TO.SpecialistDoctorTO;
+import common.Constants;
import common.UserType;
import managedbean.common.ManagedBeanBase;
import managedbean.common.ValidationUtils;
@@ -35,8 +35,8 @@ import managedbean.common.ValidationUtils;
public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
private static final long serialVersionUID = 1L;
-
private int id;
+ private String cipCode;
private String nif;
private String name;
private String surname;
@@ -44,14 +44,16 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
private String password;
private String email;
private boolean registered;
+ private String lastUIQueryPH;
+ private String lastUIQueryMS;
// private HashMap userTypes;
- private List userTypes;
- private String userType;
+ private List availableUserTypes;
+ private UserType userType;
private PrimaryHealthCareCenterTO primaryHealthCareCenter;
private MedicalSpecialtyTO medicalSpecialty;
- private Collection medicalSpecialitiesList;
- private Collection primaryHealthCareCentersList;
+ private List medicalSpecialitiesList;
+ private List primaryHealthCareCentersList;
public RegisterUserMBean() {
@@ -59,24 +61,26 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
@PostConstruct
public void init() {
- this.userTypes = new ArrayList();
- this.userTypes.add(UserType.PATIENT);
- this.userTypes.add(UserType.FAMILY_DOCTOR);
- this.userTypes.add(UserType.SPECIALIST_DOCTOR);
+ this.availableUserTypes = new ArrayList();
+ this.availableUserTypes.add(UserType.PATIENT);
+ this.availableUserTypes.add(UserType.FAMILY_DOCTOR);
+ this.availableUserTypes.add(UserType.SPECIALIST_DOCTOR);
this.registered = false;
+ this.lastUIQueryPH = "";
+ this.lastUIQueryMS = "";
- this.userType = UserType.PATIENT.name();
+ this.userType = UserType.PATIENT;
- this.medicalSpecialitiesList = this.getRemoteManagerCommon().listAllMedicalSpecialities();
- this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listAllCAPs();
+ this.medicalSpecialitiesList = this.getRemoteManagerCommon().listMedicalSpecialitiesPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listCAPsPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
}
- public List getUserTypes() {
- return userTypes;
+ public List getAvailableUserTypes() {
+ return availableUserTypes;
}
public void onUserTypeChange() {
- switch (UserType.valueOf(this.userType)) {
+ switch (this.userType) {
case SPECIALIST_DOCTOR:
try {
PrimeFaces.current().ajax().addCallbackParam("specs", true);
@@ -98,24 +102,42 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
}
}
- public Collection getMedicalSpecialtiesList() {
+ public List getMedicalSpecialtiesList() {
return medicalSpecialitiesList;
}
- public Collection getPhcList() {
+ public List getPhcList() {
return primaryHealthCareCentersList;
}
+ public List completePrimaryHealCareCenter(String query) {
+ if (query != null && query.equals(this.lastUIQueryPH) == false) {
+ this.lastUIQueryPH = query;
+ // Recuperamos las 200 primeras coincidencias
+ this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listCAPsFiltered(query, 0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ }
+ return this.primaryHealthCareCentersList;
+ }
+
+ public List completeMedicalSpecialty(String query) {
+ if (query != null && query.equals(this.lastUIQueryMS) == false) {
+ this.lastUIQueryMS = query;
+ // Recuperamos las 200 primeras coincidencias
+ this.medicalSpecialitiesList = this.getRemoteManagerCommon().listMedicalSpecialitiesFiltered(query, 0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ }
+ return this.medicalSpecialitiesList;
+ }
+
public boolean isPatient() {
- return (UserType.valueOf(this.userType) == UserType.PATIENT);
+ return (this.userType == UserType.PATIENT);
}
public boolean isFamilyDoctor() {
- return (UserType.valueOf(this.userType) == UserType.FAMILY_DOCTOR);
+ return (this.userType == UserType.FAMILY_DOCTOR);
}
public boolean isSpecialistDoctor() {
- return (UserType.valueOf(this.userType) == UserType.SPECIALIST_DOCTOR);
+ return (this.userType == UserType.SPECIALIST_DOCTOR);
}
public boolean isDoctor() {
@@ -162,14 +184,6 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
this.nif = nif;
}
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
public void addNewUser() {
int error = 0;
@@ -188,20 +202,20 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
if (error == 0) {
try {
- switch (UserType.valueOf(this.userType)) {
+ switch (this.userType) {
case PATIENT:
PatientTO pat = this.getRemoteManagerProfile().registerPatient(id, nif, name, surname, password, email);
- this.id = pat.getId();
+ this.cipCode = pat.getPersonalIdentificationCode();
break;
case FAMILY_DOCTOR:
FamilyDoctorTO fd = this.getRemoteManagerProfile().registerFamilyDoctor(id, nif, name, surname, password, email, this.primaryHealthCareCenter);
- this.id = fd.getId();
+ this.cipCode = fd.getProfessionalNumber();
break;
case SPECIALIST_DOCTOR:
SpecialistDoctorTO sd = this.getRemoteManagerProfile().registerSpecialistDoctor(id, nif, name, surname, password, email, this.medicalSpecialty);
- this.id = sd.getId();
+ this.cipCode = sd.getProfessionalNumber();
break;
case ADMINISTRATOR:
@@ -217,32 +231,40 @@ public class RegisterUserMBean extends ManagedBeanBase implements Serializable {
}
}
- public String getUserType() {
+ public UserType getUserType() {
return userType;
}
- public void setUserType(String userType) {
- this.userType = userType;
+ public void setUserType(UserType value) {
+ this.userType = value;
}
public MedicalSpecialtyTO getMedicalSpecialty() {
return medicalSpecialty;
}
- public void setMedicalSpecialty(MedicalSpecialtyTO medicalSpecialty) {
- this.medicalSpecialty = medicalSpecialty;
+ public void setMedicalSpecialty(MedicalSpecialtyTO value) {
+ this.medicalSpecialty = value;
}
public PrimaryHealthCareCenterTO getPrimaryHealthCareCenter() {
return primaryHealthCareCenter;
}
- public void setPrimaryHealthCareCenter(PrimaryHealthCareCenterTO primaryHealthCareCenter) {
- this.primaryHealthCareCenter = primaryHealthCareCenter;
+ public void setPrimaryHealthCareCenter(PrimaryHealthCareCenterTO value) {
+ this.primaryHealthCareCenter = value;
}
public boolean isRegistered() {
return registered;
}
+ public String getCipCode() {
+ return cipCode;
+ }
+
+ public void setCipCode(String cipCode) {
+ this.cipCode = cipCode;
+ }
+
}
diff --git a/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java b/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java
index 6bd252f..9199d59 100644
--- a/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java
+++ b/1.sources/MyHealth/src/managedbean/profile/UpdateProfileMBean.java
@@ -2,20 +2,12 @@ package managedbean.profile;
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
-import java.util.Properties;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
-import javax.faces.context.ExternalContext;
-import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.print.attribute.standard.Severity;
import javax.resource.NotSupportedException;
import org.primefaces.PrimeFaces;
@@ -26,9 +18,9 @@ import TO.MedicalSpecialtyTO;
import TO.PatientTO;
import TO.PrimaryHealthCareCenterTO;
import TO.SpecialistDoctorTO;
+import common.Constants;
import common.HashUtils;
import common.UserType;
-import ejb.systemAdmin.SystemAdminFacadeRemote;
import managedbean.common.ManagedBeanBase;
import managedbean.common.SessionUtils;
import managedbean.common.ValidationUtils;
@@ -47,6 +39,7 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
private static final long serialVersionUID = 1L;
private int id;
+ private String cipCode;
private String nif;
private String name;
private String surname;
@@ -54,13 +47,18 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
private String oldPassword;
private String password;
private String email;
+ private String lastUIQueryPH;
+ private String lastUIQueryMS;
+ private String lastUIQueryFD;
private List userTypes;
- private String userType;
+ private UserType userType;
private PrimaryHealthCareCenterTO primaryHealthCareCenter;
private MedicalSpecialtyTO medicalSpecialty;
- private Collection medicalSpecialitiesList;
- private Collection primaryHealthCareCentersList;
+ private List medicalSpecialitiesList;
+ private List primaryHealthCareCentersList;
+ private FamilyDoctorTO familyDoctor;
+ private List familyDoctorList;
public UpdateProfileMBean() {
@@ -72,6 +70,8 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
this.userTypes.add(UserType.PATIENT);
this.userTypes.add(UserType.FAMILY_DOCTOR);
this.userTypes.add(UserType.SPECIALIST_DOCTOR);
+ this.lastUIQueryPH = "";
+ this.lastUIQueryMS = "";
// Recuperamos el usuario logeado actual
LoggedUserTO usr = null;
@@ -82,40 +82,21 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Sesión no válida",
"Su sesión actual no es válida, por favor cierre su sesión y vuelva a logearse en el sistema.");
else {
- this.userType = usr.getUserType().getName();
+ this.userType = usr.getUserType();
this.id = Integer.valueOf(usr.getId());
switch (usr.getUserType()) {
case PATIENT:
- PatientTO pat = this.getRemoteManagerCommon().retrievePatient(this.id);
-
- this.name = pat.getName();
- this.surname = pat.getName();
- this.nif = pat.getNif();
- this.email = pat.getEmail();
- this.currentPassword = pat.getPassword();
+ this.familyDoctorList = this.getRemoteManagerCommon().listFamilyDoctorsPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ this.setPatientData(this.getRemoteManagerCommon().findPatientById(this.id));
break;
case SPECIALIST_DOCTOR:
- this.medicalSpecialitiesList = this.getRemoteManagerCommon().listAllMedicalSpecialities();
- SpecialistDoctorTO sd = this.getRemoteManagerCommon().retrieveSpecialistDoctor(this.id);
-
- this.name = sd.getName();
- this.surname = sd.getName();
- this.nif = sd.getNif();
- this.email = sd.getEmail();
- this.currentPassword = sd.getPassword();
- this.medicalSpecialty = sd.getMedicalSpecialty();
+ this.medicalSpecialitiesList = this.getRemoteManagerCommon().listMedicalSpecialitiesPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ this.setSpecialistDoctorData(this.getRemoteManagerCommon().findSpecialistDoctorById(this.id));
break;
case FAMILY_DOCTOR:
- this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listAllCAPs();
- FamilyDoctorTO fd = this.getRemoteManagerCommon().retrieveFamilyDoctor(this.id);
-
- this.name = fd.getName();
- this.surname = fd.getName();
- this.nif = fd.getNif();
- this.email = fd.getEmail();
- this.currentPassword = fd.getPassword();
- this.primaryHealthCareCenter = fd.getPrimaryHealthCareCenter();
+ this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listCAPsPaged(0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ this.setFamilyDoctorData(this.getRemoteManagerCommon().findFamilyDoctorById(this.id));
break;
case ADMINISTRATOR:
// TODO: Recuperar usuario administrador para editar su perfil ¿?
@@ -126,58 +107,98 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
} catch (Exception e) {
this.manageException(e);
}
+ }
+ private void setPatientData(PatientTO pat) {
+ this.id = pat.getId();
+ this.cipCode = pat.getPersonalIdentificationCode();
+ this.name = pat.getName();
+ this.surname = pat.getName();
+ this.nif = pat.getNif();
+ this.email = pat.getEmail();
+ this.currentPassword = pat.getPassword();
+ this.familyDoctor = pat.getFamilyDoctor();
+ }
+
+ private void setFamilyDoctorData(FamilyDoctorTO fd) {
+ this.id = fd.getId();
+ this.cipCode = fd.getProfessionalNumber();
+ this.name = fd.getName();
+ this.surname = fd.getName();
+ this.nif = fd.getNif();
+ this.email = fd.getEmail();
+ this.currentPassword = fd.getPassword();
+ this.primaryHealthCareCenter = fd.getPrimaryHealthCareCenter();
+ }
+
+ private void setSpecialistDoctorData(SpecialistDoctorTO sd) {
+ this.id = sd.getId();
+ this.cipCode = sd.getProfessionalNumber();
+ this.name = sd.getName();
+ this.surname = sd.getName();
+ this.nif = sd.getNif();
+ this.email = sd.getEmail();
+ this.currentPassword = sd.getPassword();
+ this.medicalSpecialty = sd.getMedicalSpecialty();
}
public List getUserTypes() {
return userTypes;
}
- public void onUserTypeChange() {
- switch (UserType.valueOf(this.userType)) {
- case SPECIALIST_DOCTOR:
- try {
- PrimeFaces.current().ajax().addCallbackParam("specs", true);
- } catch (Exception e) {
- this.manageException(e);
- }
- break;
- case FAMILY_DOCTOR:
- try {
- PrimeFaces.current().ajax().addCallbackParam("caps", true);
- } catch (Exception e) {
- this.manageException(e);
- }
- break;
- case ADMINISTRATOR:
- case PATIENT:
- PrimeFaces.current().ajax().addCallbackParam("pats", true);
- break;
- }
- }
-
- public Collection getMedicalSpecialtiesList() {
+ public List getMedicalSpecialtiesList() {
return medicalSpecialitiesList;
}
- public Collection getPhcList() {
+ public List getPhcList() {
return primaryHealthCareCentersList;
}
- public boolean isPatient() {
- return (UserType.valueOf(this.userType) == UserType.PATIENT);
+ public List completePrimaryHealCareCenter(String query) {
+ if (query != null && query.equals(this.lastUIQueryPH) == false) {
+ this.lastUIQueryPH = query;
+ // Recuperamos las 200 primeras coincidencias
+ this.primaryHealthCareCentersList = this.getRemoteManagerCommon().listCAPsFiltered(query, 0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ }
+ return this.primaryHealthCareCentersList;
}
- public boolean isFamilyDoctor() {
- return (UserType.valueOf(this.userType) == UserType.FAMILY_DOCTOR);
+ public List completeMedicalSpecialty(String query) {
+ if (query != null && query.equals(this.lastUIQueryMS) == false) {
+ this.lastUIQueryMS = query;
+ // Recuperamos las 200 primeras coincidencias
+ this.medicalSpecialitiesList = this.getRemoteManagerCommon().listMedicalSpecialitiesFiltered(query, 0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ }
+ return this.medicalSpecialitiesList;
}
- public boolean isSpecialistDoctor() {
- return (UserType.valueOf(this.userType) == UserType.SPECIALIST_DOCTOR);
+ public List getFamilyDoctorList() {
+ return familyDoctorList;
}
- public boolean isDoctor() {
- return (isFamilyDoctor() || isSpecialistDoctor());
+ public List completeFamilyDoctor(String query) {
+ if (query != null && query.equals(this.lastUIQueryFD) == false) {
+ this.lastUIQueryFD = query;
+ // Recuperamos las 200 primeras coincidencias
+ this.familyDoctorList = this.getRemoteManagerCommon().listFamilyDoctorsFiltered(query, 0, Constants.MAX_ITEMS_AUTOCOMPLETE_SEARCH);
+ }
+ return this.familyDoctorList;
+ }
+
+ public boolean isUserTypePatient() {
+ return (this.userType == UserType.PATIENT);
+ }
+
+ public boolean isUserTypeFamilyDoctor() {
+ return (this.userType == UserType.FAMILY_DOCTOR);
+ }
+
+ public boolean isUserTypeSpecialistDoctor() {
+ return (this.userType == UserType.SPECIALIST_DOCTOR);
+ }
+
+ public boolean isUserTypeDoctor() {
+ return (isUserTypeFamilyDoctor() || isUserTypeSpecialistDoctor());
}
public String getEmail() {
@@ -228,11 +249,11 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
int error = 0;
boolean changePassword = (this.oldPassword != null && this.oldPassword.equals("") == false) || (this.password != null && this.password.equals("") == false);
- if (this.isFamilyDoctor() && this.primaryHealthCareCenter == null) {
+ if (this.isUserTypeFamilyDoctor() && 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) {
+ if (this.isUserTypeSpecialistDoctor() && this.medicalSpecialty == null) {
this.addFacesMessage(FacesMessage.SEVERITY_WARN, "Especialidad médica no seleccionada", "Por favor, especifique una especialidad médica.");
error++;
}
@@ -255,20 +276,20 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
if (error == 0) {
try {
- switch (UserType.valueOf(this.userType)) {
+ switch (this.userType) {
case PATIENT:
PatientTO pat = this.getRemoteManagerProfile().updatePatientData(id, nif, name, surname, password, email);
- this.id = pat.getId();
+ this.setPatientData(pat);
break;
case FAMILY_DOCTOR:
FamilyDoctorTO fd = this.getRemoteManagerProfile().updateFamilyDoctorData(id, nif, name, surname, password, email, this.primaryHealthCareCenter);
- this.id = fd.getId();
+ this.setFamilyDoctorData(fd);
break;
case SPECIALIST_DOCTOR:
SpecialistDoctorTO sd = this.getRemoteManagerProfile().updateSpecialistDoctorData(id, nif, name, surname, password, email, this.medicalSpecialty);
- this.id = sd.getId();
+ this.setSpecialistDoctorData(sd);
break;
case ADMINISTRATOR:
@@ -288,12 +309,12 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
}
}
- public String getUserType() {
+ public UserType getUserType() {
return userType;
}
- public void setUserType(String userType) {
- this.userType = userType;
+ public void setUserType(UserType value) {
+ this.userType = value;
}
public MedicalSpecialtyTO getMedicalSpecialty() {
@@ -320,4 +341,16 @@ public class UpdateProfileMBean extends ManagedBeanBase implements Serializable
this.oldPassword = oldPassword;
}
+ public FamilyDoctorTO getFamilyDoctor() {
+ return familyDoctor;
+ }
+
+ public void setFamilyDoctor(FamilyDoctorTO familyDoctor) {
+ this.familyDoctor = familyDoctor;
+ }
+
+ public String getCipCode() {
+ return cipCode;
+ }
+
}
diff --git a/1.sources/MyHealth/src/managedbean/validators/EmailValidator.java b/1.sources/MyHealth/src/managedbean/validators/EmailValidator.java
new file mode 100644
index 0000000..f6d2fcc
--- /dev/null
+++ b/1.sources/MyHealth/src/managedbean/validators/EmailValidator.java
@@ -0,0 +1,43 @@
+package managedbean.validators;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.FacesValidator;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+
+import org.primefaces.validate.ClientValidator;
+
+@FacesValidator("emailValidator")
+public class EmailValidator implements Validator, ClientValidator {
+
+ private final static String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
+ private final static Pattern EMAIL_COMPILED_PATTERN = Pattern.compile(EMAIL_PATTERN);
+
+ public void validate(FacesContext context, UIComponent comp, Object value) throws ValidatorException {
+ String strValue = "";
+
+ if (value != null)
+ strValue = String.valueOf(value);
+
+ if (strValue.equals(""))
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Correo electrónico no válido", "La dirección " + value + " no es una dirección válida"));
+
+ Matcher matcher = EMAIL_COMPILED_PATTERN.matcher((String) value);
+ if (!matcher.matches())
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Correo electrónico no válido", "La dirección " + value + " no es una dirección válida"));
+ }
+
+ public Map getMetadata() {
+ return null;
+ }
+
+ public String getValidatorId() {
+ return "emailValidator";
+ }
+}
diff --git a/1.sources/MyHealth/src/managedbean/validators/NifValidator.java b/1.sources/MyHealth/src/managedbean/validators/NifValidator.java
new file mode 100644
index 0000000..c663919
--- /dev/null
+++ b/1.sources/MyHealth/src/managedbean/validators/NifValidator.java
@@ -0,0 +1,39 @@
+package managedbean.validators;
+
+import java.util.Map;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.FacesValidator;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+
+import org.primefaces.validate.ClientValidator;
+
+import managedbean.common.ValidationUtils;
+
+@FacesValidator("nifValidator")
+public class NifValidator implements Validator, ClientValidator {
+
+ public void validate(FacesContext context, UIComponent comp, Object value) throws ValidatorException {
+ String strValue = "";
+
+ if (value != null)
+ strValue = String.valueOf(value);
+
+ if (strValue.equals(""))
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "El NIF no es válido", "El NIF " + value + " no es válido"));
+
+ if (ValidationUtils.isValid(strValue) == false)
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "El NIF no es válido", "El NIF " + value + " no es válido"));
+ }
+
+ public Map getMetadata() {
+ return null;
+ }
+
+ public String getValidatorId() {
+ return "nifValidator";
+ }
+}
diff --git a/2.database/01.CreateTables.sql b/2.database/01.CreateTables.sql
index 7cfac52..c28d5be 100644
--- a/2.database/01.CreateTables.sql
+++ b/2.database/01.CreateTables.sql
@@ -1,20 +1,88 @@
+DO
+$$
+begin
+
+IF NOT EXISTS(SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'myhealth') THEN
+ CREATE SCHEMA myhealth;
+END IF;
+
+IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='usrmyhealth') THEN
+ create user usrmyhealth with encrypted password 'myhealth.123';
+END IF;
+
+IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='USER') THEN
+ create user "USER" with encrypted password 'PASSWORD';
+END IF;
+
+GRANT ALL ON SCHEMA myhealth TO "USER";
+GRANT ALL ON SCHEMA myhealth TO usrmyhealth;
+
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='administrator') THEN
+ drop table myhealth.administrator;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='familydoctor') THEN
+ drop table myhealth.familydoctor;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='medicalspecialty') THEN
+ drop table myhealth.medicalspecialty;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='medicaltest') THEN
+ drop table myhealth.medicaltest;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='patient') THEN
+ drop table myhealth.patient;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='primaryhealthcarecenter') THEN
+ drop table myhealth.primaryhealthcarecenter;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='question') THEN
+ drop table myhealth.question;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='response') THEN
+ drop table myhealth.response;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='specialistdoctor') THEN
+ drop table myhealth.specialistdoctor;
+end if;
+if exists (SELECT 1 FROM pg_tables WHERE schemaname='myhealth' and tablename='visit') THEN
+ drop table myhealth.visit;
+end if;
+
/*
-DROP TABLE myhealth.Administrator;
-DROP TABLE myhealth.FamilyDoctor;
-DROP TABLE myhealth.MedicalSpecialty;
-DROP TABLE myhealth.MedicalTest;
-DROP TABLE myhealth.Patient;
-DROP TABLE myhealth.PrimaryHealthCareCenter;
-DROP TABLE myhealth.Question;
-DROP TABLE myhealth.Response;
-DROP TABLE myhealth.SpecialistDoctor;
-DROP TABLE myhealth.Visit;
+drop table myhealth.administrator;
+drop table myhealth.familydoctor;
+drop table myhealth.medicalspecialty;
+drop table myhealth.medicaltest;
+drop table myhealth.patient;
+drop table myhealth.primaryhealthcarecenter;
+drop table myhealth.question;
+drop table myhealth.response;
+drop table myhealth.specialistdoctor;
+drop table myhealth.visit;
*/
+if exists (SELECT 1 FROM pg_sequences WHERE schemaname='myhealth' and sequencename='profesionalnumber') THEN
+ drop sequence myhealth.profesionalnumber;
+end if;
+
+if exists (SELECT 1 FROM pg_sequences WHERE schemaname='myhealth' and sequencename='codigoidentificacionpaciente') THEN
+ drop sequence myhealth.codigoidentificacionpaciente;
+end if;
+
+CREATE SEQUENCE myhealth.ProfesionalNumber
+ INCREMENT 1
+ START 1000
+ MINVALUE 1000
+ CACHE 1;
+
+CREATE SEQUENCE myhealth.CodigoIdentificacionPaciente
+ INCREMENT 1
+ START 1000
+ MINVALUE 1000
+ CACHE 1;
+
-- Table: myhealth.administrator
-
-- DROP TABLE myhealth.administrator;
-
CREATE TABLE myhealth.administrator
(
email VARCHAR(120) COLLATE pg_catalog."default" NOT NULL,
@@ -32,17 +100,21 @@ ALTER TABLE myhealth.administrator
CREATE TABLE myhealth.familydoctor
(
- id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
- password VARCHAR(100) COLLATE pg_catalog."default" NOT NULL,
- nif VARCHAR(50) COLLATE pg_catalog."default",
- surname VARCHAR(100) COLLATE pg_catalog."default",
+ id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
+ professionalnumber VARCHAR(15) NOT NULL COLLATE pg_catalog."default",
+ password VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
+ nif VARCHAR(50) NOT NULL COLLATE pg_catalog."default",
+ name VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
+ surname VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
email VARCHAR(120) COLLATE pg_catalog."default",
- name VARCHAR(100) COLLATE pg_catalog."default",
- primaryhealthcarecenterid VARCHAR(50) COLLATE pg_catalog."default",
+ primaryhealthcarecenterid integer,
CONSTRAINT familydoctor_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
+CREATE UNIQUE INDEX family_doctor_professionaln_index
+ ON myhealth.familydoctor (professionalnumber);
+
ALTER TABLE myhealth.familydoctor
OWNER to "USER";
@@ -90,43 +162,33 @@ ALTER TABLE myhealth.medicaltest
CREATE TABLE myhealth.patient
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
- password VARCHAR(100) COLLATE pg_catalog."default",
- nif VARCHAR(50) COLLATE pg_catalog."default",
- surname VARCHAR(100) COLLATE pg_catalog."default",
+ personalIdentificationCode VARCHAR(15) NOT NULL COLLATE pg_catalog."default",
+ password VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
+ nif VARCHAR(50) NOT NULL COLLATE pg_catalog."default",
+ name VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
+ surname VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
email VARCHAR(120) COLLATE pg_catalog."default",
- name VARCHAR(100) COLLATE pg_catalog."default",
familydoctorid INTEGER,
CONSTRAINT patient_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
+CREATE UNIQUE INDEX patient_pic_index
+ ON myhealth.patient (personalIdentificationCode);
+
ALTER TABLE myhealth.patient
OWNER to "USER";
--- Table: myhealth.location
-
--- DROP TABLE myhealth.location;
-
-CREATE TABLE myhealth.location
-(
- id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
- name VARCHAR(100) COLLATE pg_catalog."default" NOT NULL,
- CONSTRAINT primarylocation_pkey PRIMARY KEY (id)
-)
-TABLESPACE pg_default;
-
-ALTER TABLE myhealth.location
- OWNER to "USER";
-
-- Table: myhealth.primaryhealthcarecenter
-- DROP TABLE myhealth.primaryhealthcarecenter;
CREATE TABLE myhealth.primaryhealthcarecenter
(
- name VARCHAR(50) COLLATE pg_catalog."default" NOT NULL,
- location INTEGER,
- CONSTRAINT primaryhealthcarecenter_pkey PRIMARY KEY (name)
+ id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
+ name VARCHAR(150) COLLATE pg_catalog."default" NOT NULL,
+ location VARCHAR(512) COLLATE pg_catalog."default",
+ CONSTRAINT primaryhealthcarecenter_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
@@ -174,16 +236,20 @@ ALTER TABLE myhealth.response
CREATE TABLE myhealth.specialistdoctor
(
id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
- password VARCHAR(100) COLLATE pg_catalog."default",
- nif VARCHAR(50) COLLATE pg_catalog."default",
- surname VARCHAR(100) COLLATE pg_catalog."default",
+ professionalnumber VARCHAR(15) NOT NULL COLLATE pg_catalog."default",
+ password VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
+ nif VARCHAR(50) NOT NULL COLLATE pg_catalog."default",
+ name VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
+ surname VARCHAR(100) NOT NULL COLLATE pg_catalog."default",
email VARCHAR(120) COLLATE pg_catalog."default",
- name VARCHAR(100) COLLATE pg_catalog."default",
medicalspecialtyid INTEGER,
CONSTRAINT specialistdoctor_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
+CREATE UNIQUE INDEX specialistdoctor_professionaln_index
+ ON myhealth.specialistdoctor (professionalnumber);
+
ALTER TABLE myhealth.specialistdoctor
OWNER to "USER";
@@ -207,3 +273,5 @@ TABLESPACE pg_default;
ALTER TABLE myhealth.visit
OWNER to "USER";
+END;
+$$
diff --git a/2.database/02. Datos_prueba.sql b/2.database/02. Datos_prueba.sql
index 0183550..ccd897e 100644
--- a/2.database/02. Datos_prueba.sql
+++ b/2.database/02. Datos_prueba.sql
@@ -2,8 +2,26 @@
insert into myhealth.administrator (email, password) values ('admin@example.com', '21232F297A57A5A743894A0E4A801FC3');
insert into myhealth.administrator (email, password) values ('marcos@example.com', '21232F297A57A5A743894A0E4A801FC3');
--- Inserta Especialidades médicas
+-- Insertar Algunos centros médicos
+INSERT INTO myhealth.primaryhealthcarecenter(name, location) VALUES
+('CENTRO SAUDE A DOBLADA',' CALLE RUA FAISAN S/N '),
+('CENTRO SAUDE BEMBRIVE',' CARRETERA BEMBRIVE 259 '),
+('CENTRO SAUDE BOLIVIA',' CALLE PIZARRO 22 '),
+('CENTRO SAUDE CASCO VELLO',' PLAZA CONSTITUCION 7 '),
+('CENTRO SAUDE COIA',' CALLE PONTEAREAS S/N '),
+('CENTRO SAUDE COLMEIRO',' CALLE PINTOR COLMEIRO 11 '),
+('CENTRO SAUDE CORUXO',' CALLE RUA JOSE RIVAS CARRASQUEIRA S/N '),
+('CENTRO SAUDE LAVADORES',' TRAVESIA BARREIRO 1 36 '),
+('CENTRO SAUDE LOPEZ MORA',' CALLE LOPEZ MORA 54 '),
+('CENTRO SAUDE MATAMA',' CAMINO CAMIÑO BABIO-AS CARNEIRAS S/N '),
+('CENTRO SAUDE NICOLAS PEÑA',' CAMINO CAMIÑO REGUEIRO S/N '),
+('CENTRO SAUDE ROSALIA DE CASTRO-BEIRAMAR',' CALLE ROSALIA DE CASTRO 21 '),
+('CENTRO SAUDE RUA CUBA',' CALLE CUBA 10 '),
+('CENTRO SAUDE SAN PAIO DE NAVIA',' CALLE POZA CABALO S/N '),
+('CENTRO SAUDE SARDOMA',' CALLE RUA CANTEIRA DE BALIN 76 '),
+('CENTRO SAUDE TEIS',' CALLE ANGELA IGLESIAS REBOLLAR S/N ');
+-- Inserta Especialidades médicas
insert into MyHealth.MedicalSpecialty(name, description)
values ('Alergologia','Especialidad médica de Alergologia');
insert into MyHealth.MedicalSpecialty(name, description)
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..3f87794
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,11 @@
+Hoy he subido multiples cambios para que las entidades de Paciente, Medico de Familia y Medico Especialista tengan un código, diferente del identificador de base de datos que se pueda utlizar para realizar el login correctamente.
+
+Ahora mismo, con la última version:
+* Hay 2 secuencias en base de datos (las he añadido al script de base de datos) que generan identificadores númericos únicos.
+* Una secuencia genera los identificadores para Pacientes, y otra secuencia para profesionales (tal como requieren los requisitos).
+* Los medicos de familia y los medicos especialistas comparten el identificador único (secuencia) y por lo tanto sus identificadores no se solapan.
+* Los identificadores númericos se completan con 4 caracteres que se contatenas al inicio, y que hacen único al identificador (PAT#XXXX para Pacientes y PRO#0000 para profesionales)
+* El login tiene en cuenta estos nuevos códigos, y por lo tanto el login se puede realizar correctametne.
+
+* También he añadido varios métodos al EJB común para recuperar entidades, tanto por Id como por codigo.
+* También he añadido junciones para convertir entidades JPA e entidades POJO de forma más o menos automática, y con minimo soporte para mapeo de propiedades de objetos relacionados.
\ No newline at end of file