From a4df94776792a1a1bf387bd46b535a739d1d8693 Mon Sep 17 00:00:00 2001 From: alartigu Date: Mon, 28 Dec 2020 10:09:51 +0400 Subject: [PATCH] BDD Fct GetPseudo / TailleBDD / AjoutUtilisateurs fonctionnelles --- .../compileJava/source-classes-mapping.txt | 62 +++--- .../src/main/java/chatapp/Launcher.java | 2 +- .../src/main/java/chatapp/Model/DataBase.java | 207 ++++++++++++++---- 3 files changed, 192 insertions(+), 79 deletions(-) diff --git a/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt b/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt index 6bf5cd7..3461ac5 100644 --- a/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt +++ b/Implementation/chatapp/build/tmp/compileJava/source-classes-mapping.txt @@ -1,39 +1,39 @@ -chatapp/Model/DataBase.java - chatapp.Model.DataBase -chatapp/Model/ListUtilisateurs.java - chatapp.Model.ListUtilisateurs -chatapp/Model/Utilisateur.java - chatapp.Model.Utilisateur -chatapp/Model/MessageHorodate.java - chatapp.Model.MessageHorodate -chatapp/Launcher.java - chatapp.Launcher -chatapp/Protocol/RunnerEcouteTCP.java - chatapp.Protocol.RunnerEcouteTCP +chatapp/View/DemarrerSession.java + chatapp.View.DemarrerSession chatapp/View/FenetreSession.java chatapp.View.FenetreSession chatapp.View.FenetreSession$1 -chatapp/Controller/ChatApp.java - chatapp.Controller.ChatApp -chatapp/View/DemarrerSession.java - chatapp.View.DemarrerSession -chatapp/Protocol/RunnerEcouteUDP.java - chatapp.Protocol.RunnerEcouteUDP -chatapp/Protocol/UDPEchange.java - chatapp.Protocol.RunnerUDP - chatapp.Protocol.UDPEchange -chatapp/Main.java - chatapp.Main +chatapp/Model/Utilisateur.java + chatapp.Model.Utilisateur +chatapp/View/ConnexionScreen.java + chatapp.View.ConnexionScreen +chatapp/View/ChangementPseudo.java + chatapp.View.ChangementPseudo chatapp/View/Clavardage.java chatapp.View.Clavardage chatapp.View.Clavardage$1 -chatapp/Protocol/SessionClavardage.java - chatapp.Protocol.SessionClavardage -chatapp/View/ConnexionScreen.java - chatapp.View.ConnexionScreen -chatapp/View/View_Utilisateurs.java - chatapp.View.View_Utilisateurs +chatapp/Launcher.java + chatapp.Launcher +chatapp/Model/ListUtilisateurs.java + chatapp.Model.ListUtilisateurs chatapp/View/View_Menu.java chatapp.View.View_Menu -chatapp/View/ChangementPseudo.java - chatapp.View.ChangementPseudo +chatapp/Model/MessageHorodate.java + chatapp.Model.MessageHorodate +chatapp/View/View_Utilisateurs.java + chatapp.View.View_Utilisateurs +chatapp/Protocol/RunnerEcouteTCP.java + chatapp.Protocol.RunnerEcouteTCP +chatapp/Protocol/UDPEchange.java + chatapp.Protocol.RunnerUDP + chatapp.Protocol.UDPEchange +chatapp/Controller/ChatApp.java + chatapp.Controller.ChatApp +chatapp/Main.java + chatapp.Main +chatapp/Protocol/SessionClavardage.java + chatapp.Protocol.SessionClavardage +chatapp/Model/DataBase.java + chatapp.Model.DataBase +chatapp/Protocol/RunnerEcouteUDP.java + chatapp.Protocol.RunnerEcouteUDP diff --git a/Implementation/chatapp/src/main/java/chatapp/Launcher.java b/Implementation/chatapp/src/main/java/chatapp/Launcher.java index c464364..b882896 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Launcher.java +++ b/Implementation/chatapp/src/main/java/chatapp/Launcher.java @@ -2,6 +2,6 @@ package chatapp; public class Launcher { public static void main(String[] args) { - Main.main(args); + // Main.main(args); } } diff --git a/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java b/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java index 46a9930..2732f67 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java +++ b/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java @@ -30,19 +30,25 @@ public class DataBase { private static DataBase instance = null; // Singleton + /** + * Constructeur de la database + * On installe le driver et on établit la connection. + */ public DataBase() { try { - // Besoin d'installer le driver JDBC entre java IDE et le system DBMS pour faire un pont entre les deux + //Besoin d'installer le driver JDBC entre java IDE et le system DBMS pour faire un pont entre les deux Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("Driver Installe"); } catch (ClassNotFoundException e) { e.printStackTrace(); System.out.println("Echec installation Driver"); } - try { - // Etablir une connexion , forme : (url, "myLogin", "myPassword"); - this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234"); + //Etablir une connexion , forme : (url, "myLogin", "myPassword"); + // Nabil : DECOMMENTER CETTE LIGNE + //this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234"); + // Auriane : DECOMMENTER CETTE LIGNE + this.connection = DriverManager.getConnection("jdbc:mysql://localhost:8889/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "root"); //this.connection = DriverManager.getConnection(this.DBurl,login,pswd); System.out.println("Connexion Etablie"); } catch (SQLException e) { @@ -51,6 +57,10 @@ public class DataBase { } } + /** + * Méthode permettant de renvoyer une instance de la classe DataBase + * @return Retourne l'instance du singleton DataBase. + */ public static DataBase getInstance() { synchronized (DataBase.class) { DataBase DB = instance; @@ -61,7 +71,7 @@ public class DataBase { } } - /* + /** * Methode permettant de creer une table pour stocker les messages entre deux utilisateurs * @param ID1 Id du premier utilisateur * @param ID2 Id du second utilisateur @@ -91,7 +101,6 @@ public class DataBase { e.printStackTrace(); System.out.println("Echec creation Statement"); } - //Execute la donnée SQL statement passe en parametre try { Ps.executeUpdate(); @@ -101,7 +110,7 @@ public class DataBase { } } - /* + /** * Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee * @param ID Id de l'utilisateur qui vient de changer de pseudo * @param Pseudo Nouveau Pseudo de l'utilisateur @@ -112,8 +121,8 @@ public class DataBase { //Statement est utilisé pour envoyer une requete SQL à la base de donnee try { Ps = connection.prepareStatement(requete); - Ps.setString(1, Pseudo); - Ps.setString(2, ID); + Ps.setString(1, Pseudo); // ? n°1 devient la valeur contenu dans Pseudo + Ps.setString(2, ID); // ? n°2 devient la valeur contenu dans ID System.out.println("Statement cree"); } catch (SQLException e) { e.printStackTrace(); @@ -130,7 +139,7 @@ public class DataBase { - /* + /** * Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee * @param IDdest Id de l'utilisateur Destinataire du message * @param IDdest Id de celui qui envoi le message @@ -154,15 +163,15 @@ public class DataBase { //Statement est utilisé pour envoyer une requete SQL à la base de donnee try { Ps = connection.prepareStatement(requete); - Ps.setString(1, IDdest); - Ps.setString(2, IDsrc); - Ps.setString(3, Msg); + Ps.setString(1, IDdest); // ? n°1 devient la valeur contenu dans IDdest + Ps.setString(2, IDsrc); // ? n°2 devient la valeur contenu dans IDsrc + Ps.setString(3, Msg); // ? n°3 devient la valeur contenu dans Msg + //La date de l'envoi n'a pas besoin d'être renseigné, elle est automatique System.out.println("Statement cree"); } catch (SQLException e) { e.printStackTrace(); System.out.println("Echec creation Statement"); } - //Execute la donnée SQL statement passe en parametre try { Ps.executeUpdate(); @@ -173,52 +182,54 @@ public class DataBase { } - /* + /** * Methode permettant d'ajouter un utilisateur dans la base de donnée si celui-ci n'existe pas deja * @param ID Id de l'utilisateur que l'on veut rajouter * @param Pseudo pseudo actuelle de l'utilisateur */ public void ajoutUtilisateurs(String ID , String Pseudo ) { // Verification que l'utilisateur n'existe pas - String existe= "SELECT Pseudo FROM Utilisateurs WHERE ID = " + ID +","; + String existe= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + ID +"'"; Statement stmt = null; ResultSet rs = null ; try { stmt = this.connection.createStatement(); - } catch (SQLException throwables) { - throwables.printStackTrace(); - } - try { - rs = stmt.executeQuery(existe); + rs = stmt.executeQuery(existe); } catch (SQLException throwables) { throwables.printStackTrace(); } String P = "" ; try { - P = rs.getString("Pseudo"); + if(rs.next()){ + P = rs.getString("Pseudo"); + // On recupere le pseudo de l'utilisateur dont l'ID est le parametre d'entree ID + // Si l'utilisateur n'est pas encore dans la base de donnée , P reste vide + } } catch (SQLException throwables) { throwables.printStackTrace(); } if( !P.equals("") ) { // L'utilisateur existe deja - if (!P.equals(Pseudo)){ + System.out.println("L'utilisateur " + P + " existe deja"); + if (!P.equals(Pseudo)){ // On regarde si le pseudo associé à ID dans la base de donnee est bien a jour this.majPseudo(ID,Pseudo); // On met a jour le nouveau pseudo } } else { + // L'utilisateur n'existe pas , on va le rajouter. + System.out.println("On rajoute l'utilisateur " + Pseudo); String requete = "INSERT INTO `Utilisateurs` (`ID`, `Pseudo`, `Actif`) VALUES ( ? , ? , '1')"; PreparedStatement Ps = null; //Statement est utilisé pour envoyer une requete SQL à la base de donnee try { Ps = connection.prepareStatement(requete); - Ps.setString(1, ID); - Ps.setString(2, Pseudo); + Ps.setString(1, ID); // ? n°1 devient la valeur contenu dans ID + Ps.setString(2, Pseudo); // ? n°2 devient la valeur contenu dans Pseudo System.out.println("Statement cree"); } catch (SQLException e) { e.printStackTrace(); System.out.println("Echec creation Statement"); } - //Execute la donnée SQL statement passe en parametre try { Ps.executeUpdate(); @@ -229,20 +240,20 @@ public class DataBase { } } - /* + /** * Methode permettant de mettre a jour les utilisateurs actuellement actif - * @param ID Id de l'utilisateur qui vient de se connecter ou deconnecter - * @param connecte Boolean true si il est connecte , false sinon + * @param Id Id de l'utilisateur qui vient de se connecter ou deconnecter + * @param Connecte Boolean true si il est connecte , false sinon */ public void majUtilisateursActifs(Boolean Connecte, String Id) { String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?"; PreparedStatement Ps = null ; - Integer Actif = Connecte ? 1 : 0; + Integer Actif = Connecte ? 1 : 0; // True -> 1 , False -> 0 //Statement est utilisé pour envoyer une requete SQL à la base de donnee try { Ps = connection.prepareStatement(requete); - Ps.setInt(1, Actif); - Ps.setString(2, Id); + Ps.setInt(1, Actif); // ? n°1 devient la valeur contenu dans Actif (1 ou 0) + Ps.setString(2, Id); // // ? n°2 devient la valeur contenu dans Id System.out.println("Statement cree"); } catch (SQLException e) { e.printStackTrace(); @@ -257,10 +268,11 @@ public class DataBase { } } - /* + /** * Methode permettant de recuperer les N derniers messages envoyés entre 2 utilisateurs * @param ID Utilisateur associé a ChatApp - * @param destinataire Celui avec qui correspond ID + * @param IDdestinataire Celui avec qui correspond ID + * @param N le nombre de messages souhaités * @return Les N derniers Messages */ public String recupNMsg(String ID, String IDdestinataire, int N) { @@ -273,11 +285,11 @@ public class DataBase { grand = IDdestinataire; } else { - petit = ID; - grand = IDdestinataire ; + petit = IDdestinataire; + grand = ID ; } String nomTable = "Chat_" + petit + "_" + grand ; - String requete= "SELECT * FROM nomTable"; + String requete = "SELECT * FROM "+ nomTable; Statement stmt = null; ResultSet rs = null ; try { @@ -290,7 +302,10 @@ public class DataBase { } catch (SQLException throwables) { throwables.printStackTrace(); } - + Integer Taille = tailleBDD(nomTable); + if(Taille < N ){ + N = Taille ; + } for(int i = 0 ; i < N; i++){ try { if( rs.next()){ @@ -304,24 +319,25 @@ public class DataBase { String PseudoSource = getPseudo(IDSource) ; Msg += ( PseudoSource + "(" + Envoi + ") : " + Message ); } - + Msg += '\n'; } + // MSG de la forme : + // Source (Date) : Texte } catch (SQLException throwables) { throwables.printStackTrace(); } } - return Msg ; } - /* + /** * Methode permettant de recuperer le pseudo actuel d'un utilisateur en fonction de son ID - * @param ID Id de l'utilsateur dont on veut connaitre le pseudo + * @param idSource Id de l'utilsateur dont on veut connaitre le pseudo * @return Pseudo */ private String getPseudo(String idSource) { String Pseudo = "" ; - String requete= "SELECT * FROM `Utilisateurs` WHERE ID = " + idSource; + String requete= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + idSource + "'"; Statement stmt = null; ResultSet rs = null ; try { @@ -335,13 +351,110 @@ public class DataBase { throwables.printStackTrace(); } try { - if (! rs.getString("Pseudo").equals(null) ){ - Pseudo = rs.getString("Pseudo") ; - } + if (rs.next()){ + Pseudo = rs.getString("Pseudo") ; + } + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + return Pseudo ; + } + + /** + * Methode permettant de recuperer les messages d'une plage de donnée [deb,fin] envoyés entre 2 utilisateurs + * @param ID Utilisateur associé a ChatApp + * @param IDdestinataire Celui avec qui correspond ID + * @param deb On veut les messages à partir de l'indice deb + * @param fin On veut les messages jusqu'a l'indice fin + * @return Les messages d'une plage de donnée [deb,fin] + */ + public String recupMsg(String ID, String IDdestinataire, int deb , int fin) { + String Msg = "" ; + String petit; + String grand; + int comparaison = ID.compareTo(IDdestinataire); + if (comparaison < 0) { + petit = ID; + grand = IDdestinataire; + } + else { + petit = IDdestinataire; + grand = ID ; + } + String nomTable = "Chat_" + petit + "_" + grand ; + String requete = "SELECT * FROM "+ nomTable; + Statement stmt = null; + ResultSet rs = null ; + try { + stmt = this.connection.createStatement(); } catch (SQLException throwables) { throwables.printStackTrace(); } - return Pseudo ; + try { + rs = stmt.executeQuery(requete); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + + for(int i = 0 ; i < fin; i++){ + try { + if( rs.next()){ + String IDSource = rs.getString("Source"); + String Envoi = rs.getTimestamp("Envoi").toString(); + String Message = rs.getString("Message"); + if (IDSource.equals(ID)){ + //Msg += ( "Moi (" + Envoi + ") : " + Message ) ; + } + else { + String PseudoSource = getPseudo(IDSource) ; + Msg += ( PseudoSource + "(" + Envoi + ") : " + Message ); + } + Msg += '\n'; + } + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + } + + return Msg ; } + /** + * Cette méthode sert à recuperer la taille d'un base de donnée + * @param nomTable Nom de la table de donnée dont on veut récuperer le nom + * @return Taille de la BDD + */ + public Integer tailleBDD(String nomTable) { + Integer Taille = 0 ; + String requete = "SELECT * FROM `"+nomTable+ "`"; + Statement stmt = null; + ResultSet rs = null ; + try { + stmt = this.connection.createStatement(); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + try { + rs = stmt.executeQuery(requete); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + while(true){ + try { + if (!rs.next()) break; + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + Taille++; + } + return Taille; + } + + public static void main(String[] args) { + DataBase db = DataBase.getInstance(); + String Msg = db.recupNMsg("MacYAYA", "MacBibil", 5); + System.out.println(Msg); + } + + }