You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
6.8 KiB
184 lines
6.8 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Runtime.Serialization;
|
|
using System.Text;
|
|
|
|
namespace notre_bibliotheque
|
|
{
|
|
/// <summary>
|
|
/// cette classe va permettre à l'utilisateur de se connecter pour avoir acces à des fonctions suplémentaires
|
|
/// elle implémente l'interface Item ainsi que IEquatable<Compte> (pour le protocole d'égalité)
|
|
/// </summary>
|
|
|
|
[DataContract]
|
|
public class Compte : Item, IEquatable<Compte>
|
|
{
|
|
//un compte a un identifiant de type string
|
|
[DataMember]
|
|
public string Identifiant { get; private set; }
|
|
|
|
//un compte a un mot de passe de type string
|
|
private string motDePasse;
|
|
|
|
|
|
[DataMember]
|
|
public string MotDePasse {
|
|
get
|
|
{
|
|
return motDePasse;
|
|
}
|
|
set
|
|
{
|
|
motDePasse = value;
|
|
}
|
|
}
|
|
|
|
//la propriété EstAdmin de type bool indique si l'utilisateur à le droit d'accès au mode administrateur
|
|
[DataMember]
|
|
public bool EstAdmin { get; private set; }
|
|
|
|
//un compte a une collection LesLangagesFavoris de type IList<Langage> ; cette propriété regroupe
|
|
//tous les langages que l'utilisateur a ajouté en tant que favoris
|
|
[DataMember]
|
|
public IList<Langage> LesLangagesFavoris { get; private set; }
|
|
|
|
//un compte a une collection HistoriqueDuCompte de type IList<Langage> ; cette propriété regroupe
|
|
//tous les langages que l'utilisateur a consulté
|
|
[DataMember]
|
|
public IList<Langage> HistoriqueDuCompte { get; private set; }
|
|
|
|
//cette classe a deux constructeurs
|
|
|
|
/// <summary>
|
|
/// ce premier constructeur prend en parametre un identifiant et un mot de passe de type string,
|
|
/// ainsi qu'un bool pour indiquer si le compte à le droit d'acces au mode administrateur
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="mp"></param>
|
|
/// <param name="admin"></param>
|
|
public Compte(string id, string mp, bool admin)
|
|
{
|
|
Identifiant = id;
|
|
motDePasse = mp;
|
|
EstAdmin = admin;
|
|
LesLangagesFavoris = new List<Langage>();
|
|
HistoriqueDuCompte = new List<Langage>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// ce second constructeur prend en parametre seulement un identifiant et un mot de passe de type string
|
|
/// ce constructeur sert à creer un compte sans specifier l'acces au mode amdinistrateur ; cette propriété sera
|
|
/// alors set à false (ce constructeur a surtout été utile pour les tests)
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="mp"></param>
|
|
public Compte(string id, string mp): this(id, mp, false){}
|
|
|
|
/// <summary>
|
|
/// la methode ToString permet d'afficher les différentes informations d'un compte
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override string ToString()
|
|
{
|
|
string admin;
|
|
if (EstAdmin == false)
|
|
{
|
|
admin = "ce compte n'a pas l'acces au mode administrateur";
|
|
}
|
|
else
|
|
{
|
|
admin = "ce compte a l'acces au mode administrateur";
|
|
}
|
|
|
|
return $"Identifiant = {Identifiant} \n Mot de passe = {MotDePasse} \n Mode Administrateur = {admin}";
|
|
}
|
|
|
|
/// <summary>
|
|
/// ces trois methodes servent a redéfinir protocole d'égalité
|
|
/// deux comptes sont les mêmes si ils ont le même identifiant et mot de passe
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
/// <returns></returns>
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (obj == this) return true;
|
|
if (obj == null) return false;
|
|
if (obj.GetType() != this.GetType()) return false;
|
|
return Equals(obj as Compte);
|
|
}
|
|
|
|
public bool Equals(Compte other)
|
|
{
|
|
return (other.Identifiant == this.Identifiant) && (other.MotDePasse == this.MotDePasse);
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return ((Identifiant.Length + MotDePasse.Length) * HistoriqueDuCompte.Count) / 3 ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// cette méthode sert à ajouter un langage à une liste de langage
|
|
/// elle va être utilisé par les methodes AjouterUnLangageALHistorique et AjouterUnLangageAuxFavoirs
|
|
/// elle prend alors en parametre la liste de Langage correspondante et le Langage à ajouter
|
|
/// </summary>
|
|
/// <param name="tmp"></param>
|
|
/// <param name="l"></param>
|
|
private IList<Langage> AjouterUnLangageAUneListeDeLangages(IList<Langage> tmp ,Langage l)
|
|
{
|
|
try
|
|
{
|
|
tmp.Add(l);
|
|
}
|
|
catch (NotSupportedException)
|
|
{
|
|
tmp = new List<Langage>(tmp);
|
|
tmp.Add(l);
|
|
}
|
|
return tmp;
|
|
}
|
|
|
|
private IList<Langage> RetirerUnLangageAUneListeDeLangage(IList<Langage> tmp, Langage l)
|
|
{
|
|
try
|
|
{
|
|
tmp.Remove(l);
|
|
}
|
|
catch(NotSupportedException)
|
|
{
|
|
tmp = new List<Langage>(tmp);
|
|
tmp.Remove(l);
|
|
}
|
|
return tmp;
|
|
}
|
|
|
|
/// <summary>
|
|
/// cette méthode sert à ajouter un langage à l'historique du compte
|
|
/// elle prend un langage en parametre, et appelle la methode AjouterUnLangageAUneListeDeLangages en lui donnant
|
|
/// la liste HistoriqueDuCompte ainsi que le langage à ajouter à la liste
|
|
/// </summary>
|
|
/// <param name="l"></param>
|
|
public void AjouterUnLangageALHistorique(Langage l)
|
|
{
|
|
HistoriqueDuCompte = AjouterUnLangageAUneListeDeLangages(HistoriqueDuCompte, l);
|
|
}
|
|
|
|
/// <summary>
|
|
/// cette méthode sert à ajouter un langage aux favoris du compte
|
|
/// elle prend un langage en parametre, et appelle la methode AjouterUnLangageAUneListeDeLangages en lui donnant
|
|
/// la liste LesLangagesFavoris ainsi que le langage à ajouter à la liste
|
|
/// </summary>
|
|
/// <param name="l"></param>
|
|
public void AjouterUnLangageAuxFavoirs(Langage l)
|
|
{
|
|
LesLangagesFavoris = AjouterUnLangageAUneListeDeLangages(LesLangagesFavoris, l);
|
|
}
|
|
|
|
public void RetirerUnLangageDesFavoris(Langage l)
|
|
{
|
|
LesLangagesFavoris = RetirerUnLangageAUneListeDeLangage(LesLangagesFavoris, l);
|
|
}
|
|
}
|
|
}
|