From 1886d1bdf19d5153d6d8ec9b4783b88c8f0d7dc8 Mon Sep 17 00:00:00 2001 From: lucas <lucas@eduroam-047189.grenet.fr> Date: Mon, 7 Apr 2025 21:54:03 +0200 Subject: [PATCH] ajout des commentaires dans les classes pour la java doc --- nbproject/project.properties | 278 +++++++++--------- src/fc/Connexion.java | 25 +- src/fc/MessageDErreur.java | 29 ++ src/fc/Sql/ConnexionDataBase.java | 55 +++- src/fc/model/Administration.java | 15 +- src/fc/model/Dmr.java | 64 +++- src/fc/model/DmrPatient.java | 33 ++- src/fc/model/Examen.java | 104 ++++--- src/fc/model/Genre.java | 5 +- src/fc/model/Manipulateur.java | 18 +- src/fc/model/Pacs.java | 22 +- src/fc/model/Patient.java | 107 +++++-- src/fc/model/Radiologue.java | 16 +- src/fc/model/Utilisateur.java | 43 ++- .../AdministrationPageController.java | 99 +++++-- .../Controller/ConnexionPageController.java | 69 +++-- src/ui/Controller/ManipController.java | 77 ++++- src/ui/Controller/PageExamenController.java | 97 ++++-- src/ui/Controller/Radio_ManipController.java | 72 ++++- .../Controller/RadiologuePageController.java | 94 +++++- 20 files changed, 961 insertions(+), 361 deletions(-) diff --git a/nbproject/project.properties b/nbproject/project.properties index 20b5033..71d9fbf 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -1,139 +1,139 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.processors.list= -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -application.title=SIR -application.vendor=valen -auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -build.generated.sources.dir=${build.dir}/generated-sources -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -# Uncomment to specify the preferred debugger connection transport: -#debug.transport=dt_socket -debug.classpath=\ - ${run.classpath} -debug.modulepath=\ - ${run.modulepath} -debug.test.classpath=\ - ${run.test.classpath} -debug.test.modulepath=\ - ${run.test.modulepath} -# Files in build.classes.dir which should be excluded from distribution jar -dist.archive.excludes= -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/SIR.jar -dist.javadoc.dir=${dist.dir}/javadoc -dist.jlink.dir=${dist.dir}/jlink -dist.jlink.output=${dist.jlink.dir}/SIR -endorsed.classpath= -excludes= -file.reference.javafx-swt.jar=javafx-sdk-21.0.6/lib/javafx-swt.jar -file.reference.javafx.base.jar=javafx-sdk-21.0.6/lib/javafx.base.jar -file.reference.javafx.controls.jar=javafx-sdk-21.0.6/lib/javafx.controls.jar -file.reference.javafx.fxml.jar=javafx-sdk-21.0.6/lib/javafx.fxml.jar -file.reference.javafx.graphics.jar=javafx-sdk-21.0.6/lib/javafx.graphics.jar -file.reference.javafx.media.jar=javafx-sdk-21.0.6/lib/javafx.media.jar -file.reference.javafx.swing.jar=javafx-sdk-21.0.6/lib/javafx.swing.jar -file.reference.javafx.web.jar=javafx-sdk-21.0.6/lib/javafx.web.jar -file.reference.ojdbc17.jar=libs/ojdbc17.jar -includes=** -jar.archive.disabled=${jnlp.enabled} -jar.compress=false -jar.index=${jnlp.enabled} -javac.classpath=\ - ${file.reference.ojdbc17.jar} -# Space-separated list of extra javac options -javac.compilerargs=\ --enable-preview -javac.deprecation=false -javac.external.vm=true -javac.modulepath=\ - ${file.reference.javafx-swt.jar}:\ - ${file.reference.javafx.base.jar}:\ - ${file.reference.javafx.controls.jar}:\ - ${file.reference.javafx.fxml.jar}:\ - ${file.reference.javafx.graphics.jar}:\ - ${file.reference.javafx.media.jar}:\ - ${file.reference.javafx.swing.jar}:\ - ${file.reference.javafx.web.jar} -javac.processormodulepath= -javac.processorpath=\ - ${javac.classpath} - -javac.source=23 -javac.target=23 - -javac.test.classpath=\ - ${javac.classpath} -javac.test.modulepath=\ - ${javac.modulepath}:\ - ${build.classes.dir} -javac.test.processorpath=\ - ${javac.test.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding=${source.encoding} -javadoc.html5=false -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -# The jlink additional root modules to resolve -jlink.additionalmodules= -# The jlink additional command line parameters -jlink.additionalparam= -jlink.launcher=true -jlink.launcher.name=SIR -jnlp.codebase.type=no.codebase -jnlp.descriptor=application -jnlp.enabled=false -jnlp.mixed.code=default -jnlp.offline-allowed=false -jnlp.signed=false -jnlp.signing= -jnlp.signing.alias= -jnlp.signing.keystore= -main.class=ui.loader.ConnexionPage -# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found. -manifest.custom.application.library.allowable.codebase= -# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts. -manifest.custom.caller.allowable.codebase= -# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed -manifest.custom.codebase= -# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions) -manifest.custom.permissions= -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -mkdist.disabled=false -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -# Space-separated list of JVM arguments used when running the project. -# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. -# To set system properties for unit tests define test-sys-prop.name=value: -run.jvmargs=\ --enable-preview -run.modulepath=\ - ${javac.modulepath} -run.test.classpath=\ - ${javac.test.classpath} -run.test.modulepath=\ - ${javac.test.modulepath} -source.encoding=UTF-8 -src.dir=src -test.src.dir=test -javac.classpath=\ - ${file.reference.ojdbc17.jar} - +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=SIR +application.vendor=valen +auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/SIR.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/SIR +endorsed.classpath= +excludes= +file.reference.javafx-swt.jar=javafx-sdk-21.0.6/lib/javafx-swt.jar +file.reference.javafx.base.jar=javafx-sdk-21.0.6/lib/javafx.base.jar +file.reference.javafx.controls.jar=javafx-sdk-21.0.6/lib/javafx.controls.jar +file.reference.javafx.fxml.jar=javafx-sdk-21.0.6/lib/javafx.fxml.jar +file.reference.javafx.graphics.jar=javafx-sdk-21.0.6/lib/javafx.graphics.jar +file.reference.javafx.media.jar=javafx-sdk-21.0.6/lib/javafx.media.jar +file.reference.javafx.swing.jar=javafx-sdk-21.0.6/lib/javafx.swing.jar +file.reference.javafx.web.jar=javafx-sdk-21.0.6/lib/javafx.web.jar +file.reference.ojdbc17.jar=libs/ojdbc17.jar +includes=** +jar.archive.disabled=${jnlp.enabled} +jar.compress=false +jar.index=${jnlp.enabled} +javac.classpath=\ + ${file.reference.ojdbc17.jar} +# Space-separated list of extra javac options +javac.compilerargs=\ --enable-preview +javac.deprecation=false +javac.external.vm=true +javac.modulepath=\ + ${file.reference.javafx-swt.jar}:\ + ${file.reference.javafx.base.jar}:\ + ${file.reference.javafx.controls.jar}:\ + ${file.reference.javafx.fxml.jar}:\ + ${file.reference.javafx.graphics.jar}:\ + ${file.reference.javafx.media.jar}:\ + ${file.reference.javafx.swing.jar}:\ + ${file.reference.javafx.web.jar} +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} + +javac.source=22 +javac.target=22 + +javac.test.classpath=\ + ${javac.classpath} +javac.test.modulepath=\ + ${javac.modulepath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=SIR +jnlp.codebase.type=no.codebase +jnlp.descriptor=application +jnlp.enabled=false +jnlp.mixed.code=default +jnlp.offline-allowed=false +jnlp.signed=false +jnlp.signing= +jnlp.signing.alias= +jnlp.signing.keystore= +main.class=ui.loader.ConnexionPage +# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found. +manifest.custom.application.library.allowable.codebase= +# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts. +manifest.custom.caller.allowable.codebase= +# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed +manifest.custom.codebase= +# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions) +manifest.custom.permissions= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs=\ --enable-preview +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test +javac.classpath=\ + ${file.reference.ojdbc17.jar} + diff --git a/src/fc/Connexion.java b/src/fc/Connexion.java index 2545f16..75a98bb 100644 --- a/src/fc/Connexion.java +++ b/src/fc/Connexion.java @@ -20,18 +20,37 @@ import java.util.Scanner; * * @author valen */ + +/** + * Gère l'authentification des utilisateurs. Vérifie les identifiants et + * retourne l'utilisateur correspondant. + */ + public class Connexion { private String id; private String password; private static Utilisateur utilisateurConnecte = null; + /** + * Crée une nouvelle instance de connexion. + * + * @param id Identifiant utilisateur + * @param password Mot de passe + */ + public Connexion(String id, String password) { this.id = id; this.password = password; } + /** + * Authentifie l'utilisateur. + * + * @return Utilisateur correspondant ou null si échec + */ + public Utilisateur acces() { String requete = String.format( "SELECT metier FROM utilisateur WHERE numero_id='%s' AND Mot_de_passe='%s'", @@ -60,9 +79,9 @@ public class Connexion { return utilisateurConnecte; } - /* public Utilisateur connexion(){ - - }*/ + /** + * Déconnecte l'utilisateur courant. + */ public static void deconnecter() { utilisateurConnecte = null; } diff --git a/src/fc/MessageDErreur.java b/src/fc/MessageDErreur.java index 4b42801..28bb03d 100644 --- a/src/fc/MessageDErreur.java +++ b/src/fc/MessageDErreur.java @@ -12,8 +12,19 @@ import java.time.format.DateTimeParseException; * * @author lucas */ +/** + * Fournit des méthodes de validation et de normalisation de données. Gère les + * messages d'erreur pour les entrées utilisateur. + */ public class MessageDErreur { + /** + * Valide une paire identifiant/mot de passe. + * + * @param identifiant Numéro d'identification + * @param mdp Mot de passe + * @return Message d'erreur ou chaîne vide si valide + */ public static String validerIdMdp(String identifiant, String mdp) { // existance de l'identifiant String requeteId = "SELECT COUNT(*) FROM utilisateur WHERE numero_id=" + identifiant; @@ -35,6 +46,12 @@ public class MessageDErreur { return ""; } + /** + * Valide un terme de recherche. + * + * @param terme Texte à vérifier + * @return Message d'erreur ou chaîne vide si valide + */ public static String validerTermeRecherche(String terme) { if (terme == null || terme.isBlank()) { return ""; @@ -48,6 +65,12 @@ public class MessageDErreur { return ""; // Pas d'erreur } + /** + * Normalise la casse d'un mot (première lettre en majuscule). + * + * @param nom Chaîne à normaliser + * @return Chaîne normalisée ou vide si entrée invalide + */ public static String normaliserMot(String nom) { if (nom == null || nom.isBlank()) { return ""; @@ -75,6 +98,12 @@ public class MessageDErreur { return resultat.toString(); } + /** + * Valide une date au format YYYY-MM-DD. + * + * @param date Date à vérifier + * @return Message d'erreur ou chaîne vide si valide + */ public static String validerDate(String date) { if (date == null || date.isBlank()) { return "La date ne peut pas être vide."; diff --git a/src/fc/Sql/ConnexionDataBase.java b/src/fc/Sql/ConnexionDataBase.java index ec54cac..bdf8cdb 100644 --- a/src/fc/Sql/ConnexionDataBase.java +++ b/src/fc/Sql/ConnexionDataBase.java @@ -10,11 +10,14 @@ import java.sql.SQLException; import java.util.Scanner; import java.sql.*; - /** * * @author valen */ +/** + * Gère la connexion à une base de données Oracle. Fournit des méthodes pour + * exécuter des requêtes SQL. + */ public class ConnexionDataBase { //String url = "jdbc:oracle:thin:@oracle.im2ag.fr:1521/XE"; // Changez l'URL selon votre configuration @@ -25,7 +28,14 @@ public class ConnexionDataBase { private static Connection conn; private static Statement stmt; private static ResultSet rset; -; + + ; + + + /** + * Établit une connexion à la base de données. + * @return Connection objet ou null en cas d'erreur + */ public static Connection getConnection() { Connection conn = null; @@ -38,6 +48,12 @@ public class ConnexionDataBase { return conn; } + /** + * Exécute une requête de modification (INSERT, UPDATE, DELETE). + * + * @param requete Requête SQL à exécuter + * @return true si la requête a affecté des lignes + */ public static boolean sqlUpdate(String requete) { try (Connection conn = getConnection(); Statement stmt = conn.createStatement()) { // Exécution de la requête de modification @@ -49,6 +65,12 @@ public class ConnexionDataBase { } } + /** + * Exécute une requête SELECT et retourne le résultat sous forme de String. + * + * @param requete Requête SQL à exécuter + * @return Résultat concaténé ou null en cas d'erreur + */ public static String sqlRequete(String requete) { Scanner sc = new Scanner(System.in); // Cette variable est définie mais jamais utilisée. @@ -73,19 +95,24 @@ public class ConnexionDataBase { System.out.println("SQLException: " + ex.getMessage()); } + // Ajoutez un return ou fermez simplement la méthode si rien n'est retourné + return null; // Retourne null si la méthode est censée renvoyer une chaîne de caractères. + } - // Ajoutez un return ou fermez simplement la méthode si rien n'est retourné - return null; // Retourne null si la méthode est censée renvoyer une chaîne de caractères. -} -public static ResultSet sqlRequete2(String requete) { - try { - conn = ConnexionDataBase.getConnection(); - stmt = conn.createStatement(); - return stmt.executeQuery(requete); - } catch (SQLException ex) { - System.out.println("SQLException: " + ex.getMessage()); - return null; + /** + * Exécute une requête SELECT et retourne le ResultSet. + * @param requete Requête SQL à exécuter + * @return ResultSet ou null en cas d'erreur + */ + public static ResultSet sqlRequete2(String requete) { + try { + conn = ConnexionDataBase.getConnection(); + stmt = conn.createStatement(); + return stmt.executeQuery(requete); + } catch (SQLException ex) { + System.out.println("SQLException: " + ex.getMessage()); + return null; + } } -} } diff --git a/src/fc/model/Administration.java b/src/fc/model/Administration.java index 76f9ed9..41669d3 100644 --- a/src/fc/model/Administration.java +++ b/src/fc/model/Administration.java @@ -4,20 +4,25 @@ */ package fc.model; - /** * * * @author valen */ +/** + * Représente un utilisateur administratif. Niveau d'accès : 2 + */ public class Administration extends Utilisateur { - + /** + * Crée un utilisateur administratif. + * + * @param id Identifiant unique + * @param Mot_de_passe Mot de passe + */ public Administration(String id, String Mot_de_passe) { super(id, Mot_de_passe, 2); - + } - } - diff --git a/src/fc/model/Dmr.java b/src/fc/model/Dmr.java index a8aade2..8da7776 100644 --- a/src/fc/model/Dmr.java +++ b/src/fc/model/Dmr.java @@ -17,6 +17,10 @@ import java.util.Map; * * @author valen */ +/** + * Représente un Dossier Médical Radiologique (DMR). Gère les opérations liées + * aux dossiers médicaux radiologiques. + */ public class Dmr { private String id_dmr; @@ -25,6 +29,9 @@ public class Dmr { private String motif; private int activer; + /** + * Constructeur par défaut. Initialise un DMR avec des valeurs nulles. + */ public Dmr() { this.id_dmr = null; @@ -34,6 +41,15 @@ public class Dmr { this.activer = 0; } + /** + * Constructeur avec paramètres. + * + * @param id_dmr Identifiant du DMR + * @param IPP Identifiant Patient Principal + * @param date_ouverture Date d'ouverture du dossier + * @param motif Motif d'ouverture + * @param activer Statut d'activation (0/1) + */ public Dmr(String id_dmr, String IPP, String date_ouverture, String motif, int activer) { this.id_dmr = id_dmr; this.IPP = IPP; @@ -44,12 +60,11 @@ public class Dmr { } /** - * @return the id_dmr + * Récupère les DMR associés à un IPP. + * + * @param IPP Identifiant Patient Principal + * @return Liste des DMR trouvés */ - public String getId_dmr() { - return id_dmr; - } - public List<Dmr> recupererDMR(String IPP) { List<Dmr> dmrs = new ArrayList<>(); @@ -74,7 +89,10 @@ public class Dmr { } /** - * @return the prenom + * Vérifie l'existence d'un DMR. + * + * @param id_DMR Identifiant du DMR à vérifier + * @return true si le DMR existe */ public boolean verifierDMRExiste(String id_DMR) { @@ -91,6 +109,12 @@ public class Dmr { return resultat != null && !resultat.isEmpty(); } + /** + * Organise les examens par présence de compte-rendu. + * + * @param idDMR Identifiant du DMR + * @return Map des examens avec/sans compte-rendu + */ public Map<String, List<Examen>> AfficherCompteRendu(String idDMR) { Examen exam = new Examen(); @@ -124,6 +148,14 @@ public class Dmr { } + /** + * Ajoute un compte-rendu à un examen. + * + * @param i Index de l'examen dans la liste + * @param exams Liste des examens + * @param compteRendu Texte du compte-rendu + * @return true si l'ajout a réussi + */ public boolean ajouterCompteRendu(int i, List<Examen> exams, String compteRendu) { if (i < exams.size()) { @@ -139,33 +171,45 @@ public class Dmr { } /** - * @return the IPP + * @return Identifiant du DMR + */ + public String getId_dmr() { + return id_dmr; + } + + /** + * @return Identifiant Patient Principal */ public String getIPP() { return IPP; } /** - * @return the date_ouverture + * @return Date d'ouverture du dossier */ public String getDate_ouverture() { return date_ouverture; } /** - * @return the motif + * @return Motif d'ouverture */ public String getMotif() { return motif; } /** - * @return the activer + * @return Statut d'activation */ public int getActiver() { return activer; } + /** + * Récupère les DMR actifs. + * + * @return Liste des DMR actifs + */ public List<Dmr> dmrActiver() { List<Dmr> dmrs = new ArrayList<>(); StringBuilder requeteRecupDMR = new StringBuilder("SELECT * FROM DMR WHERE ACTIVER = 1 "); diff --git a/src/fc/model/DmrPatient.java b/src/fc/model/DmrPatient.java index 4962ebc..3b206a7 100644 --- a/src/fc/model/DmrPatient.java +++ b/src/fc/model/DmrPatient.java @@ -4,42 +4,67 @@ */ package fc.model; - - /** * * @author valen */ +/** + * Représente un DMR associé à un patient. Combine les informations d'un dossier + * médical et d'un patient. + */ public class DmrPatient { + private String dateOuverture; private String motif; private String nom; private String prenom; private String Id_dmr; - public DmrPatient(Dmr d ,Patient p) { + /** + * Crée une association DMR-Patient. + * + * @param d Dossier médical radiologique (DMR) + * @param p Patient associé + */ + public DmrPatient(Dmr d, Patient p) { this.dateOuverture = d.getDate_ouverture(); this.motif = d.getMotif(); this.nom = p.getNom(); this.prenom = p.getPrenom(); - this.Id_dmr=d.getId_dmr(); + this.Id_dmr = d.getId_dmr(); } + /** + * @return Date d'ouverture du dossier + */ public String getDateOuverture() { return dateOuverture; } + /** + * @return Motif d'ouverture du dossier + */ public String getMotif() { return motif; } + /** + * @return Nom du patient + */ public String getNom() { return nom; } + /** + * @return Prénom du patient + */ public String getPrenom() { return prenom; } + + /** + * @return Identifiant du DMR + */ public String getId_dmr() { return Id_dmr; } diff --git a/src/fc/model/Examen.java b/src/fc/model/Examen.java index 2750cc3..5eb13e2 100644 --- a/src/fc/model/Examen.java +++ b/src/fc/model/Examen.java @@ -10,11 +10,14 @@ import java.util.List; import java.sql.ResultSet; import java.sql.SQLException; - /** * * @author valen */ +/** + * Représente un examen radiologique. Gère la création, la récupération et la + * mise à jour des examens. + */ public class Examen { private String id_dmr; @@ -23,6 +26,9 @@ public class Examen { private String compte_rendu; private String acte; + /** + * Constructeur par défaut. Initialise un examen avec des valeurs nulles. + */ public Examen() { this.id_dmr = null; this.date = date; @@ -30,6 +36,14 @@ public class Examen { this.acte = null; } + /** + * Constructeur avec paramètres. + * + * @param id_dmr Identifiant du DMR associé + * @param date Date de l'examen + * @param image_path Chemin de l'image radiologique + * @param acte Type d'acte médical + */ public Examen(String id_dmr, String date, String image_path, String acte) { this.id_dmr = id_dmr; this.date = date; @@ -39,41 +53,14 @@ public class Examen { } /** - * @return the id_dmr - */ - public String getId_dmr() { - return id_dmr; - } - - /** - * @return the date + * Crée un nouvel examen dans la base de données. + * + * @param id_dmr Identifiant du DMR + * @param Date Date de l'examen + * @param Path Chemin de l'image + * @param acte Type d'acte + * @return true si la création a réussi */ - public String getDate() { - return date; - } - - /** - * @return the image_path - */ - public String getImage_path() { - return image_path; - } - - /** - * @return the compte_rendu - */ - public String getCompte_rendu() { - return compte_rendu; - } - - /** - * @param compte_rendu the compte_rendu to set - */ - public void setCompte_rendu(String compte_rendu) { - this.compte_rendu = compte_rendu; - ConnexionDataBase.sqlUpdate("UPDATE EXAMEN SET COMPTE_RENDU = '" + compte_rendu + "' WHERE ID_DMR = '" + this.getId_dmr() + "' AND DATE_EXAMEN = TO_TIMESTAMP('" + this.getDate() + "', 'YYYY-MM-DD HH24:MI:SS.FF')"); - } - public boolean creerExamen(String id_dmr, String Date, String Path, String acte) { // Validation des champs obligatoires if (id_dmr == null || id_dmr.isBlank() @@ -111,6 +98,13 @@ public class Examen { } } + /** + * Récupère les examens selon des critères. + * + * @param idDMR Identifiant du DMR (optionnel) + * @param dateExamen Date de l'examen (optionnel) + * @return Liste des examens correspondants + */ public List<Examen> recupererExamen(String idDMR, String dateExamen) { List<Examen> examens = new ArrayList<>(); @@ -149,7 +143,45 @@ public class Examen { } /** - * @return the acte + * @return Identifiant du DMR associé + */ + public String getId_dmr() { + return id_dmr; + } + + /** + * @return Date de l'examen + */ + public String getDate() { + return date; + } + + /** + * @return Chemin de l'image radiologique + */ + public String getImage_path() { + return image_path; + } + + /** + * @return Compte-rendu de l'examen + */ + public String getCompte_rendu() { + return compte_rendu; + } + + /** + * Met à jour le compte-rendu dans la base de données. + * + * @param compte_rendu Nouveau texte du compte-rendu + */ + public void setCompte_rendu(String compte_rendu) { + this.compte_rendu = compte_rendu; + ConnexionDataBase.sqlUpdate("UPDATE EXAMEN SET COMPTE_RENDU = '" + compte_rendu + "' WHERE ID_DMR = '" + this.getId_dmr() + "' AND DATE_EXAMEN = TO_TIMESTAMP('" + this.getDate() + "', 'YYYY-MM-DD HH24:MI:SS.FF')"); + } + + /** + * @return Type d'acte médical */ public String getActe() { return acte; diff --git a/src/fc/model/Genre.java b/src/fc/model/Genre.java index 1ccccdf..c79a0ea 100644 --- a/src/fc/model/Genre.java +++ b/src/fc/model/Genre.java @@ -8,6 +8,9 @@ package fc.model; * * @author valen */ +/** + * Représente le genre d'un patient. M pour Masculin, F pour Féminin. + */ public enum Genre { - M , F + M, F } diff --git a/src/fc/model/Manipulateur.java b/src/fc/model/Manipulateur.java index a1aed68..176a5ee 100644 --- a/src/fc/model/Manipulateur.java +++ b/src/fc/model/Manipulateur.java @@ -8,13 +8,19 @@ package fc.model; * * @author valen */ -public class Manipulateur extends Utilisateur{ - +/** + * Représente un manipulateur radio. Niveau d'accès : 3 + */ +public class Manipulateur extends Utilisateur { + + /** + * Crée un manipulateur radio. + * + * @param id Identifiant unique + * @param Mot_de_passe Mot de passe + */ public Manipulateur(String id, String Mot_de_passe) { super(id, Mot_de_passe, 3); } - - - - + } diff --git a/src/fc/model/Pacs.java b/src/fc/model/Pacs.java index 6f6bc1a..765a5f2 100644 --- a/src/fc/model/Pacs.java +++ b/src/fc/model/Pacs.java @@ -18,16 +18,24 @@ import javafx.collections.ObservableList; * * @author valen */ +/** + * Gère les images du système PACS (Picture Archiving and Communication System). + */ public class Pacs { - - + /** + * Constructeur par défaut. + */ public Pacs() { } - - + /** + * Récupère le chemin d'une image par son nom. + * + * @param nom Nom de l'image + * @return Chemin de l'image ou null si non trouvée + */ public String pathWithNom(String nom) { String path = sqlRequete("Select IMAGE_PATH from pacs where NOM_IMAGE ='" + nom + "'"); @@ -35,6 +43,11 @@ public class Pacs { } + /** + * Liste tous les noms d'images disponibles. + * + * @return Liste observable des noms d'images + */ public ObservableList<String> ListImage() { ResultSet res = sqlRequete2("Select NOM_IMAGE from pacs"); @@ -42,7 +55,6 @@ public class Pacs { try { while (res.next()) { - items.add(res.getString("NOM_IMAGE")); } return items; diff --git a/src/fc/model/Patient.java b/src/fc/model/Patient.java index 4054ccf..9881e32 100644 --- a/src/fc/model/Patient.java +++ b/src/fc/model/Patient.java @@ -14,14 +14,14 @@ import java.util.logging.Level; import java.util.logging.Logger; import javafx.util.Pair; -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ /** * * @author valen */ +/** + * Représente un patient dans le système. Gère les informations patients et les + * opérations associées. + */ public class Patient { private String IPP; @@ -31,6 +31,9 @@ public class Patient { private Genre genre; private String n_secu; + /** + * Constructeur par défaut. + */ public Patient() { this.IPP = null; this.Date_de_naissance = null; @@ -41,6 +44,16 @@ public class Patient { } + /** + * Constructeur complet. + * + * @param IPP Identifiant Patient Principal + * @param nom Nom du patient + * @param prenom Prénom du patient + * @param Date_de_naissance Date de naissance + * @param genre Genre (M/F) + * @param n_secu Numéro de sécurité sociale + */ public Patient(String IPP, String nom, String prenom, String Date_de_naissance, Genre genre, String n_secu) { this.IPP = IPP; this.Date_de_naissance = Date_de_naissance; @@ -51,6 +64,11 @@ public class Patient { } + /** + * Constructeur par IPP. Charge les données patient depuis la base. + * + * @param IPP Identifiant Patient Principal + */ public Patient(String IPP) { StringBuilder requeteRecupDMR = new StringBuilder("SELECT * FROM PatientDMR WHERE "); if (IPP != null && !IPP.isBlank()) { @@ -81,11 +99,17 @@ public class Patient { } } private static final String[][] TEST_PATIENTS = { - {"1", "Martin", "Alfred", "1983-01-01", "H", "1691238345987"}, - {"2", "Gerard", "Beatrice", "1975-05-15", "F", "2610769839587"}, - {"3", "Claude", "Gisele", "1969-11-20", "F", "2551169763987"} -}; + {"1", "Martin", "Alfred", "1983-01-01", "H", "1691238345987"}, + {"2", "Gerard", "Beatrice", "1975-05-15", "F", "2610769839587"}, + {"3", "Claude", "Gisele", "1969-11-20", "F", "2551169763987"} + }; + /** + * Recherche avancée de patients. + * + * @param rechercheUnifiee Terme de recherche unifié + * @return Paire contenant liste des patients et message d'erreur + */ public Pair<List<Patient>, String> rechercherPatients2(String rechercheUnifiee) { List<Patient> patients = new ArrayList<>(); @@ -165,6 +189,17 @@ public class Patient { return new Pair<>(patients, patients.isEmpty() ? "Aucun patient trouvé." : ""); } + /** + * Recherche de patients par critères. + * + * @param IPP Identifiant Patient Principal + * @param nom Nom du patient + * @param prenom Prénom du patient + * @param dateNaissance Date de naissance + * @param genre Genre (M/F) + * @param n_secu Numéro de sécurité sociale + * @return Liste des patients correspondants + */ public List<Patient> rechercherPatients(String IPP, String nom, String prenom, String dateNaissance, Genre genre, String n_secu) { List<Patient> patients = new ArrayList<>(); @@ -221,6 +256,15 @@ public class Patient { return patients; } + /** + * Vérifie l'existence d'un patient. + * + * @param IPP Identifiant Patient Principal + * @param nom Nom du patient + * @param prenom Prénom du patient + * @param n_secu Numéro de sécurité sociale + * @return Liste des patients trouvés + */ public List<Patient> patientExiste(String IPP, String nom, String prenom, String n_secu) { List<Patient> patients = new ArrayList<>(); @@ -326,6 +370,12 @@ public class Patient { return null; } + /** + * Crée un DMR pour ce patient. + * + * @param motif Motif d'ouverture + * @return true si la création a réussi + */ public boolean creerDMR(String motif) { // Mode test - utiliser un mock @@ -374,6 +424,11 @@ public class Patient { } } + /** + * Récupère les DMR associés à ce patient. + * + * @return Liste des DMR trouvés + */ public List<Dmr> recupererDMR() { List<Dmr> dmrs = new ArrayList<>(); @@ -413,50 +468,57 @@ public class Patient { } /** - * @return the IPP + * @return Identifiant Patient Principal */ + public String getIPP() { + return IPP; + } + + /** + * @param IPP Nouvel Identifiant Patient Principal + */ + public void setIPP(String IPP) { + this.IPP = IPP; + } + /** - * @return the nom + * @param IPP Nouvel Identifiant Patient Principal */ public String getNom() { return nom; } /** - * @return the prenom + * @return Prénom du patient */ public String getPrenom() { return prenom; } /** - * @return the Date_de_naissance + * @return Date de naissance */ public String getDate_de_naissance() { return Date_de_naissance; } /** - * @return the genre + * @return Genre (M/F) */ public Genre getGenre() { return genre; } /** - * @return the n_secu + * @return Numéro de sécurité sociale */ public String getN_secu() { return n_secu; } /** - * @param IPP the IPP to set + * @return Numéro de sécurité sociale */ - public void setIPP(String IPP) { - this.IPP = IPP; - } - public void afficherPatients(List<Patient> patients) { if (patients != null && !patients.isEmpty()) { patients.forEach(p -> System.out.println("IPP: " + p.getIPP() + ", Nom: " + p.nom + ", Prénom: " + p.prenom @@ -466,11 +528,4 @@ public class Patient { } } - /** - * @return the IPP - */ - public String getIPP() { - return IPP; - } - } diff --git a/src/fc/model/Radiologue.java b/src/fc/model/Radiologue.java index 9e965c8..03b005c 100644 --- a/src/fc/model/Radiologue.java +++ b/src/fc/model/Radiologue.java @@ -8,13 +8,19 @@ package fc.model; * * @author valen */ +/** + * Représente un radiologue. Niveau d'accès : 1 + */ public class Radiologue extends Utilisateur { - + + /** + * Crée un radiologue. + * + * @param id Identifiant unique + * @param Mot_de_passe Mot de passe + */ public Radiologue(String id, String Mot_de_passe) { super(id, Mot_de_passe, 1); } - - - - + } diff --git a/src/fc/model/Utilisateur.java b/src/fc/model/Utilisateur.java index 8cf5f53..859b5aa 100644 --- a/src/fc/model/Utilisateur.java +++ b/src/fc/model/Utilisateur.java @@ -10,31 +10,54 @@ import fc.Sql.ConnexionDataBase; * * @author valen */ +/** + * Représente un utilisateur du système. Classe parente pour les différents + * types d'utilisateurs. + */ public abstract class Utilisateur { - private String id ; + + private String id; private String Mot_de_passe; - private int acces ; - + private int acces; + + /** + * Crée un nouvel utilisateur. + * + * @param id Identifiant unique + * @param Mot_de_passe Mot de passe + * @param acces Niveau d'accès + */ public Utilisateur(String id, String Mot_de_passe, int acces) { this.id = id; this.Mot_de_passe = Mot_de_passe; this.acces = acces; } - + + /** + * @return L'identifiant de l'utilisateur + */ public String getId() { return id; } + /** + * @return Le niveau d'accès de l'utilisateur + */ public int getAcces() { return acces; } - - public String getNom(){ + + /** + * Récupère le nom de l'utilisateur depuis la base de données. + * + * @return Le nom de l'utilisateur + */ + public String getNom() { String requete = "SELECT nom " - + "FROM utilisateur " - + "WHERE numero_id="+id - + " AND Mot_de_passe='"+Mot_de_passe+"'"; + + "FROM utilisateur " + + "WHERE numero_id=" + id + + " AND Mot_de_passe='" + Mot_de_passe + "'"; return ConnexionDataBase.sqlRequete(requete); } - + } diff --git a/src/ui/Controller/AdministrationPageController.java b/src/ui/Controller/AdministrationPageController.java index 08c685b..328d3cc 100644 --- a/src/ui/Controller/AdministrationPageController.java +++ b/src/ui/Controller/AdministrationPageController.java @@ -28,8 +28,16 @@ import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.util.Pair; +/** + * Contrôleur pour la page d'administration. Gère la création et la gestion des + * DMR (Dossiers Médicaux Radiologiques). + */ public class AdministrationPageController { + /** + * Initialise les composants de l'interface. Configure les liaisons entre + * les colonnes des tables et les propriétés des objets. + */ @FXML private Label welcomeLabel; @FXML @@ -63,18 +71,6 @@ public class AdministrationPageController { private Administration admin; - public void setAdmin(Administration admin) { - this.admin = admin; - updateWelcomeMessage(); - } - - @FXML - private void updateWelcomeMessage() { - if (admin != null && welcomeLabel != null) { - welcomeLabel.setText("Bienvenue M./Mme " + admin.getNom()); - } - } - @FXML private void initialize() { // Configuration des colonnes Patients @@ -97,6 +93,31 @@ public class AdministrationPageController { }); } + /** + * Définit l'administrateur connecté et met à jour le message de bienvenue. + * + * @param admin L'administrateur connecté + */ + public void setAdmin(Administration admin) { + this.admin = admin; + updateWelcomeMessage(); + } + + /** + * Met à jour le message de bienvenue avec le nom de l'administrateur. + */ + @FXML + private void updateWelcomeMessage() { + if (admin != null && welcomeLabel != null) { + welcomeLabel.setText("Bienvenue M./Mme " + admin.getNom()); + } + } + + /** + * Gère la déconnexion de l'utilisateur. + * + * @param event L'événement de clic sur le bouton de déconnexion + */ @FXML private void actionDeconnexion(ActionEvent event) { try { @@ -113,6 +134,10 @@ public class AdministrationPageController { } } + /** + * Recherche des patients selon le critère saisi. Affiche les résultats dans + * la table des patients. + */ @FXML private void recherchePatient() { String recherche = fieldRecherhe.getText().trim(); @@ -131,6 +156,11 @@ public class AdministrationPageController { } } + /** + * Gère l'appui sur la touche Entrée dans le champ de recherche. + * + * @param event L'événement clavier + */ @FXML private void toucheEntrer(KeyEvent event) { if (event.getCode() == KeyCode.ENTER) { @@ -138,22 +168,10 @@ public class AdministrationPageController { } } - private void actionSurSelection(String ipp) { - Dmr dmr = new Dmr(); - List<Dmr> dmrs = dmr.recupererDMR(ipp); - List<DmrPatient> dmrPatients = new ArrayList<>(); - Patient pat = new Patient(); - - for (Dmr d : dmrs) { - List<Patient> patients = pat.rechercherPatients(d.getIPP(), null, null, null, null, null); - if (!patients.isEmpty()) { - dmrPatients.add(new DmrPatient(d, patients.get(0))); - } - } - - tableViewDmrPatient.setItems(FXCollections.observableArrayList(dmrPatients)); - } - + /** + * Crée un nouveau DMR pour le patient sélectionné. Vérifie qu'un patient + * est sélectionné et qu'un motif est saisi. + */ @FXML private void creer() { Patient selectedPatient = tableViewPatients.getSelectionModel().getSelectedItem(); @@ -178,6 +196,9 @@ public class AdministrationPageController { } } + /** + * Charge un DMR existant en l'activant. Vérifie qu'un DMR est sélectionné. + */ @FXML private void charger() { DmrPatient selectedDmr = tableViewDmrPatient.getSelectionModel().getSelectedItem(); @@ -195,4 +216,26 @@ public class AdministrationPageController { messageLabel.setText("Erreur lors du chargement du DMR"); } } + + /** + * Met à jour la liste des DMR lorsqu'un patient est sélectionné. + * + * @param ipp L'identifiant du patient sélectionné + */ + private void actionSurSelection(String ipp) { + Dmr dmr = new Dmr(); + List<Dmr> dmrs = dmr.recupererDMR(ipp); + List<DmrPatient> dmrPatients = new ArrayList<>(); + Patient pat = new Patient(); + + for (Dmr d : dmrs) { + List<Patient> patients = pat.rechercherPatients(d.getIPP(), null, null, null, null, null); + if (!patients.isEmpty()) { + dmrPatients.add(new DmrPatient(d, patients.get(0))); + } + } + + tableViewDmrPatient.setItems(FXCollections.observableArrayList(dmrPatients)); + } + } diff --git a/src/ui/Controller/ConnexionPageController.java b/src/ui/Controller/ConnexionPageController.java index 4fd9ed1..b5ea956 100644 --- a/src/ui/Controller/ConnexionPageController.java +++ b/src/ui/Controller/ConnexionPageController.java @@ -33,8 +33,14 @@ import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.stage.Stage; +/** + * Contrôleur pour la page de connexion de l'application. Gère + * l'authentification des utilisateurs et la redirection vers les interfaces + * appropriées. + */ public class ConnexionPageController implements Initializable { + // Composants FXML @FXML private TextField textFieldIdentifiant; @@ -43,30 +49,54 @@ public class ConnexionPageController implements Initializable { @FXML private Button buttonValider; - + @FXML private Label errorLabel; @FXML private ImageView image = new ImageView(); + /** + * Initialise le contrôleur après le chargement de la vue. Charge et affiche + * le logo de l'application. + * + * @param url L'emplacement utilisé pour résoudre les chemins relatifs + * @param rb Les ressources utilisées pour localiser les objets + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + //Image image2 = new Image("file:" + "src/jpg/abdomen/cor494-i436.jpg"); + Image image2; + try { + image2 = new Image(new FileInputStream("src/ui/jpg/logo/LVBH.png")); + this.image.setImage(image2); + this.image.setPreserveRatio(true); + } catch (FileNotFoundException ex) { + Logger.getLogger(ConnexionPageController.class.getName()).log(Level.SEVERE, null, ex); + } + + } + + /** + * Gère la tentative de connexion lors du clic sur le bouton Valider. Valide + * les identifiants et redirige vers l'interface appropriée. + */ @FXML private void handleButtonValider() { - + errorLabel.setText(""); //message d'erreur réintialisé - + String id = textFieldIdentifiant.getText(); String password = passwordField.getText(); - + String erreur = MessageDErreur.validerIdMdp(id, password); - + if (!erreur.isEmpty()) { // Afficher l'erreur dans le Label errorLabel.setText(erreur); return; // Ne pas continuer la connexion } - - + Connexion c = new Connexion(id, password); if (c == null) { @@ -84,7 +114,6 @@ public class ConnexionPageController implements Initializable { case 1 -> { System.out.println("Accès Radiologue détecté"); RadiologuePage radPage = new RadiologuePage((Radiologue) utilisateur); - radPage.show(); currentStage.close(); // Fermer la page de connexion @@ -112,25 +141,17 @@ public class ConnexionPageController implements Initializable { } } + /** + * Gère l'appui sur la touche Entrée dans les champs de saisie. Déclenche la + * tentative de connexion comme avec le bouton Valider. + * + * @param event L'événement clavier + */ @FXML private void toucheEntrer(KeyEvent event) { - if (event.getCode() == KeyCode.ENTER) { - handleButtonValider(); // Appelle la méthode comme si le bouton était cliqué - } -} - - @Override - public void initialize(URL url, ResourceBundle rb) { - //Image image2 = new Image("file:" + "src/jpg/abdomen/cor494-i436.jpg"); - Image image2; - try { - image2 = new Image(new FileInputStream("src/ui/jpg/logo/LVBH.png")); - this.image.setImage(image2); - this.image.setPreserveRatio(true); - } catch (FileNotFoundException ex) { - Logger.getLogger(ConnexionPageController.class.getName()).log(Level.SEVERE, null, ex); + if (event.getCode() == KeyCode.ENTER) { + handleButtonValider(); // Appelle la méthode comme si le bouton était cliqué } - } } diff --git a/src/ui/Controller/ManipController.java b/src/ui/Controller/ManipController.java index ef44e3f..b2a0914 100644 --- a/src/ui/Controller/ManipController.java +++ b/src/ui/Controller/ManipController.java @@ -28,6 +28,10 @@ import javafx.scene.control.TableView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; +/** + * Contrôleur pour l'interface manipulateur radio. Gère la création d'examens + * radiologiques et la gestion des images PACS. + */ public class ManipController implements Initializable { private Manipulateur manipulateur; @@ -58,6 +62,10 @@ public class ManipController implements Initializable { @FXML private ComboBox<String> comboImagerie, comboAnat; + /** + * Initialise le contrôleur après le chargement de la vue. Configure les + * tables, les combobox et les écouteurs d'événements. + */ @Override public void initialize(URL url, ResourceBundle rb) { setupTableColumns(); @@ -70,6 +78,9 @@ public class ManipController implements Initializable { } + /** + * Configure les liaisons des colonnes des tables. + */ private void setupTableColumns() { columnIpp.setCellValueFactory(new PropertyValueFactory<>("IPP")); columnNom.setCellValueFactory(new PropertyValueFactory<>("nom")); @@ -80,6 +91,9 @@ public class ManipController implements Initializable { columnPrenomDmr.setCellValueFactory(new PropertyValueFactory<>("prenom")); } + /** + * Initialise les ComboBox avec leurs valeurs par défaut. + */ private void setupComboBoxes() { comboImagerie.getItems().addAll("Radio", "IRM", "Scanner"); comboAnat.getItems().addAll("abdomen", "sinus", "brain"); @@ -96,11 +110,17 @@ public class ManipController implements Initializable { comboBoxMin.setValue(now.getMinute()); } + /** + * Charge les données initiales (images PACS et DMR actifs). + */ private void loadInitialData() { liste_image.setItems(new Pacs().ListImage()); loadActiveDmrs(); } + /** + * Charge la liste des DMR actifs. + */ private void loadActiveDmrs() { List<Dmr> dmrActif = new Dmr().dmrActiver(); List<DmrPatient> dmrPatients = new ArrayList<>(); @@ -115,6 +135,9 @@ public class ManipController implements Initializable { tableViewDmrPatient.setItems(FXCollections.observableArrayList(dmrPatients)); } + /** + * Configure les écouteurs pour la sélection dans les listes. + */ private void setupListeners() { liste_image.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal) -> { if (newVal != null) { @@ -129,11 +152,19 @@ public class ManipController implements Initializable { }); } + /** + * Applique les styles aux tables. + */ private void applyStyles() { tableViewPatient.setStyle("-fx-selection-bar: #3498db; -fx-selection-bar-non-focused: #bdc3c7;"); tableViewDmrPatient.setStyle("-fx-selection-bar: #3498db; -fx-selection-bar-non-focused: #bdc3c7;"); } + /** + * Définit le manipulateur connecté et met à jour le message de bienvenue. + * + * @param manipulateur Le manipulateur connecté + */ public void setManipulateur(Manipulateur manipulateur) { this.manipulateur = manipulateur; updateWelcomeMessage(); @@ -145,6 +176,11 @@ public class ManipController implements Initializable { } } + /** + * Charge et affiche l'image sélectionnée. + * + * @param path Chemin d'accès à l'image + */ private void loadSelectedImage(String path) { try { Image img = new Image(new FileInputStream(path)); @@ -157,6 +193,11 @@ public class ManipController implements Initializable { } } + /** + * Charge les DMR associés au patient sélectionné. + * + * @param patient Le patient sélectionné + */ private void loadPatientDmrs(Patient patient) { List<Dmr> dmrs = patient.recupererDMR(); List<DmrPatient> dmrPatients = new ArrayList<>(); @@ -172,6 +213,11 @@ public class ManipController implements Initializable { tableViewDmrPatient.setItems(FXCollections.observableArrayList(dmrPatients)); } + /** + * Charge les DMR associés au patient sélectionné. + * + * @param patient Le patient sélectionné + */ @FXML private void actionRechercher() { String recherche = fieldRecherhe.getText().trim(); @@ -191,8 +237,12 @@ public class ManipController implements Initializable { tableViewPatient.setItems(FXCollections.observableArrayList(result.getKey())); } - - + + /** + * Gère l'appui sur la touche Entrée dans le champ de recherche. + * + * @param event L'événement clavier + */ @FXML private void toucheEntrer(KeyEvent event) { if (event.getCode() == KeyCode.ENTER) { @@ -200,6 +250,11 @@ public class ManipController implements Initializable { } } + /** + * Déconnecte l'utilisateur et retourne à la page de connexion. + * + * @param event L'événement de clic + */ @FXML private void actionDeconnexion(ActionEvent event) { try { @@ -214,6 +269,10 @@ public class ManipController implements Initializable { } } + /** + * Valide la création d'un nouvel examen. Vérifie les champs obligatoires + * avant création. + */ @FXML private void actionValider() { if (tableViewDmrPatient.getSelectionModel().getSelectedItems().isEmpty()) { @@ -245,6 +304,11 @@ public class ManipController implements Initializable { createNewExam(dmrSelect, date, imagerie, anatomie, chemin); } + /** + * Récupère le chemin de l'image sélectionnée. + * + * @return Le chemin de l'image ou null si aucune sélection + */ private String getSelectedImagePath() { if (liste_image.getSelectionModel().getSelectedItems().isEmpty()) { return null; @@ -252,6 +316,15 @@ public class ManipController implements Initializable { return new Pacs().pathWithNom(liste_image.getSelectionModel().getSelectedItems().get(0)); } + /** + * Crée un nouvel examen radiologique. + * + * @param dmrSelect Le DMR sélectionné + * @param date Date et heure de l'examen + * @param imagerie Type d'imagerie + * @param anatomie Zone anatomique + * @param chemin Chemin de l'image (peut être null) + */ private void createNewExam(DmrPatient dmrSelect, String date, String imagerie, String anatomie, String chemin) { Examen ex = new Examen(); String acte = imagerie + " " + anatomie; diff --git a/src/ui/Controller/PageExamenController.java b/src/ui/Controller/PageExamenController.java index 8943ecc..c67958a 100644 --- a/src/ui/Controller/PageExamenController.java +++ b/src/ui/Controller/PageExamenController.java @@ -33,8 +33,14 @@ import javafx.stage.Stage; * * @author valen */ +/** + * Contrôleur pour la page de visualisation et d'édition d'un examen + * radiologique. Permet de consulter les détails de l'examen et de rédiger le + * compte-rendu. + */ public class PageExamenController implements Initializable { + // Composants FXML @FXML private ImageView image; @FXML @@ -55,12 +61,21 @@ public class PageExamenController implements Initializable { private Examen examen; private Radiologue radiologue; + /** + * Initialise le contrôleur. Configure le comportement du TextArea pour le + * compte-rendu. + */ @Override public void initialize(URL url, ResourceBundle rb) { // Configuration du TextArea compteRenduText.setWrapText(true); } + /** + * Définit l'examen à afficher et charge ses données. + * + * @param examen L'examen à afficher + */ public void setExamen(Examen examen) { this.examen = examen; if (examen != null) { @@ -77,17 +92,20 @@ public class PageExamenController implements Initializable { } } + /** + * Définit le radiologue connecté et met à jour le message de bienvenue. + * + * @param radiologue Le radiologue connecté + */ public void setRadiologue(Radiologue radiologue) { this.radiologue = radiologue; updateWelcomeMessage(); } - private void updateWelcomeMessage() { - if (welcomeLabel != null && radiologue != null) { - welcomeLabel.setText("Bienvenue, Dr " + radiologue.getNom()); - } - } - + /** + * Charge et affiche l'image associée à l'examen. Affiche une image par + * défaut si aucune image n'est associée. + */ private void loadExamImage() { try { String defaultImagePath = "src/ui.jpg.logo/Examen_sans_image_associée.jpg"; @@ -110,6 +128,9 @@ public class PageExamenController implements Initializable { } } + /** + * Affiche les informations de l'examen (DMR, motif, date, type d'imagerie). + */ private void displayExamInfo() { Dmr d = new Dmr(); List<Dmr> dmrs = d.recupererDMR(examen.getId_dmr()); @@ -129,6 +150,20 @@ public class PageExamenController implements Initializable { } } + /** + * Met à jour le message de bienvenue avec le nom du radiologue. + */ + private void updateWelcomeMessage() { + if (welcomeLabel != null && radiologue != null) { + welcomeLabel.setText("Bienvenue, Dr " + radiologue.getNom()); + } + } + + /** + * Enregistre le compte-rendu saisi et retourne à la liste des examens. + * + * @param event L'événement de clic + */ @FXML private void enregistrerCompteRendu(ActionEvent event) { if (examen != null) { @@ -140,28 +175,38 @@ public class PageExamenController implements Initializable { } } -@FXML -private void retourListe(ActionEvent event) { - try { - FXMLLoader loader = new FXMLLoader(getClass().getResource("/ui/fxml/RadiologuePage.fxml")); - Parent root = loader.load(); - - RadiologuePageController controller = loader.getController(); - controller.setRadiologue(this.radiologue); // Réinjecter le radiologue - - Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); - stage.close(); // Fermer la page examen - - Stage newStage = new Stage(); - newStage.setScene(new Scene(root)); - newStage.setTitle("Page Radiologue"); - newStage.setFullScreen(true); - newStage.show(); - } catch (IOException e) { - e.printStackTrace(); + /** + * Retourne à la page de liste des examens du radiologue. + * + * @param event L'événement de clic + */ + @FXML + private void retourListe(ActionEvent event) { + try { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/ui/fxml/RadiologuePage.fxml")); + Parent root = loader.load(); + + RadiologuePageController controller = loader.getController(); + controller.setRadiologue(this.radiologue); // Réinjecter le radiologue + + Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); + stage.close(); // Fermer la page examen + + Stage newStage = new Stage(); + newStage.setScene(new Scene(root)); + newStage.setTitle("Page Radiologue"); + newStage.setFullScreen(true); + newStage.show(); + } catch (IOException e) { + e.printStackTrace(); + } } -} + /** + * Déconnecte l'utilisateur et retourne à la page de connexion. + * + * @param event L'événement de clic + */ @FXML private void actionDeconnexion(ActionEvent event) { try { diff --git a/src/ui/Controller/Radio_ManipController.java b/src/ui/Controller/Radio_ManipController.java index 0250851..867d879 100644 --- a/src/ui/Controller/Radio_ManipController.java +++ b/src/ui/Controller/Radio_ManipController.java @@ -29,6 +29,10 @@ import javafx.scene.input.KeyEvent; import javafx.stage.Stage; import javafx.util.Pair; +/** + * Contrôleur pour l'interface manipulateur radio. + * Gère la création d'examens radiologiques et la visualisation des images PACS. + */ public class Radio_ManipController implements Initializable { private Radiologue radiologue; @@ -61,6 +65,10 @@ public class Radio_ManipController implements Initializable { @FXML private ComboBox<String> comboImagerie, comboAnat; + /** + * Initialise le contrôleur après le chargement de la vue. + * Configure les tables, les combobox et les écouteurs d'événements. + */ @Override public void initialize(URL url, ResourceBundle rb) { setupTableColumns(); @@ -73,6 +81,9 @@ public class Radio_ManipController implements Initializable { } + /** + * Configure les liaisons des colonnes des tables. + */ private void setupTableColumns() { columnIpp.setCellValueFactory(new PropertyValueFactory<>("IPP")); columnNom.setCellValueFactory(new PropertyValueFactory<>("nom")); @@ -83,6 +94,9 @@ public class Radio_ManipController implements Initializable { columnPrenomDmr.setCellValueFactory(new PropertyValueFactory<>("prenom")); } + /** + * Initialise les ComboBox avec leurs valeurs par défaut. + */ private void setupComboBoxes() { comboImagerie.getItems().addAll("Radio", "IRM", "Scanner"); comboAnat.getItems().addAll("abdomen", "sinus", "brain"); @@ -94,11 +108,17 @@ public class Radio_ManipController implements Initializable { comboBoxMin.setValue(now.getMinute()); } + /** + * Charge les données initiales (images PACS et DMR actifs). + */ private void loadInitialData() { liste_image.setItems(new Pacs().ListImage()); loadActiveDmrs(); } + /** + * Charge la liste des DMR actifs. + */ private void loadActiveDmrs() { List<Dmr> dmrActif = new Dmr().dmrActiver(); List<DmrPatient> dmrPatients = new ArrayList<>(); @@ -113,6 +133,9 @@ public class Radio_ManipController implements Initializable { tableViewDmrPatient.setItems(FXCollections.observableArrayList(dmrPatients)); } + /** + * Configure les écouteurs pour la sélection dans les listes. + */ private void setupListeners() { liste_image.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal) -> { if (newVal != null) { @@ -127,11 +150,18 @@ public class Radio_ManipController implements Initializable { }); } + /** + * Applique les styles aux tables. + */ private void applyStyles() { tableViewPatient.setStyle("-fx-selection-bar: #3498db; -fx-selection-bar-non-focused: #bdc3c7;"); tableViewDmrPatient.setStyle("-fx-selection-bar: #3498db; -fx-selection-bar-non-focused: #bdc3c7;"); } + /** + * Définit le radiologue connecté et met à jour le message de bienvenue. + * @param radiologue Le radiologue connecté + */ public void setRadiologue(Radiologue radiologue) { this.radiologue = radiologue; updateWelcomeMessage(); @@ -143,6 +173,10 @@ public class Radio_ManipController implements Initializable { } } + /** + * Charge et affiche l'image sélectionnée. + * @param path Chemin d'accès à l'image + */ private void loadSelectedImage(String path) { try { Image img = new Image(new FileInputStream(path)); @@ -154,7 +188,11 @@ public class Radio_ManipController implements Initializable { System.err.println("Erreur de chargement de l'image: " + e.getMessage()); } } - + + /** + * Charge les DMR associés au patient sélectionné. + * @param patient Le patient sélectionné + */ private void loadPatientDmrs(Patient patient) { List<Dmr> dmrs = patient.recupererDMR(); List<DmrPatient> dmrPatients = new ArrayList<>(); @@ -170,6 +208,10 @@ public class Radio_ManipController implements Initializable { tableViewDmrPatient.setItems(FXCollections.observableArrayList(dmrPatients)); } + /** + * Retourne à la page radiologue. + * @param event L'événement de clic + */ @FXML private void retourPageRadiologue(ActionEvent event) { try { @@ -189,6 +231,9 @@ public class Radio_ManipController implements Initializable { } } + /** + * Recherche des patients selon le critère saisi. + */ @FXML private void actionRechercher() { String recherche = fieldRecherhe.getText().trim(); @@ -209,6 +254,10 @@ public class Radio_ManipController implements Initializable { tableViewPatient.setItems(FXCollections.observableArrayList(result.getKey())); } + /** + * Gère l'appui sur la touche Entrée dans le champ de recherche. + * @param event L'événement clavier + */ @FXML private void toucheEntrer(KeyEvent event) { if (event.getCode() == KeyCode.ENTER) { @@ -216,7 +265,10 @@ public class Radio_ManipController implements Initializable { } } - + /** + * Déconnecte l'utilisateur et retourne à la page de connexion. + * @param event L'événement de clic + */ @FXML private void actionDeconnexion(ActionEvent event) { try { @@ -231,6 +283,10 @@ public class Radio_ManipController implements Initializable { } } + /** + * Valide la création d'un nouvel examen. + * Vérifie les champs obligatoires avant création. + */ @FXML private void actionValider() { if (tableViewDmrPatient.getSelectionModel().getSelectedItems().isEmpty()) { @@ -262,6 +318,10 @@ public class Radio_ManipController implements Initializable { createNewExam(dmrSelect, date, imagerie, anatomie, chemin); } + /** + * Récupère le chemin de l'image sélectionnée. + * @return Le chemin de l'image ou null si aucune sélection + */ private String getSelectedImagePath() { if (liste_image.getSelectionModel().getSelectedItems().isEmpty()) { return null; @@ -269,6 +329,14 @@ public class Radio_ManipController implements Initializable { return new Pacs().pathWithNom(liste_image.getSelectionModel().getSelectedItems().get(0)); } + /** + * Crée un nouvel examen radiologique. + * @param dmrSelect Le DMR sélectionné + * @param date Date et heure de l'examen + * @param imagerie Type d'imagerie + * @param anatomie Zone anatomique + * @param chemin Chemin de l'image (peut être null) + */ private void createNewExam(DmrPatient dmrSelect, String date, String imagerie, String anatomie, String chemin) { Examen ex = new Examen(); String acte = imagerie + " " + anatomie; diff --git a/src/ui/Controller/RadiologuePageController.java b/src/ui/Controller/RadiologuePageController.java index 05b5da0..204cbe4 100644 --- a/src/ui/Controller/RadiologuePageController.java +++ b/src/ui/Controller/RadiologuePageController.java @@ -23,8 +23,13 @@ import javafx.scene.input.KeyEvent; import javafx.stage.Stage; import javafx.util.Pair; +/** + * Contrôleur pour l'interface du radiologue. Gère la visualisation et la + * gestion des examens radiologiques. + */ public class RadiologuePageController { + // Composants FXML @FXML private Label welcomeLabel; @@ -68,17 +73,20 @@ public class RadiologuePageController { private Dmr dmr; private ObservableList<Examen> examensList = FXCollections.observableArrayList(); + /** + * Définit le radiologue connecté et met à jour le message de bienvenue. + * + * @param radiologue Le radiologue connecté + */ public void setRadiologue(Radiologue radiologue) { this.radiologue = radiologue; updateWelcomeMessage(); } - private void updateWelcomeMessage() { - if (welcomeLabel != null && radiologue != null) { - welcomeLabel.setText("Bienvenue, Dr " + radiologue.getNom()); - } - } - + /** + * Initialise les composants de l'interface. Configure les colonnes des + * tables et les écouteurs de sélection. + */ @FXML private void initialize() { // Configuration des colonnes @@ -120,6 +128,20 @@ public class RadiologuePageController { CouleurDeLigne(); } + /** + * Met à jour le message de bienvenue avec le nom du radiologue. + */ + private void updateWelcomeMessage() { + if (welcomeLabel != null && radiologue != null) { + welcomeLabel.setText("Bienvenue, Dr " + radiologue.getNom()); + } + } + + /** + * Gère la déconnexion du radiologue. + * + * @param event L'événement de clic + */ @FXML private void actionDeconnexion(ActionEvent event) { try { @@ -143,6 +165,9 @@ public class RadiologuePageController { } } + /** + * Recherche les examens associés à un DMR. + */ @FXML private void rechercherExamens() { String idDMR = textFieldDMR.getText(); @@ -163,6 +188,12 @@ public class RadiologuePageController { //new pageExamen(examen).show(); } + /** + * Affiche une alerte avec un message d'erreur. + * + * @param title Le titre de l'alerte + * @param message Le message à afficher + */ @FXML private void showAlert(String title, String message) { Alert alert = new Alert(Alert.AlertType.ERROR); @@ -171,6 +202,11 @@ public class RadiologuePageController { alert.showAndWait(); } + /** + * Gère la sélection d'un patient dans la table. + * + * @param patient Le patient sélectionné + */ private void actionSurSelectionPatient(Patient patient) { List<Dmr> dmrs = patient.recupererDMR(); ObservableList<Dmr> items = FXCollections.observableArrayList(dmrs); @@ -178,6 +214,11 @@ public class RadiologuePageController { } + /** + * Gère la sélection d'un DMR dans la table. + * + * @param dmr Le DMR sélectionné + */ private void actionSurSelectionDMR(Dmr dmr) { Examen ex = new Examen(); System.out.println("IPP : " + dmr.getIPP()); @@ -197,15 +238,24 @@ public class RadiologuePageController { } -private void actionSurSelectionExamen(Examen examen) { - Stage stage = (Stage) tableViewExamens.getScene().getWindow(); - pageExamen expage = new pageExamen(examen, radiologue); // Passer le radiologue - expage.show(); - - // Optionnel: cacher la fenêtre actuelle plutôt que de la fermer - stage.hide(); -} + /** + * Gère la sélection d'un examen dans la table. Ouvre la page de + * visualisation/édition de l'examen. + * + * @param examen L'examen sélectionné + */ + private void actionSurSelectionExamen(Examen examen) { + Stage stage = (Stage) tableViewExamens.getScene().getWindow(); + pageExamen expage = new pageExamen(examen, radiologue); // Passer le radiologue + expage.show(); + + // Optionnel: cacher la fenêtre actuelle plutôt que de la fermer + stage.hide(); + } + /** + * Recherche des patients selon les critères saisis. + */ @FXML private void actionRechercher() { // Utilisez soit le champ unifié soit concaténez les champs existants @@ -231,13 +281,23 @@ private void actionSurSelectionExamen(Examen examen) { tableViewPatient.setItems(FXCollections.observableArrayList(result.getKey())); } - @FXML + /** + * Gère l'appui sur la touche Entrée dans le champ de recherche. + * + * @param event L'événement clavier + */ + @FXML private void toucheEntrer(KeyEvent event) { if (event.getCode() == KeyCode.ENTER) { actionRechercher(); // Appelle la méthode comme si le bouton était cliqué } } + /** + * Ouvre l'interface pour le manipulateur. + * + * @param event L'événement de clic + */ @FXML private void ouvertureManip(ActionEvent event) { try { @@ -263,6 +323,10 @@ private void actionSurSelectionExamen(Examen examen) { } } + /** + * Applique un style coloré aux lignes de la table des examens. Vert pour + * les examens avec compte-rendu, rouge pour ceux sans. + */ private void CouleurDeLigne() { // Appliquer un style aux lignes en fonction de l'état du compte rendu tableViewExamens.setRowFactory(tv -> new TableRow<Examen>() { -- GitLab