Implementation de la bdd

This commit is contained in:
Nabil Moukhlis 2020-12-28 18:10:11 +01:00
parent a3ca07fe22
commit 9bcef6bfb4
16 changed files with 180 additions and 43 deletions

View file

@ -42,7 +42,7 @@
<Font name="OCR A Extended" size="27.0" />
</font>
</Button>
<TextField fx:id="pseudonyme" onAction="#nouveauPseudo" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Ancien :">
<font>
<Font size="19.0" />

View file

@ -1,39 +1,39 @@
chatapp/View/DemarrerSession.java
chatapp.View.DemarrerSession
chatapp/View/FenetreSession.java
chatapp.View.FenetreSession
chatapp.View.FenetreSession$1
chatapp/Protocol/RunnerEcouteUDP.java
chatapp.Protocol.RunnerEcouteUDP
chatapp/Model/Utilisateur.java
chatapp.Model.Utilisateur
chatapp/View/ConnexionScreen.java
chatapp.View.ConnexionScreen
chatapp/View/ChangementPseudo.java
chatapp.View.ChangementPseudo
chatapp/Controller/ChatApp.java
chatapp.Controller.ChatApp
chatapp/View/View_Utilisateurs.java
chatapp.View.View_Utilisateurs
chatapp/Model/MessageHorodate.java
chatapp.Model.MessageHorodate
chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.RunnerEcouteTCP
chatapp/Model/ListUtilisateurs.java
chatapp.Model.ListUtilisateurs
chatapp/View/View_Menu.java
chatapp.View.View_Menu
chatapp/Launcher.java
chatapp.Launcher
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/Model/MessageHorodate.java
chatapp.Model.MessageHorodate
chatapp/View/Clavardage.java
chatapp.View.Clavardage
chatapp.View.Clavardage$1
chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage
chatapp/Protocol/UDPEchange.java
chatapp.Protocol.RunnerUDP
chatapp.Protocol.UDPEchange
chatapp/Model/DataBase.java
chatapp.Model.DataBase
chatapp/Protocol/RunnerEcouteUDP.java
chatapp.Protocol.RunnerEcouteUDP
chatapp/View/FenetreSession.java
chatapp.View.FenetreSession
chatapp.View.FenetreSession$1
chatapp/Main.java
chatapp.Main
chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage
chatapp/View/ChangementPseudo.java
chatapp.View.ChangementPseudo
chatapp/Launcher.java
chatapp.Launcher

View file

@ -36,7 +36,7 @@ public class ChatApp implements PropertyChangeListener {
}
/**
* Constructeur de l'application de chat
* <p>Constructeur de l'application de chat</p>
*
* @param pseudo Pseudo de l'utilisateur
* @param port Port de communication
@ -54,6 +54,13 @@ public class ChatApp implements PropertyChangeListener {
this.connecte=false;
}
/**
* <p>Methode permettant de créer qu'une seule instance de chatapp</p>
* @param pseudo le pseudonyme que l'on souhaite donner à l'utilisateur
* @param port le port auquel on souhaite receptionner les requêtees UDP
* @param main le stage de l'interface graphique qui crée l'instance
* @return une instance de chatapp
*/
public static synchronized ChatApp getInstance(String pseudo, Integer port, Application main){
if (chatapp == null) {
chatapp = new ChatApp(pseudo, port, main);
@ -61,6 +68,10 @@ public class ChatApp implements PropertyChangeListener {
return chatapp;
}
/**
*
* @return recupere l'instance de chatapp qui a ete creee au prealable
*/
public static ChatApp getInstance(){
return chatapp;
}
@ -75,8 +86,8 @@ public class ChatApp implements PropertyChangeListener {
/**
* Modification du pseudo de l'utilisateur
* Envoie en broadcast ses informations utilisateurs et son nouveau pseudo
* <p>Modification du pseudo de l'utilisateur
* Envoie en broadcast ses informations utilisateurs et son nouveau pseudo</p>
*
* @param nouveau correspond au nouveau pseudo
* @return False si modiferPseudo a echoue, True sinon
@ -115,8 +126,8 @@ public class ChatApp implements PropertyChangeListener {
/**
* Methode appelee lors de la connexion d'un nouvel utilisateur.
* Il va prevenir les utilisateurs du reseau de son arrivee.
* <p>Methode appelee lors de la connexion d'un nouvel utilisateur.
* Il va prevenir les utilisateurs du reseau de son arrivee.</p>
* @return False si Connexion a echoue, True sinon
*/
public Boolean connexion() throws IOException {
@ -140,6 +151,13 @@ public class ChatApp implements PropertyChangeListener {
}
}
/**
* <p>Methode appelee lors de la connexion de l'utilisateur, va prevenir les autres
* utlisateurs du reseau de l'arrivee de l'utilisateur sur celui-ci</p>
* @param pseudo le pseudonyme avec lequel l'utilisateur souhaite se connecter
* @return False si Connexion a echoue, True sinon
* @throws IOException
*/
public Boolean connexion(String pseudo) throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
this.me.setPseudo(pseudo);
@ -165,23 +183,35 @@ public class ChatApp implements PropertyChangeListener {
}
}
/**
* <p>Lance un thread pour ecouter les requetes TCP
* Informe le pcs que chatapp ecoute les notifications qu'il envoie</p>
*/
public void activerEcouteTCP(){
this.runnerEcouteTCP = new RunnerEcouteTCP(this);
this.runnerEcouteTCP.addPropertyChangeListener(this);
}
/**
* <p>Demarre une session de clavardage avec l'utilisateur dont le pseudo est entre en parametre</p>
* @param pseudo le pseudo de l'utilisateur avec lequel on souhaite communiquer
*/
public void demarrerSession(String pseudo){
Utilisateur u2 = this.actifUsers.getPseudoList(pseudo);
SessionClavardage session = new SessionClavardage(u2,this);
runnerEcouteTCP.addSession(session);
}
/**
* <p>Lance le thread pour receptionner les requetes UDP</p>
*/
public void activerEcouteUDP(){
this.runnerEcouteUDP = new RunnerEcouteUDP(this);
this.runnerEcouteUDP.start();
}
/**
* Methode appelee lors de la deconnexion de l'utilisateur.
* Il va prevenir les utilisateurs du reseau de son depart.
* <p>Methode appelee lors de la deconnexion de l'utilisateur.
* Il va prevenir les utilisateurs du reseau de son depart.</p>
*
*/
public void deconnexion() throws IOException {
@ -249,7 +279,10 @@ public class ChatApp implements PropertyChangeListener {
}*/
/**
* <p>Handler des differents evenements que chatapp ecoute</p>
* @param evt l'evenement qui a ete indique par le pcs
*/
@Override
public void propertyChange(PropertyChangeEvent evt) {
switch (evt.getPropertyName()){
@ -260,8 +293,17 @@ public class ChatApp implements PropertyChangeListener {
}
}
/**
* <p>Permet de recuperer stage de l'interface graphique qui a cree l'instance</p>
* @return le stage de l'interface graphique qui a cree l'instance
*/
public Application getMain() {
return main;
}
/**
* <p>Permet de recuperer la base de donnee associee</p>
* @return la base de donnee associee
*/
public DataBase getDb(){return this.db;}
}

View file

@ -4,7 +4,9 @@ import chatapp.Controller.ChatApp;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.stage.Screen;
import javafx.stage.Stage;
import java.io.IOException;
@ -12,8 +14,14 @@ import java.io.IOException;
public class Main extends Application {
ChatApp chatapp;
/**
* Permet de lancer la fenetre principale de l'application
* @param primaryStage notre fenetre principale
* @throws Exception
*/
@Override
public void start(Stage primaryStage) throws Exception {
Rectangle2D tailleEcran = Screen.getPrimary().getBounds();
this.chatapp = ChatApp.getInstance("Null",1234,this);
FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/ConnexionScreen.fxml"));
Scene scene1 = new Scene(fichier.load(),600,400);
@ -21,6 +29,10 @@ public class Main extends Application {
primaryStage.setTitle("ChatApp");
primaryStage.setMinWidth(600);
primaryStage.setMinHeight(400);
//primaryStage.setMaxWidth(600);
//primaryStage.setMaxHeight(400);
/*primaryStage.setMaxWidth(tailleEcran.getWidth());
primaryStage.setMaxHeight(tailleEcran.getHeight());*/
primaryStage.show();
primaryStage.centerOnScreen();
chatapp.activerEcouteTCP();
@ -28,6 +40,10 @@ public class Main extends Application {
}
/**
* <p> Handler associe a la fermeture de l'application</p>
* @throws Exception
*/
@Override
public void stop() throws Exception {
if(chatapp.isConnecte()){

View file

@ -54,7 +54,7 @@ public class DataBase {
// 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("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234");
//this.connection = DriverManager.getConnection(this.DBurl,login,pswd);
System.out.println("Connexion Etablie");
} catch (SQLException e) {

View file

@ -30,7 +30,10 @@ public class RunnerEcouteTCP extends Thread {
this.start();
}
/**
* Permet aux classes qui appelle cette methode de connecter un PropertyChangeListener au PropertyChangeSupport
* @param pcl le propertyChangeListener qui va ecouter les evenements du propertyChangeSupport associe
*/
public void addPropertyChangeListener(PropertyChangeListener pcl) {
this.pcs.addPropertyChangeListener("NouvelleSession",pcl);
}
@ -70,7 +73,7 @@ public class RunnerEcouteTCP extends Thread {
}
/**
* Methode permettant de recupere la premiere session de clavardage dans 'ListeSessions'
* Methode permettant de recupere la derniere session de clavardage creee dans 'ListeSessions'
* @return Premiere Session Active
*/
public SessionClavardage getSessionClavardage() {

View file

@ -91,7 +91,7 @@ public class SessionClavardage extends Thread {
MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),msg,1);
try {
getOut().writeObject(msgh.toString());
app.getDb().ajoutHistorique(app.getMe().getId(), u2.getId(),msg);
app.getDb().ajoutHistorique(u2.getId(), app.getMe().getId(),msg);
} catch (IOException e) {
e.printStackTrace();
}

View file

@ -65,7 +65,12 @@ public class UDPEchange {
}
/**<p>
* Permet de recuperer l'adresse de l'hote sur le reseau au format IPv4.
* Si plusieurs adresses sont disponibles (plusieurs cartes réseaux), choisit la premiere trouvee
* </p>
* @return l'adresse IP au format IPv4
*/
public static InetAddress getCurrentIp() {
try {
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface

View file

@ -43,7 +43,11 @@ public class ChangementPseudo {
}
@FXML
/**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
*/
void retourMenu(ActionEvent event) {
System.out.println("Retour au menu principal");
Stage stage = (Stage) MenuButton.getScene().getWindow();
@ -59,6 +63,9 @@ public class ChangementPseudo {
}
@FXML
/**
* <p> Handler permettant de lancer la verrification de l'unicite du ppseudo sur pression du validtionButton</p>
*/
void validerPseudo(ActionEvent event) {
boolean pseudoOK = false;
try {
@ -79,6 +86,9 @@ public class ChangementPseudo {
}
}
/**
* <p> Initialization de la classe ChangementPseudo et permet d'initialiser les parametres</p>
*/
@FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() {
chatApp = ChatApp.getInstance();

View file

@ -50,6 +50,9 @@ public class Clavardage implements Initializable, PropertyChangeListener {
private Integer Indice = 0 ;
@FXML
/**
* <p>Handler gerant l'envoi du message contenu dans le TextField AEnvoyer et sur pression du bouton EnvoyerButton</p>
*/
void envoyerMessage(ActionEvent event) {
String msg = AEnvoyer.getText();
AEnvoyer.clear();
@ -58,14 +61,16 @@ public class Clavardage implements Initializable, PropertyChangeListener {
Date d = new Date();
msg = "Moi (" + d.toString() + ") : " + msg + "\n";
ChatText.appendText(msg);
Indice++;
}
}
@FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() {
}
/**
* Setter
* @param session la session a associer a la classe
*/
public void setSession(SessionClavardage session) {
this.session = session;
@ -75,6 +80,11 @@ public class Clavardage implements Initializable, PropertyChangeListener {
this.pseudonyme1.setText(u2.getPseudo());
}
/**
* <p>Handler des differents evenements auxquels s'est abonne le PropertyChangeListener
* La classe est informee lorsque la session recoit un message ou lorsque la session se termine </p>
* @param evt l'evenement informe par le pcs
*/
@Override
public void propertyChange(PropertyChangeEvent evt) {
switch (evt.getPropertyName()){
@ -104,15 +114,27 @@ public class Clavardage implements Initializable, PropertyChangeListener {
return session;
}
/**
* Permet d'initialiser les differents parametres de la classe
* @param location
* @param resources
*/
@Override
public void initialize(URL location, ResourceBundle resources) {
EnvoyerButton.setDefaultButton(true);
this.ChatText.setEditable(false);
}
/**
* <p> Permet de recepurer plus de messages stoces dans la database en appuyant sur le bouton plusButton</p>
* @param actionEvent
*/
public void ajouterMessagesHistorique(ActionEvent actionEvent) {
String historique = this.session.getApp().getDb().recupMsg(session.getApp().getMe().getId(),this.u2.getId(), Indice , Indice + 5);
Indice +=5;
//String auxiliaire = ChatText.getText();
//ChatText.clear();
ChatText.insertText(0,historique);
//ChatText.insertText(0,auxiliaire);
Indice +=5;
}
}

View file

@ -34,6 +34,11 @@ public class ConnexionScreen {
}
/**
* <p>Handler permettant de lancer la connexion avec le pseudonyme contenu dans le TextField pseudonyme en appuyant sur le connexionButton
* </p>
* @param actionEvent
*/
public void connexion(ActionEvent actionEvent) {
Boolean connexion = false;
try {

View file

@ -36,11 +36,18 @@ public class DemarrerSession {
private Button MenuButton; // Value injected by FXMLLoader
private ChatApp chatApp;
/**
* <p> Handler permettant de demarrer une session de clavardage avec le contact choisi dans la comboBox choixContaact</p>
* @param event
*/
@FXML
void demarrerSessionAvec(ActionEvent event) {
chatApp.demarrerSession(choixContact.getValue());
}
/**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
*/
@FXML
void retourMenu(ActionEvent event) {
Stage stage = (Stage) MenuButton.getScene().getWindow();
@ -55,6 +62,9 @@ public class DemarrerSession {
stage.show();
}
/**
* <p> Initialization de la classe ChangementPseudo et permet d'initialiser les parametres</p>
*/
@FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() {
this.chatApp = ChatApp.getInstance();

View file

@ -13,6 +13,9 @@ import java.io.IOException;
public class FenetreSession extends Stage {
SessionClavardage session;
/**
* <p> Permet l'ouverture de la fenetre associee a la session de clavardage</p>
*/
public FenetreSession(SessionClavardage session) {
FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/View_Clavardage.fxml"));
try{
@ -27,6 +30,8 @@ public class FenetreSession extends Stage {
this.setTitle("Session avec "+session.getU2().getPseudo());
this.setMinWidth(600);
this.setMinHeight(400);
//this.setMaxWidth(600);
//this.setMaxHeight(400);
this.show();
this.centerOnScreen();
this.setOnCloseRequest(new EventHandler<WindowEvent>() {

View file

@ -34,6 +34,10 @@ public class View_Menu {
this.pseudonyme.setText(this.chatapp.getMe().getPseudo());
}
/**
* <p>Handler permettant d'aller a la scene View_Utilisateurs pour afficher la liste des utilisateurs actifs</p>
* @param actionEvent
*/
public void afficherUtilsActifs(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow();
Parent root = null;
@ -47,6 +51,10 @@ public class View_Menu {
stage.show();
}
/**
* <p>Handler permettant d'aller a la scene Demarrer_Session pour choisir un utilisateur avec qui clavarder
* @param actionEvent
*/
public void demarrerSession(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow();
Parent root = null;
@ -60,6 +68,10 @@ public class View_Menu {
stage.show();
}
/**
* <p>Handler permettant d'aller a la scene View_ChangementPseudo pour changer son pseudonyme
* @param actionEvent
*/
public void changerPseudo(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow();
Parent root = null;
@ -73,6 +85,10 @@ public class View_Menu {
stage.show();
}
/**
* <p>Handler permettant de se deconnecter et fermer l'application
* @param actionEvent
*/
public void deconnexion(ActionEvent actionEvent) {
try {
chatapp.deconnexion();

View file

@ -39,6 +39,9 @@ public class View_Utilisateurs {
}
/**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
*/
public void retourMenu(ActionEvent actionEvent) {
Stage stage = (Stage) MenuButton.getScene().getWindow();
Parent root = null;

View file

@ -42,7 +42,7 @@
<Font name="OCR A Extended" size="27.0" />
</font>
</Button>
<TextField fx:id="pseudonyme" onAction="#nouveauPseudo" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Ancien :">
<font>
<Font size="19.0" />