diff --git a/Implementation/chatapp/src/main/java/chatapp/Launcher.java b/Implementation/chatapp/src/main/java/chatapp/Launcher.java index c464364..32eaad1 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Launcher.java +++ b/Implementation/chatapp/src/main/java/chatapp/Launcher.java @@ -1,7 +1,13 @@ package chatapp; +import com.sun.tools.javac.Main; + public class Launcher { public static void main(String[] args) { - Main.main(args); + try { + Main.main(args); + } catch (Exception e) { + e.printStackTrace(); + } } } diff --git a/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java b/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java index cd80e7b..29cdaf1 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java +++ b/Implementation/chatapp/src/main/java/chatapp/Model/DataBase.java @@ -2,11 +2,17 @@ package chatapp.Model; import java.sql.*; +/** + *

+ * Classe representant la Base de données. + * Celle-ci stocke la liste des utilisateurs ainsi que les échanges entre eux + *

+ */ public class DataBase { - private String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306" ; + private final String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306" ; private Connection connection = null; - private String login = "tp_servlet_006"; - private String pswd = "baePh9ei"; + private final String login = "tp_servlet_006"; + private final String pswd = "baePh9ei"; /*Format de la table Utilisateurs @@ -28,7 +34,7 @@ public class DataBase { Date d'envoie -> Date a laquelle Source a envoye le message a destinataire */ - private static DataBase instance = null; // Singleton + private static final DataBase instance = null; // Singleton /** * Constructeur de la database @@ -63,11 +69,7 @@ public class DataBase { */ public static DataBase getInstance() { synchronized (DataBase.class) { - DataBase DB = instance; - if (DB == null) { - DB = new DataBase(); - } - return DB; + return new DataBase(); } } @@ -103,6 +105,7 @@ public class DataBase { } //Execute la donnée SQL statement passe en parametre try { + assert Ps != null; Ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -130,6 +133,7 @@ public class DataBase { } //Execute la donnée SQL statement passe en parametre try { + assert Ps != null; Ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -142,7 +146,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 + * @param IDsrc Id de celui qui envoi le message * @param Msg Message envoye entre les deux utilisateurs */ public void ajoutHistorique(String IDdest , String IDsrc, String Msg) { @@ -174,6 +178,7 @@ public class DataBase { } //Execute la donnée SQL statement passe en parametre try { + assert Ps != null; Ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -190,7 +195,7 @@ public class DataBase { public void ajoutUtilisateurs(String ID , String Pseudo ) { // Verification que l'utilisateur n'existe pas String existe= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + ID +"'"; - Statement stmt = null; + Statement stmt; ResultSet rs = null ; try { stmt = this.connection.createStatement(); @@ -200,6 +205,7 @@ public class DataBase { } String P = "" ; try { + assert rs != null; if(rs.next()){ P = rs.getString("Pseudo"); // On recupere le pseudo de l'utilisateur dont l'ID est le parametre d'entree ID @@ -232,6 +238,7 @@ public class DataBase { } //Execute la donnée SQL statement passe en parametre try { + assert Ps != null; Ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -248,7 +255,7 @@ public class DataBase { public void majUtilisateursActifs(Boolean Connecte, String Id) { String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?"; PreparedStatement Ps = null ; - Integer Actif = Connecte ? 1 : 0; // True -> 1 , False -> 0 + int 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); @@ -261,6 +268,7 @@ public class DataBase { } //Execute la donnée SQL statement passe en parametre try { + assert Ps != null; Ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -276,7 +284,7 @@ public class DataBase { * @return Les N derniers Messages */ public String recupNMsg(String ID, String IDdestinataire, int N) { - String Msg = "" ; + StringBuilder Msg = new StringBuilder(); String petit; String grand; int comparaison = ID.compareTo(IDdestinataire); @@ -298,6 +306,7 @@ public class DataBase { throwables.printStackTrace(); } try { + assert stmt != null; rs = stmt.executeQuery(requete); } catch (SQLException throwables) { throwables.printStackTrace(); @@ -308,18 +317,17 @@ public class DataBase { } for(int i = 0 ; i < N; i++){ try { + assert rs != null; 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 ) ; - } + if (IDSource.equals(ID)) Msg.append("Moi (").append(Envoi).append(") : ").append(Message); else { String PseudoSource = getPseudo(IDSource) ; - Msg += ( PseudoSource + " (" + Envoi + ") : " + Message ); + Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message); } - Msg += '\n'; + Msg.append('\n'); } // MSG de la forme : // Source (Date) : Texte @@ -327,7 +335,7 @@ public class DataBase { throwables.printStackTrace(); } } - return Msg ; + return Msg.toString(); } /** @@ -346,11 +354,13 @@ public class DataBase { throwables.printStackTrace(); } try { + assert stmt != null; rs = stmt.executeQuery(requete); } catch (SQLException throwables) { throwables.printStackTrace(); } try { + assert rs != null; if (rs.next()){ Pseudo = rs.getString("Pseudo") ; } @@ -369,7 +379,7 @@ public class DataBase { * @return Les messages d'une plage de donnée [deb,fin] */ public String recupMsg(String ID, String IDdestinataire, int deb , int fin) { - String Msg = "" ; + StringBuilder Msg = new StringBuilder(); String petit; String grand; int comparaison = ID.compareTo(IDdestinataire); @@ -391,6 +401,7 @@ public class DataBase { throwables.printStackTrace(); } try { + assert stmt != null; rs = stmt.executeQuery(requete); } catch (SQLException throwables) { throwables.printStackTrace(); @@ -401,18 +412,19 @@ public class DataBase { } for(int i = 0 ; i < fin; i++){ try { + assert rs != null; if( rs.next()){ String IDSource = rs.getString("Source"); String Envoi = rs.getTimestamp("Envoi").toString(); String Message = rs.getString("Message"); if (i >= deb) { if (IDSource.equals(ID)) { - Msg += ( "Moi (" + Envoi + ") : " + Message ) ; + Msg.append("Moi (").append(Envoi).append(") : ").append(Message); } else { String PseudoSource = getPseudo(IDSource); - Msg += (PseudoSource + " (" + Envoi + ") : " + Message); + Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message); } - Msg += '\n'; + Msg.append('\n'); } } } catch (SQLException throwables) { @@ -420,7 +432,7 @@ public class DataBase { } } - return Msg ; + return Msg.toString(); } /** @@ -439,12 +451,14 @@ public class DataBase { throwables.printStackTrace(); } try { + assert stmt != null; rs = stmt.executeQuery(requete); } catch (SQLException throwables) { throwables.printStackTrace(); } while(true){ try { + assert rs != null; if (!rs.next()) break; } catch (SQLException throwables) { throwables.printStackTrace(); diff --git a/Implementation/chatapp/src/main/java/chatapp/Model/ListUtilisateurs.java b/Implementation/chatapp/src/main/java/chatapp/Model/ListUtilisateurs.java index 8508b3e..cf755af 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Model/ListUtilisateurs.java +++ b/Implementation/chatapp/src/main/java/chatapp/Model/ListUtilisateurs.java @@ -1,32 +1,37 @@ package chatapp.Model; - import java.net.InetAddress; import java.util.ArrayList; +/** + *

+ * Classe representant La liste des utilisateurs actifs, stockée localement + *

+ */ public class ListUtilisateurs { + // On conserve dans cette liste tout les utilisateurs actuellement actifs private ArrayList actifUsers ; + /** + * Constructeur : initialise la liste 'actifUsers' + */ public ListUtilisateurs() { - this.actifUsers = new ArrayList() ; + this.actifUsers = new ArrayList<>() ; } + /** * Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers' - * * @param u on va rajouter cet utilisateur dans la liste */ public void addList(Utilisateur u) { if((verifierUnicite(u.getPseudo()))) { this.actifUsers.add(u); } - - } /** - * Recuperer un utilisateur à partir de son pseudo - * + * Recuperer un utilisateur a partir de son pseudo * @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver */ public Utilisateur getPseudoList(String pseudo) { @@ -39,6 +44,10 @@ public class ListUtilisateurs { return null ; } + /** + * Recuperer un utilisateur a partir de son addresse IP + * @param ip @IP de l'utilisateur que l'on souhaite retrouver + */ public Utilisateur getIPList(InetAddress ip) throws Exception { for(Utilisateur elem: this.actifUsers) { @@ -51,11 +60,10 @@ public class ListUtilisateurs { /** * Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur - * * @param u on va supprimer cet utilisateur dans la liste */ public void supprimerList(Utilisateur u) { - Boolean Sup = false ; + boolean Sup = false ; for(Utilisateur elem: this.actifUsers) { if (elem.equals(u) ) { @@ -70,8 +78,7 @@ public class ListUtilisateurs { } /** - * Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers' - * + * Modifier le pseudo d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers' * @param ancien correspond au pseudo remplacer * @param nouveau correspond au nouveau pseudo */ @@ -80,24 +87,27 @@ public class ListUtilisateurs { { if (ancien.equals( elem.getPseudo() ) ) { this.actifUsers.remove(elem); - elem.setPseudo(nouveau);; + elem.setPseudo(nouveau); this.addList(elem); - } } this.afficherListeUtilisateurs(); } + /** + * Methode permettant de savoir si un utilisateur est contenu dans la liste 'actifUsers' + * @param u on souhait savoir si cette utilisateur appartient a la liste + * @return True si il appartient, false sinon + */ public Boolean appartient(Utilisateur u) { return this.actifUsers.contains(u); } - /** - * Verifie qu'aucun autre utilisateur ne possède le même pseudo - * + * Verifie qu'aucun autre utilisateur ne possede le meme pseudo * @param pseudo on va supprimer cet utilisateur dans la liste + * @return True si aucun utilisateur de la liste possede ce pseudo, false sinon */ public Boolean verifierUnicite(String pseudo) { for(Utilisateur elem: this.actifUsers) @@ -110,20 +120,22 @@ public class ListUtilisateurs { } /** - * Méthode affichant la liste des utilisateurs actifs - * + * Methode affichant la liste des utilisateurs actifs */ - public String afficherListeUtilisateurs() { + public void afficherListeUtilisateurs() { System.out.println ("Liste des utilisateurs actifs : "); - String Utilisateur = "" ; + StringBuilder Utilisateur = new StringBuilder(); for(Utilisateur elem: this.actifUsers) { System.out.println (elem.toString()); - Utilisateur += (elem + "\n"); + Utilisateur.append(elem).append("\n"); } - return Utilisateur; } + /** + * Getter + * @return La liste des utilisateurs actifs + */ public ArrayList getActifUsers(){ return this.actifUsers; } diff --git a/Implementation/chatapp/src/main/java/chatapp/Model/MessageHorodate.java b/Implementation/chatapp/src/main/java/chatapp/Model/MessageHorodate.java index 266c435..fec6bdf 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Model/MessageHorodate.java +++ b/Implementation/chatapp/src/main/java/chatapp/Model/MessageHorodate.java @@ -1,14 +1,14 @@ package chatapp.Model; - +import java.io.Serializable; import java.text.DateFormat; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; -import java.io.Serializable; + /** *

- * Classe representant les messages envoyés en TCP lors d'une session de clavardage + * Classe representant les messages envoyes en TCP lors d'une session de clavardage. + * Un message Horodate est compose d'un destintaire, d'une source , d'un message et d'une date d'envoie. *

*/ public class MessageHorodate implements Serializable { @@ -34,13 +34,17 @@ public class MessageHorodate implements Serializable { this.type = type; } + /** + * Setter: Date d'horodatage + * On modifie le date d'horodatage + */ public void setDate(Date d) { this.setDateHorodatage(d); } /** *

- * permet de creer une representation string du message + * Permet de creer une representation string du message * @return Les differents attributs de la classe sous forme de string *

*/ @@ -57,7 +61,7 @@ public class MessageHorodate implements Serializable { /** *

- * permet de creer une representation string de la date d'horodatage + * Permet de creer une representation string de la date d'horodatage * @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss *

*/ @@ -74,18 +78,10 @@ public class MessageHorodate implements Serializable { *

*/ public static MessageHorodate stringToMessageHorodate(String s) { - - String mots[] = s.split("\n"); + String[] mots = s.split("\n"); Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]); Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]); int type = Integer.parseInt(mots[2].split("::")[1]); - DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - Date date = new Date(); - /*try { - date = format.parse(mots[3].split("::")[1]); - } catch (Exception e) { - e.printStackTrace(); - }*/ String payload = ""; for(int i=4; i< mots.length; i++) { if(mots[i].startsWith("Message::")) { @@ -93,49 +89,84 @@ public class MessageHorodate implements Serializable { } payload += mots[i]+"\n"; } - - MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type); - //mh.setDate(date); - - return mh ; + return new MessageHorodate(destinataire, source, payload, type); } + /** + * Getter: Utilisateur Source + * @return Utilisateur a l'origine du message + */ public Utilisateur getSource() { return source; } + /** + * Setter: Utilisateur Source + * On modifie l'utilisateur source + */ public void setSource(Utilisateur source) { this.source = source; } + /** + * Getter: Utilisateur Destinataire + * @return Utilisateur recevant le message + */ public Utilisateur getDestinataire() { return destinataire; } + /** + * Setter: Utilisateur Destinataire + * On modifie l'utilisateur Destinataire + */ public void setDestinataire(Utilisateur destinataire) { this.destinataire = destinataire; } + /** + * Getter: Message envoye + * @return Le message envoye + */ public String getMessage() { return Message; } + /** + * Setter: Message envoye + * On modifie le message envoye + */ public void setMessage(String message) { Message = message; } + /** + * Getter: 'Type' du message + * @return On recupere le Type du message + */ public int getType() { return type; } - + /** + * Setter: 'Type' du message horodate + * On modifie l'integer 'Type' + */ public void setType(int Type) { this.type = type; } + /** + * Getter: Date d'horodatage + * @return On recupere le date + */ public Date getDateHorodatage() { return dateHorodatage; } + /** + * Setter: Date d'horodatage + * On modifie le date. + */ public void setDateHorodatage(Date dateHorodatage) { this.dateHorodatage = dateHorodatage; } diff --git a/Implementation/chatapp/src/main/java/chatapp/Model/Utilisateur.java b/Implementation/chatapp/src/main/java/chatapp/Model/Utilisateur.java index 1103c33..dabb920 100644 --- a/Implementation/chatapp/src/main/java/chatapp/Model/Utilisateur.java +++ b/Implementation/chatapp/src/main/java/chatapp/Model/Utilisateur.java @@ -4,6 +4,12 @@ package chatapp.Model; import java.net.InetAddress; import java.net.UnknownHostException; +/** + *

+ * Classe representant un Utilisateur + * Un Utilisateur est associe avec un pseudo, un numero de port, une addresse IP ainsi qu'un ID. + *

+ */ public class Utilisateur { private String pseudo ; @@ -11,6 +17,12 @@ public class Utilisateur { private final InetAddress ip ; private final String id ; + /** + * Constructeur : Utilisateur + * @param pseudo Le pseudo associe + * @param port + * @param ip + */ public Utilisateur(String pseudo,Integer port, InetAddress ip ){ this.setPseudo(pseudo) ; this.setPort(port);