/// <summary> /// Vérifie les données d'une bibliothèque. Modifie directement les données via la référence /// </summary> /// <param name="laBibliothèque">La bibliothèque à vérifier</param> public static void VérifierUneBibliothèque(Bibliothèque laBibliothèque) { //Change le nom de la Bilbiothèque si celui-ci n'est pas correct if (String.IsNullOrEmpty(laBibliothèque.Nom) || laBibliothèque.Nom.Length > 16) { laBibliothèque.Nom = "Inconnu"; } //Vérifie si la Bilbiothèque ne contient pas de doublons d'oeuvres for (int i = 0; i < laBibliothèque.LesOeuvres.Count; i++) { List <Oeuvre> desOeuvres = laBibliothèque.LesOeuvres.Where(oeuvre => laBibliothèque[i].Equals(oeuvre)).ToList(); if (desOeuvres.Count > 1) { //Retire les oeuvres dupliquées de la Bilbiothèque for (int j = 0; i < desOeuvres.Count - 1; j++) { laBibliothèque.RetirerOeuvre(desOeuvres[0]); } } } }
/// <summary> /// Vérifie les données et leurs concordances entre elles. Modifie directement les données via les références /// </summary> /// <param name="listePrincipale">La liste principale à vérifier</param> /// <param name="lesBibliothèques">La collection de bibliothèques à vérifier</param> public static void VérifierDonnéesBibliothèques(Bibliothèque listePrincipale, IEnumerable <Bibliothèque> lesBibliothèques) { //Change le nom de la liste principale si celui-ci n'est pas correct if (String.IsNullOrEmpty(listePrincipale.Nom) || listePrincipale.Nom.Length > 16) { listePrincipale.Nom = "Liste Principale"; } //Vérifie si la liste principale ne contient pas de doublons d'oeuvres for (int i = 0; i < listePrincipale.LesOeuvres.Count; i++) { List <Oeuvre> desOeuvres = listePrincipale.LesOeuvres.Where(oeuvre => listePrincipale[i].Equals(oeuvre)).ToList(); if (desOeuvres.Count > 1) { //Retire les oeuvres dupliquées de la liste principale et des bibliothèques for (int j = 0; j < desOeuvres.Count; j++) { lesBibliothèques.ToList().ForEach(biblio => biblio.RetirerOeuvre(desOeuvres[j])); listePrincipale.RetirerOeuvre(desOeuvres[j]); } } } //Vérifie chaques bibliothèques unes par unes lesBibliothèques.ToList().ForEach(biblio => VérifierUneBibliothèque(biblio)); //Vérifie si les bibliothèques n'ont pas le même nom for (int i = 0; i < lesBibliothèques.ToList().Count; i++) { List <Bibliothèque> desBiblios = lesBibliothèques.ToList().Where(biblio => lesBibliothèques.ToList().ElementAt(i).Nom.Equals(biblio.Nom)).ToList(); if (desBiblios.Count > 1) { //Pour les bibliothèques possédants le même nom, sauf la première, étant celle qu'on va considérée comme l'originale for (int k = 1; k < desBiblios.Count; k++) { Bibliothèque biblio = desBiblios[k]; if (biblio.Nom.Contains("Inconnu")) { biblio.Nom = "Inconnu"; } int j = 0; //Change le nom de la bibliothèque pour ajouter un numéro à la fin while (desBiblios.Where(uneBiblio => uneBiblio.Nom.Equals($"{biblio.Nom} {j}")).Count() > 0) { j++; } //Si en ajoutant le numéro la taille est supérieur à 16 on change le nom pour qu'il devienne 'Inconnu' if ($"{biblio.Nom} {j}".Length > 16) { biblio.Nom = "Inconnu"; int v = 0; while (desBiblios.Where(uneBiblio => uneBiblio.Nom.Equals($"{biblio.Nom} {v}")).Count() > 0) { v++; } } biblio.Nom = $"{biblio.Nom} {j}"; } } } foreach (Bibliothèque bibliothèque in lesBibliothèques) { //Vérifie chaques oeuvres de la bibliothèque bibliothèque.LesOeuvres.ToList().ForEach(oeuvre => VérifierUneOeuve(oeuvre)); for (int i = 0; i < bibliothèque.LesOeuvres.Count; i++) { Oeuvre oeuvre = bibliothèque[i]; //Met à jour la bibliothèque par rapport aux oeuvres de la liste principale if (listePrincipale.ContientOeuvre(oeuvre.Nom)) { bibliothèque.RetirerOeuvre(oeuvre.Nom); bibliothèque.AjouterOeuvre(listePrincipale.ObtenirOeuvre(oeuvre.Nom)); } //Met à jour la liste principale par rapport aux oeuvres de la bibliothèque else { //listePrincipale.AjouterOeuvre(oeuvre); int j = 0; //Tant que le nom de l'oeuvre est déjà existant dans la page principale while (!listePrincipale.AjouterOeuvre(oeuvre)) { if ($"{oeuvre.Nom} {j}".Length > 16) { oeuvre.Nom = $"Inconnu {j}"; } else { oeuvre.Nom = $"{oeuvre.Nom} {j}"; } j++; } } } } }
static void Main(string[] args) { WriteLine("Test de la classe Bibliothèque"); StubBibliothèqueDataManager bibliothèqueDataManager = new StubBibliothèqueDataManager(); bibliothèqueDataManager.ToutRetirer(); bibliothèqueDataManager.Ajouter(new Bibliothèque("laBibliothèque", "CheminImageBiblio", new ObservableCollection <Oeuvre>())); Bibliothèque bibliothèque = bibliothèqueDataManager.ObtenirParNom("laBibliothèque"); bibliothèque.AjouterOeuvre(new Autre("unAutre", "CheminImageAutre", DateTime.Today, "unCréateur", new ObservableDictionary <StringVérifié, StringVérifié>(), "Ceci est un synopsis - Autre", "Ceci est un commentaire personnel - Autre")); bibliothèque.AjouterOeuvre(new Film("unFilm", "CheminImageFilm", DateTime.Today, "unRéalisateur", "unStudio", new ObservableDictionary <StringVérifié, StringVérifié>(), "Ceci est un synopsis - Film", "Ceci est un commentaire personnel - Film")); bibliothèque.AjouterOeuvre(new Série("uneSérie", "CheminImageSérie", DateTime.Today, "unRéalisateur", "unStudio", new ObservableDictionary <StringVérifié, StringVérifié>(), "Ceci est un synopsis - Série", "Ceci est un commentaire personnel - Série")); bibliothèque.AjouterOeuvre(new Livre("unLivre", "CheminImageLivre", DateTime.Today, "unAuteur", "unÉditeur", new ObservableDictionary <StringVérifié, StringVérifié>(), "Ceci est un synopsis - Livre", "Ceci est un commentaire personnel - Livre")); bibliothèque.AjouterOeuvre(new Animé("unAnimé", "CheminImageAnimé", DateTime.Today, "unAuteur", "unStudio", new ObservableDictionary <StringVérifié, StringVérifié>(), "Ceci est un synopsis - Animé", "Ceci est un commentaire personnel - Animé")); bibliothèque.AjouterOeuvre(new Scan("unScan", "CheminImageScan", DateTime.Today, "unAuteur", "unÉditeur", new ObservableDictionary <StringVérifié, StringVérifié>(), "Ceci est un synopsis - Scan", "Ceci est un commentaire personnel - Scan")); WriteLine($"Informations de la Bibliothèque :\nNom : {bibliothèqueDataManager.ObtenirParNom("laBibliothèque").Nom}\nImage : {bibliothèque.Image}\n"); WriteLine("\n\nTappez sur entrez pour continuer et voir ses oeuvres"); ReadLine(); Clear(); foreach (Oeuvre oeuvre in bibliothèqueDataManager.ObtenirParNom("laBibliothèque").LesOeuvres) { WriteLine("Ses oeuvres :\n"); WriteLine(oeuvre); WriteLine("\n\nTappez sur entrez pour continuer"); ReadLine(); Clear(); } WriteLine("On retire toutes ses oeuvres sauf la série\n"); bibliothèque.RetirerOeuvre("unAutre"); bibliothèque.RetirerOeuvre(bibliothèqueDataManager.ObtenirParNom("laBibliothèque").ObtenirOeuvre("unFilm")); bibliothèque.RetirerOeuvre("unLivre"); bibliothèque.RetirerOeuvre("unAnimé"); bibliothèque.RetirerOeuvre("unScan"); WriteLine($"unAutre présente ? : {bibliothèqueDataManager.ObtenirParNom("laBibliothèque").ContientOeuvre("unAutre")} (Doit être False)"); WriteLine($"unFilm présente ? : {bibliothèqueDataManager.ObtenirParNom("laBibliothèque").ContientOeuvre("unFilm")} (Doit être False)"); WriteLine($"unLivre présente ? : {bibliothèqueDataManager.ObtenirParNom("laBibliothèque").ContientOeuvre("unLivre")} (Doit être False)"); WriteLine($"unAnimé présente ? : {bibliothèque.ContientOeuvre(bibliothèque.ObtenirOeuvre("unAnimé"))} (Doit être False)"); WriteLine($"unScan présente ? : {bibliothèque.ContientOeuvre(bibliothèque.ObtenirOeuvre("unScan"))} (Doit être False)"); WriteLine($"uneSérie présente ? : {bibliothèque.ContientOeuvre("uneSérie")} (Doit être True)"); }