Debogage GUI
This commit is contained in:
parent
508a1b89e8
commit
558bc8beda
5 changed files with 459 additions and 0 deletions
63
Implementation/src/Model/Historique.java
Normal file
63
Implementation/src/Model/Historique.java
Normal file
|
@ -0,0 +1,63 @@
|
|||
package src.Model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Classe permettant de sauvegarder les échanges entre deux utilisateurs
|
||||
* </p>
|
||||
*/
|
||||
public class Historique {
|
||||
private Utilisateur User1;
|
||||
private Utilisateur User2;
|
||||
// Liste conservant les differents échanges
|
||||
private ArrayList<MessageHorodate> HistoriqueHorodate ;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructeur : un historique sauvegarde les echanges entre
|
||||
* User1 et User2
|
||||
* @param User1 - un utilisateur
|
||||
* @param User2 - un second utilisateur
|
||||
* </p>
|
||||
*/
|
||||
public Historique(Utilisateur User1, Utilisateur User2) {
|
||||
this.User1 = User1;
|
||||
this.User2 = User2;
|
||||
this.HistoriqueHorodate = new ArrayList<MessageHorodate>();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* On ajoute un message échangé dans la liste 'HistoriqueHorodate'
|
||||
*
|
||||
* @param mh - le message horodate échangé
|
||||
* </p>
|
||||
*/
|
||||
public void addMessage(MessageHorodate mh) {
|
||||
this.HistoriqueHorodate.add(mh);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* getter pour recuperer le second utilisateur
|
||||
* </p>
|
||||
*/
|
||||
public Utilisateur getUser2() {
|
||||
return User2;
|
||||
}
|
||||
|
||||
public void afficher10derniers() {
|
||||
System.out.println("Demarrage de l'affichage partiel de l'historique");
|
||||
System.out.println("Il y a actuellement " + HistoriqueHorodate.size() +" elements dans l'historique");
|
||||
int n =10;
|
||||
if(HistoriqueHorodate.size()<=10) {
|
||||
n = HistoriqueHorodate.size();
|
||||
}
|
||||
for(int i = 0; i<n;i++) {
|
||||
String exp = HistoriqueHorodate.get(i).getSource().getPseudo();
|
||||
String payload = HistoriqueHorodate.get(i).getMessage();
|
||||
System.out.println(exp+" : "+payload);
|
||||
}
|
||||
}
|
||||
}
|
125
Implementation/src/Model/ListUtilisateurs.java
Normal file
125
Implementation/src/Model/ListUtilisateurs.java
Normal file
|
@ -0,0 +1,125 @@
|
|||
package src.Model;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ListUtilisateurs {
|
||||
|
||||
private ArrayList<Utilisateur> actifUsers ;
|
||||
|
||||
public ListUtilisateurs() {
|
||||
this.actifUsers = new ArrayList<Utilisateur>() ;
|
||||
}
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
|
||||
*/
|
||||
public Utilisateur getPseudoList(String pseudo) {
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
{
|
||||
if (elem.getPseudo().equals(pseudo) ) {
|
||||
return elem ;
|
||||
}
|
||||
}
|
||||
return null ;
|
||||
}
|
||||
|
||||
public Utilisateur getIPList(InetAddress ip) throws Exception {
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
{
|
||||
if (elem.getIp().equals(ip) ) {
|
||||
return elem ;
|
||||
}
|
||||
}
|
||||
throw new Exception("No such user with this IP address") ;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 ;
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
{
|
||||
if (elem.equals(u) ) {
|
||||
this.actifUsers.remove(elem);
|
||||
Sup = true ;
|
||||
this.afficherListeUtilisateurs();
|
||||
}
|
||||
}
|
||||
if (!Sup) {
|
||||
System.out.println("Tentative de retirer un objet non contenu dans la liste");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'
|
||||
*
|
||||
* @param ancien correspond au pseudo remplacer
|
||||
* @param nouveau correspond au nouveau pseudo
|
||||
*/
|
||||
public void modifierList(String ancien , String nouveau) {
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
{
|
||||
if (ancien.equals( elem.getPseudo() ) ) {
|
||||
this.actifUsers.remove(elem);
|
||||
elem.setPseudo(nouveau);;
|
||||
this.addList(elem);
|
||||
|
||||
}
|
||||
}
|
||||
this.afficherListeUtilisateurs();
|
||||
}
|
||||
|
||||
public Boolean appartient(Utilisateur u) {
|
||||
return this.actifUsers.contains(u);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Verifie qu'aucun autre utilisateur ne possède le même pseudo
|
||||
*
|
||||
* @param u on va supprimer cet utilisateur dans la liste
|
||||
*/
|
||||
public Boolean verifierUnicite(String pseudo) {
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
{
|
||||
if (pseudo.equals( elem.getPseudo() ) ) {
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode affichant la liste des utilisateurs actifs
|
||||
*
|
||||
*/
|
||||
public String afficherListeUtilisateurs() {
|
||||
System.out.println ("Liste des utilisateurs actifs : ");
|
||||
String Utilisateur = "" ;
|
||||
for(Utilisateur elem: this.actifUsers)
|
||||
{
|
||||
System.out.println (elem.toString());
|
||||
Utilisateur += (elem + "\n");
|
||||
}
|
||||
return Utilisateur;
|
||||
}
|
||||
}
|
142
Implementation/src/Model/MessageHorodate.java
Normal file
142
Implementation/src/Model/MessageHorodate.java
Normal file
|
@ -0,0 +1,142 @@
|
|||
package src.Model;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.io.Serializable;
|
||||
/**
|
||||
* <p>
|
||||
* Classe representant les messages envoyés en TCP lors d'une session de clavardage
|
||||
* </p>
|
||||
*/
|
||||
public class MessageHorodate implements Serializable {
|
||||
private Utilisateur destinataire ;
|
||||
private Utilisateur source ;
|
||||
private Date dateHorodatage ;
|
||||
private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion
|
||||
private String Message;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructeur , le message va etre horodate
|
||||
* @param destinataire - Destinataire du message
|
||||
* @param source - Source du message
|
||||
* @param Message - Message envoye
|
||||
* </p>
|
||||
*/
|
||||
public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) {
|
||||
this.setDestinataire(destinataire) ;
|
||||
this.setSource(source) ;
|
||||
this.setMessage(Message) ;
|
||||
this.setDateHorodatage(new Date());
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public void setDate(Date d) {
|
||||
this.setDateHorodatage(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* permet de creer une representation string du message
|
||||
* @return Les differents attributs de la classe sous forme de string
|
||||
* </p>
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
String Msg = "";
|
||||
Msg += ("Destinataire::" + this.getDestinataire() + "\n") ;
|
||||
Msg += ("Source::" + this.getSource()+ "\n") ;
|
||||
Msg += ("Type::"+ this.type+ "\n");
|
||||
Msg += ("Date::" + this.dateToString() + "\n") ;
|
||||
Msg += ("Message::" + this.getMessage() + "\n" );
|
||||
return Msg ;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 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
|
||||
* </p>
|
||||
*/
|
||||
public String dateToString() {
|
||||
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||
return format.format(this.getDateHorodatage());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Permet de re creer un message horodate a partir d'un string
|
||||
* @return un messageHorodate
|
||||
* </p>
|
||||
*/
|
||||
public static MessageHorodate stringToMessageHorodate(String s) {
|
||||
|
||||
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::")) {
|
||||
mots[i]=mots[i].split("::")[1];
|
||||
}
|
||||
payload += mots[i]+"\n";
|
||||
}
|
||||
|
||||
MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type);
|
||||
//mh.setDate(date);
|
||||
|
||||
return mh ;
|
||||
}
|
||||
|
||||
public Utilisateur getSource() {
|
||||
return source;
|
||||
}
|
||||
|
||||
public void setSource(Utilisateur source) {
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
public Utilisateur getDestinataire() {
|
||||
return destinataire;
|
||||
}
|
||||
|
||||
public void setDestinataire(Utilisateur destinataire) {
|
||||
this.destinataire = destinataire;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return Message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
Message = message;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int Type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Date getDateHorodatage() {
|
||||
return dateHorodatage;
|
||||
}
|
||||
|
||||
public void setDateHorodatage(Date dateHorodatage) {
|
||||
this.dateHorodatage = dateHorodatage;
|
||||
}
|
||||
|
||||
}
|
52
Implementation/src/Model/Modification_Pseudo.java
Normal file
52
Implementation/src/Model/Modification_Pseudo.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
package src.Model;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SwingConstants;
|
||||
import src.Controller.ChatApp;
|
||||
|
||||
public class Modification_Pseudo extends JPanel{
|
||||
ChatApp app;
|
||||
public Modification_Pseudo(String name, ChatApp app) {
|
||||
this.app = app ;
|
||||
JLabel Text = new JLabel("Entrez un nouveau nom d'utilisateur!", SwingConstants.CENTER);
|
||||
JTextField pseudofield = new JTextField(2); // Zone d'insertion de texte
|
||||
JButton home = new JButton(new ImageIcon("/Users/auriane/Desktop/ChatApp-AL-NM/Implementation/src/images/Home.png"));
|
||||
//Ajout d'un bouton Valider
|
||||
JButton Valider = new JButton("Valider");
|
||||
this.getRootPane().setDefaultButton(Valider);
|
||||
//Listen to events from the Valider button.
|
||||
Valider.addActionListener(new ActionListener(){
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
String nouveau = pseudofield.getText();
|
||||
try {
|
||||
Boolean resultat = app.modifierPseudo(nouveau);
|
||||
if(resultat) {
|
||||
|
||||
}
|
||||
else {
|
||||
//JOptionPane.showMessageDialog(this, "Echec de modification de pseudo, " + nouveau +" deja pris", JOptionPane.WARNING_MESSAGE);
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
this.add(home);
|
||||
this.add(Text);
|
||||
this.add(BorderLayout.CENTER,pseudofield);
|
||||
this.add(BorderLayout.SOUTH,Valider);
|
||||
|
||||
}
|
||||
}
|
77
Implementation/src/Model/Utilisateur.java
Normal file
77
Implementation/src/Model/Utilisateur.java
Normal file
|
@ -0,0 +1,77 @@
|
|||
package src.Model;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
public class Utilisateur extends Object {
|
||||
|
||||
private String pseudo ;
|
||||
private Integer port;
|
||||
private InetAddress ip ;
|
||||
private String id ;
|
||||
|
||||
public Utilisateur(String pseudo,Integer port, InetAddress ip ){
|
||||
this.setPseudo(pseudo) ;
|
||||
this.setPort(port);
|
||||
this.ip = ip ;
|
||||
this.id = ip.getHostName() ;
|
||||
}
|
||||
|
||||
public String getPseudo() {
|
||||
return pseudo;
|
||||
}
|
||||
|
||||
public void setPseudo(String pseudo) {
|
||||
this.pseudo = pseudo;
|
||||
}
|
||||
|
||||
public Integer getPort() {
|
||||
return port;
|
||||
}
|
||||
|
||||
public void setPort(Integer port) {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public InetAddress getIp() {
|
||||
return ip;
|
||||
}
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
String s = "";
|
||||
s+="pseudo " + this.pseudo + " | ";
|
||||
s+="port " + (this.port).toString() + " | ";
|
||||
s+="ip " + (this.ip).toString() + " | ";
|
||||
s+="id " + (this.id).toString() + " | ";
|
||||
return s;
|
||||
}
|
||||
|
||||
public static Utilisateur stringToUtilisateur(String s) {
|
||||
String name = "";
|
||||
Integer port = 0;
|
||||
String ip = "" ;
|
||||
String id = "";
|
||||
String mots[] = s.split(" ");
|
||||
name=mots[1];
|
||||
port=Integer.parseInt(mots[4]);
|
||||
ip=mots[7];
|
||||
id=mots[10];
|
||||
Utilisateur user = null;
|
||||
try {
|
||||
user = new Utilisateur(name,port,InetAddress.getByName(ip.split("/")[1]));
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
public Boolean equals(Utilisateur u) {
|
||||
return this.getId().equals( u.getId() ) ;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue