From e5900a8d0fec10ae1a83bfb3d69a4f2c546aeef6 Mon Sep 17 00:00:00 2001 From: Roberto Orden Erena Date: Sun, 15 Dec 2019 18:17:32 +0100 Subject: [PATCH] =?UTF-8?q?-=20Creado=20Question=20transferObject=20--=20S?= =?UTF-8?q?e=20le=20ha=20a=C3=B1adido=20la=20relaci=C3=B3n=20con=20FamilyD?= =?UTF-8?q?octor=20inexistente=20en=20el=20dise=C3=B1o=20inicial=20--=20Ti?= =?UTF-8?q?ene=20integrado=20en=20formato=20String=20la=20response=20en=20?= =?UTF-8?q?lugar=20de=20un=20objeto=20(tabla=20en=20BBDD)=20-=20Modificado?= =?UTF-8?q?=20MedicalTest=20transferObject=20--=20Se=20le=20ha=20creado=20?= =?UTF-8?q?el=20tipo=20de=20dato=20de=20prueba=20m=C3=A9dica=20(en=20lugar?= =?UTF-8?q?=20de=20un=20entero=20sin=20m=C3=A1s=20sentido=20en=20BL)=20-?= =?UTF-8?q?=20Actualizado=20el=20dise=C3=B1o=20de=20BBDD=20--=20Con=20las?= =?UTF-8?q?=20restricciones/caracter=C3=ADsticas=20anteriormente=20comenta?= =?UTF-8?q?das=20--=20Todas=20las=20tablas=20tienen=20una=20PK=20como=20IN?= =?UTF-8?q?T=20AI,=20excepto=20administrator=20-=20Se=20actualiza=20la=20i?= =?UTF-8?q?nterfaz=20para=20Remoto=20y=20el=20EJB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.sources/MyHealth/src/TO/MedicalTestTO.java | 34 ++--- 1.sources/MyHealth/src/TO/QuestionTO.java | 102 +++++++++++++++ .../medicalTest/MedicalTestFacadeBean.java | 119 +++++++++++++----- .../medicalTest/MedicalTestFacadeRemote.java | 85 ++++++++++++- 2.database/model.mwb | Bin 13278 -> 12019 bytes 5 files changed, 280 insertions(+), 60 deletions(-) create mode 100644 1.sources/MyHealth/src/TO/QuestionTO.java diff --git a/1.sources/MyHealth/src/TO/MedicalTestTO.java b/1.sources/MyHealth/src/TO/MedicalTestTO.java index b7b7305..1836589 100644 --- a/1.sources/MyHealth/src/TO/MedicalTestTO.java +++ b/1.sources/MyHealth/src/TO/MedicalTestTO.java @@ -14,17 +14,22 @@ import javax.xml.bind.annotation.XmlRootElement; public class MedicalTestTO implements Serializable { private static final long serialVersionUID = 1L; - + private int id; private Date date; private long time; private String observations; private String highresimage; - private int type; + private MedicalTestType type; private PatientTO patient; private SpecialistDoctorTO specialistDoctor; + + public static enum MedicalTestType { + BLOD_TEST, MAGNETIC_RESONANCE, TAC + } - public MedicalTestTO(int id, Date date, int time, String observations, String highresimage, int type, PatientTO patiend, SpecialistDoctorTO specialistDoctor) { + public MedicalTestTO(int id, Date date, int time, String observations, String highresimage, MedicalTestType type, + PatientTO patiend, SpecialistDoctorTO specialistDoctor) { this.setId(id); this.setDate(date); this.setTime(time); @@ -33,89 +38,70 @@ public class MedicalTestTO implements Serializable { this.setType(type); this.setPatient(patiend); this.setSpecialistDoctor(specialistDoctor); - } - public int getId() { return id; } - public void setId(int id) { this.id = id; } - public Date getDate() { return date; } - public void setDate(Date date) { this.date = date; } - public long getTime() { return time; } - public void setTime(long time) { this.time = time; } - public String getObservations() { return observations; } - public void setObservations(String observations) { this.observations = observations; } - public String getHighresimage() { return highresimage; } - public void setHighresimage(String highresimage) { this.highresimage = highresimage; } - - public int getType() { + public MedicalTestType getType() { return type; } - - public void setType(int type) { + public void setType(MedicalTestType type) { this.type = type; } - public PatientTO getPatient() { return patient; } - public void setPatient(PatientTO patient) { this.patient = patient; } - public SpecialistDoctorTO getSpecialistDoctor() { return specialistDoctor; } - public void setSpecialistDoctor(SpecialistDoctorTO specialistDoctor) { this.specialistDoctor = specialistDoctor; } - - } diff --git a/1.sources/MyHealth/src/TO/QuestionTO.java b/1.sources/MyHealth/src/TO/QuestionTO.java new file mode 100644 index 0000000..5fc7522 --- /dev/null +++ b/1.sources/MyHealth/src/TO/QuestionTO.java @@ -0,0 +1,102 @@ +package TO; + +import java.io.Serializable; + +import javax.xml.bind.annotation.XmlRootElement; + +/** + * + * @author Roberto Orden Erena + * + */ +@XmlRootElement(name = "Question") +public class QuestionTO implements Serializable { + + public static enum QuestionStatus { + ANSWERED, PENDING + } + + private static final long serialVersionUID = 1L; + + private int id; + private String title; + private String message; + private QuestionStatus status; + private String response; + private PatientTO patient; + private FamilyDoctorTO fdoctor; + + + public QuestionTO() { + super(); + } + + public QuestionTO(int id, String title, String message, QuestionStatus status, PatientTO patient, + FamilyDoctorTO fdoctor, String response) { + super(); + this.id = id; + this.title = title; + this.message = message; + this.status = status; + this.patient = patient; + this.fdoctor = fdoctor; + this.response = response; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public QuestionStatus getStatus() { + return status; + } + + public void setStatus(QuestionStatus status) { + this.status = status; + } + + public PatientTO getPatient() { + return patient; + } + + public void setPatient(PatientTO patient) { + this.patient = patient; + } + + public FamilyDoctorTO getDoctor() { + return fdoctor; + } + + public void setDoctor(FamilyDoctorTO fdoctor) { + this.fdoctor = fdoctor; + } + + public String getResponse() { + return response; + } + + public void setResponse(String response) { + this.response = response; + } + +} diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java index c0acf7d..1679a2e 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeBean.java @@ -2,19 +2,24 @@ package ejb.medicalTest; import java.util.Date; +import javax.ejb.EJB; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import TO.MedicalSpecialtyTO; - +import TO.MedicalTestTO.MedicalTestType; +import ejb.common.CommonFacadeLocal; /** * EJB Session Bean Class para la Practica 2, Ejercicio 1 (ISCSD) Implementa los * métodos de la capa de negocio que implementan la logica de negocio y la * interacción con la capa de persistencia. * - * @author mark + * Tanto los pacientes como los médicos deben acceder a la vista de pruebas + * médicas. + * + * @author rorden * */ @Stateless @@ -24,67 +29,115 @@ public class MedicalTestFacadeBean implements MedicalTestFacadeRemote { @PersistenceContext(unitName = "MyHealth") private EntityManager entman; - public void ejbMethod(String parameter) { - - } + @EJB + CommonFacadeLocal commonServices; + // ********************************************************************* QUESTION_RESPONSE + + /** + * Realizar una pregunta al médico por un paciente + * + * @param professionalNumber + * @param title + * @param message + */ @Override public void askQuestion(int professionalNumber, String title, String message) { - // TODO Auto-generated method stub - } + /** + * El médico responde a una pregunta + * + * @param question + * @param response + */ @Override public void answerQuestion(String question, String response) { - // TODO Auto-generated method stub - } + /** + * Recuperar las preguntas sin respuesta para un médico + * + * @param professionalNumber + */ @Override public void listAllPendingQuestions(int professionalNumber) { - // TODO Auto-generated method stub - - } - - @Override - public void addMedicalTest(int idMedicalTest, Date date, long time, int testType, String observations) { - // TODO Auto-generated method stub - - } - - @Override - public void getMedicalTest(int idMedicalTest) { - // TODO Auto-generated method stub - } + /** + * Recuperar una pregunta por su String + * + * @param question + */ @Override public void getQuestion(String question) { - // TODO Auto-generated method stub - } + // ********************************************************************* MEDICAL_TEST + + /** + * Añadir pruebas médicas a una cita + * + * Sólo médicos especialistas pueden gestionar pruebas médicas en el sistema. + * + * @param idMedicalTest + * @param date + * @param time + * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias + * magnéticas y TAC + * @param observations + */ + @Override + public void addMedicalTest(int idMedicalTest, Date date, long time, MedicalTestType testType, String observations) { + } + + /** + * Recuperar una prueba médica por ID + * + * Pueden ser consultas por médicos de familia + * + * @param idMedicalTest + */ + @Override + public void getMedicalTest(int idMedicalTest) { + } + + /** + * Añadir una imagen a una prueba médica + * + * @param idMedicalTest + * @param image + */ @Override public void addImage(int idMedicalTest, String image) { - // TODO Auto-generated method stub - } + /** + * Actualizar/Pisar una imagen a una prueba médica + * + * @param idMedicalTest + * @param image + */ @Override public void updateImage(int idMedicalTest, String image) { - // TODO Auto-generated method stub - } + /** + * Eliminar una imagen a una prueba médica + * + * @param idMedicalTest + */ @Override public void removeImage(int idMedicalTest) { - // TODO Auto-generated method stub - } + /** + * Listar médicos con una especialidad concreta + * + * @param speciality + */ @Override public void findSpecialistDoctorByMedicalSpeciality(MedicalSpecialtyTO speciality) { - // TODO Auto-generated method stub - } + } \ No newline at end of file diff --git a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java index 78b6173..e6828d5 100644 --- a/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java +++ b/1.sources/MyHealth/src/ejb/medicalTest/MedicalTestFacadeRemote.java @@ -5,24 +5,103 @@ import java.util.Date; import javax.ejb.Remote; import TO.MedicalSpecialtyTO; +import TO.MedicalTestTO.MedicalTestType; /** * Interfaz remota del EJB Definimos los métodos que estarán disponibles para * los clientes del EJB * - * @author mark + * @author rorden * */ @Remote public interface MedicalTestFacadeRemote { + + // ********************************************************************* + // QUESTION RESPONSE + + /** + * Realizar una pregunta al médico por un paciente + * + * @param professionalNumber + * @param title + * @param message + */ public void askQuestion(int professionalNumber, String title, String message); + + /** + * El médico responde a una pregunta + * + * @param question + * @param response + */ public void answerQuestion(String question, String response); + + /** + * Recuperar las preguntas sin respuesta para un médico + * + * De utilidad para paciente y médico de familia. No para médico especialista. + * + * @param professionalNumber + */ public void listAllPendingQuestions(int professionalNumber); - public void addMedicalTest(int idMedicalTest, Date date, long time, int testType, String observations); - public void getMedicalTest(int idMedicalTest); + + /** + * Recuperar una pregunta por su String + * + * @param question + */ public void getQuestion(String question); + + // ********************************************************************* MEDICAL + // TEST + + /** + * Añadir una prueba médica a un paciente + * + * @param idMedicalTest + * @param date + * @param time + * @param testType Pudiera llegar a ser: Análisis de sangre, resonancias + * magnéticas y TAC + * @param observations + */ + public void addMedicalTest(int id, Date date, long time, MedicalTestType testType, String observations); + + /** + * Recuperar una prueba médica por ID + * + * @param idMedicalTest + */ + public void getMedicalTest(int idPatient); + + /** + * Añadir una imagen a una prueba médica + * + * @param idMedicalTest + * @param image + */ public void addImage(int idMedicalTest, String image); + + /** + * Actualizar/Pisar una imagen a una prueba médica + * + * @param idMedicalTest + * @param image + */ public void updateImage(int idMedicalTest, String image); + + /** + * Eliminar una imagen a una prueba médica + * + * @param idMedicalTest + */ public void removeImage(int idMedicalTest); + + /** + * Listar médicos con una especialidad concreta + * + * @param speciality + */ public void findSpecialistDoctorByMedicalSpeciality(MedicalSpecialtyTO speciality); } \ No newline at end of file diff --git a/2.database/model.mwb b/2.database/model.mwb index bd2ce80086e6508579d2cc4748f7b71b379fd54c..4b362bd5cb9ac1879522d18763a73f444684c68d 100644 GIT binary patch literal 12019 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 RCqa;nhq;M?wX-?e{{g%AX@vj) literal 13278 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 t+ZY*JlIzrZ2SOUIwc{~wM-tl9to