using Modele; using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; namespace Persistance { /// /// Classe XMLPersistance qui implémentant IPersistanceManager /// public class XMLPersistance : IPersistanceManager { /// /// Contruit un XMLPersistance avec des strings en parametres /// /// Nom du fichier contenant les Titres de ListeTitre de Manager /// Nom du fichier contenant les Titres de la collection Favoris de ListeCollection de Manager /// Chemin vers les fichiers public XMLPersistance(string fileName = "Projet1.xml", string fileNameFav = "Projet1CollectionFav.xml", string filePath = null) //Ctor XMLPersistance { if(!string.IsNullOrWhiteSpace(filePath)) FilePath = filePath; FileName = fileName; FileNameFav = fileNameFav; } //Outil de mémoire Serializer, s'occupe de la lecture et de l'enregistrement du fichier xml private DataContractSerializer Serializer { get; set; } = new DataContractSerializer(typeof(IEnumerable), //Type de données a persister (collection de titres) new DataContractSerializerSettings() //Permet de preserver les references d'objets , pas de duplication de references { PreserveObjectReferences = true }); //Persistance des titres /// /// String contenant le chemin vers le dossier contenant les fichiers xml, getter et setter public /// string FilePath { get; set; } = Path.Combine(Directory.GetCurrentDirectory(), "..\\..\\xml\\"); /// /// String contenant le nom du fichier a charger pour les Titres de ListeTitre du Manager, getter et setter public /// string FileName { get; set; } /// /// String contenant le chemin complet vers le fichier a charger pour les Titres de ListeTitre du Manager, cree en combinant le Chemin vers le dossier et le Nom du fichier /// string XmlFile => Path.Combine(FilePath, FileName); /// /// Charge les Titres a partir du fichier XML /// /// Un enumerateur prenant en charge une iteration sur une collection de Titre public IEnumerable LoadTitres() { //Verif si le fichier existe, et leve une exception si non if (!File.Exists(XmlFile)) { throw new FileNotFoundException("le fichier xml n'existe pas"); } IEnumerable titres; using (Stream stream = File.OpenRead(XmlFile)) //using utilisé car donnée non manager (implémente IDisposable), car il n'est pas capable de liberer la mémoire sans qu'on lui dise { titres = Serializer.ReadObject(stream) as IEnumerable; //On lui passe le flux et il doit rendre une collection de titres } //Flux qui contient le contenu du fichier xml return titres; //retourne la collection de titres si tout c'est bien passé } /// /// Enregistre les Titres de ListeTitre du Manager dans le fichier XML /// /// Liste des titres a enregistrer dans le fichier public void SaveTitres(IEnumerable titres) { if (!Directory.Exists(FilePath)) { Directory.CreateDirectory(FilePath); //Crée un directory a l'endroit du FilePath } //Est ce que le FilePath existe deja, si non tu le crée using (Stream stream = File.Create(XmlFile)) { Serializer.WriteObject(stream, titres); //Recupere et enregistre les titres passe en paramètres de la méthode } } //Persistance de la collection de favoris /// /// String contenant le nom du fichier xml a charger pour les Titres des Favoris de la ListeCollection de Manager /// string FileNameFav { get; set; } /// /// String contenant le chemin complet vers le fichier xml des Titres favoris, cree en combinant le chemin vers le dossier et le nom du fichier /// string XmlFileFav => Path.Combine(FilePath, FileNameFav); /// /// Charge les Titres Favoris a partir du fichier XML /// /// Un enumerateur prenant en charge une iteration sur une collection de Titre public IEnumerable LoadTitresFavoris() { //Verif si le fichier existe, et leve une exception si non if (!File.Exists(XmlFileFav)) { throw new FileNotFoundException("le fichier xml n'existe pas"); } IEnumerable titres; using (Stream stream = File.OpenRead(XmlFileFav)) //using utilisé car donnée non manager (implémente IDisposable), car il n'est pas capable de liberer la mémoire sans qu'on lui dise { titres = Serializer.ReadObject(stream) as IEnumerable; //On lui passe le flux et il doit rendre une collection de titres } //Flux qui contient le contenu du fichier xml return titres; //retourne la collection de titres si tout c'est bien passé } /// /// Enregistre les Titres Favoris de la ListeCollecion du Manager dans le fichier XML /// /// Liste des Titres de Favoris de ListeCollection public void SaveTitresFavoris(IEnumerable titres) { if (!Directory.Exists(FilePath)) { Directory.CreateDirectory(FilePath); //Crée un directory a l'endroit du FilePath } //Est ce que le FilePath existe deja, si non tu le crée using (Stream stream = File.Create(XmlFileFav)) { Serializer.WriteObject(stream, titres); //Recupere et enregistre les titres passe en paramètres de la méthode } } } }