using Modèle; using Persistance; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Business { /// /// Class Manager qui gère les requins, les requins ajoutés, les requins modifiés et les fun facts /// public class Manager { public ObservableCollection Requins { get; private set; } //ObservableCollection les requins qui ont déjà été validés public ObservableCollection RequinsEdit { get; private set; } //ObservableCollection les requins qui ont été modifiés par des utilisateurs et qui n'ont pas encore été validés public ObservableCollection RequinsAdd { get; private set; } //ObservableCollection les requins qui ont été ajoutés par des utilisateurs et qui n'ont pas encore été validés public Requin SelectedRequin { get; set; } //Requin actuellement utilisé dans l'application public List FunFacts { get; private set; } = new List(); //List la liste des fun facts /// /// DéPENDANCE /// public IPersistanceManager Pers { get; set; } //IPersistanceManager ce qui permet de gérer la persistance de l'applcation /// /// constructeur avec INJECTION DE LA DéPENDANCE /// public Manager(IPersistanceManager pers) { Requins = new ObservableCollection(); RequinsEdit = new ObservableCollection(); RequinsAdd = new ObservableCollection(); Pers = pers; } /// /// Méthode LoadRequins de la classe Manager qui permet de remplir les listes de requins grâce à l'IPersistanceManager /// public void LoadRequins() { var data = Pers.LoadRequins(); Requins.Clear(); foreach(var r in data.reqs) { Requins.Add(r); } RequinsAdd.Clear(); foreach(var rA in data.reqsAdd) { RequinsAdd.Add(rA); } RequinsEdit.Clear(); foreach(var rE in data.reqsEdit) { RequinsEdit.Add(rE); } } /// /// Méthode SaveRequins de la classe Manager qui permet de sauvegarder les listes de requins grâce à l'IPersistanceManager /// public void SaveRequins() { List req = new List(); req.AddRange(Requins); List edit = new List(); edit.AddRange(RequinsEdit); List add = new List(); add.AddRange(RequinsAdd); Pers.SaveRequins(req, add, edit); } /// /// Méthode AjouterRequin de la classe Manager qui permet d'ajouter un requin dans la liste des requins /// /// Requin qui va être ajouté dans la liste /// Booléen : true si il a été ajouté, false sinon public bool AjouterRequin(Requin req) { Requin test = Requins.SingleOrDefault(r => r.Equals(req)); if (Requins.Contains(req) && test!=null){ return false; } Requins.Add(req); return true; } /// /// Méthode SupprimerRequin de la classe Manager qui permet de supprimer un requin de la liste des requins /// /// Requin qui va être supprimé dans la liste /// Booléen : true si il a été supprimé, false sinon public bool SupprimerRequin(Requin req) { Requin test = Requins.SingleOrDefault(r => r.Equals(req)); if (!Requins.Contains(req) || test == null) { return false; } Requins.Remove(req); return true; } /// /// Méthode GetRequin de la classe Manager qui permet de récupérer un requin de la liste des requins /// /// Requin que l'on cherche dans dans la liste /// Requin trouvé public Requin GetRequin(Requin req) { return Requins.SingleOrDefault(r => r.Equals(req)); } /// /// Méthode ModifieRequin de la classe Manager qui permet de modifier un ancien requin de la liste des requins à partir d'un nouveau /// /// Requin l'ancien requin dans la liste des requins /// Requin le nouveau requin /// Booléen : true si il a été modifié, false sinon public bool ModifieRequin(Requin oldR, Requin newR) { if (!oldR.Equals(newR)) { return false; } Requins.Remove(oldR); Requins.Add(newR); return true; } /// /// Méthode AjouterRequinEdit de la classe Manager qui permet d'ajouter un requin dans la liste des requins modifiés /// /// Requin qui va être ajouté dans la liste /// Booléen : true si il a été ajouté, false sinon public bool AjouterRequinEdit(Requin req) { Requin test = RequinsEdit.SingleOrDefault(r => r.Equals(req)); if (RequinsEdit.Contains(req) && test != null) { return false; } RequinsEdit.Add(req); return true; } /// /// Méthode SupprimerRequinEdit de la classe Manager qui permet de supprimer un requin de la liste des requins modifiés /// /// Requin qui va être supprimé dans la liste /// Booléen : true si il a été supprimé, false sinon public bool SupprimerRequinEdit(Requin req) { Requin test = RequinsEdit.SingleOrDefault(r => r.Equals(req)); if (!RequinsEdit.Contains(req) || test == null) { return false; } RequinsEdit.Remove(req); return true; } /// /// Méthode AjouterRequinAdd de la classe Manager qui permet d'ajouter un requin dans la liste des requins ajoutés /// /// Requin qui va être ajouté dans la liste /// Booléen : true si il a été ajouté, false sinon public bool AjouterRequinAdd(Requin req) { Requin test = RequinsAdd.SingleOrDefault(r => r.Equals(req)); if (RequinsAdd.Contains(req) && test != null) { return false; } RequinsAdd.Add(req); return true; } /// /// Méthode SupprimerRequinAdd de la classe Manager qui permet de supprimer un requin de la liste des requins ajoutés /// /// Requin qui va être supprimé dans la liste /// Booléen : true si il a été supprimé, false sinon public bool SupprimerRequinAdd(Requin req) { Requin test = RequinsAdd.SingleOrDefault(r => r.Equals(req)); if (!RequinsAdd.Contains(req) || test == null) { return false; } RequinsAdd.Remove(req); return true; } /// /// Méthode GetRequinEdit de la classe Manager qui permet de récupérer un requin de la liste des requins modifiés /// /// Requin que l'on cherche dans dans la liste /// Requin trouvé public Requin GetRequinEdit(Requin req) { return RequinsEdit.SingleOrDefault(r => r.Equals(req)); } /// /// Méthode GetRequinAdd de la classe Manager qui permet de récupérer un requin de la liste des requins ajoutés /// /// Requin que l'on cherche dans dans la liste /// Requin trouvé public Requin GetRequinAdd(Requin req) { return RequinsAdd.SingleOrDefault(r => r.Equals(req)); } /// /// Méthode RechercherRequins qui permet de rechercher des requins dans une ObservableCollection en fonction de leurs zones et d'un motif /// /// ObservableCollection dans laquelle on fait la recherche /// string sur lequel on fait la recherche /// Zone? sur laquelle on fait la recherche /// List contenant tous les requins trouvés en fonction du motif et de la zone public List RechercherRequins(ObservableCollection lRech, Nullable zone, string motif) { List nvReq = new List(); int test = 0; if (!string.IsNullOrWhiteSpace(motif)) { foreach (Requin req in lRech) { if (zone == null) { if (req.Nom.Contains(motif) || req.NomSci.Contains(motif)) { nvReq.Add(req); } } else { foreach (Zone z in req.Repartition) { if ((req.Nom.Contains(motif) || req.NomSci.Contains(motif)) && zone == z) { test++; } } if (test > 0) { nvReq.Add(req); } } test = 0; } } return nvReq; } /// /// Méthode vérifierRequin qui permet de vérifiersi les strings que l'on donnerait au constructeur de requin son vides /// /// Booléen : true si il n'y en a pas de vide, false sinon public bool verifierRequin(String nom, String nomSci, String description, String photo, String video, String photoCarte) { if (String.IsNullOrWhiteSpace(nom) || String.IsNullOrWhiteSpace(nomSci) || String.IsNullOrWhiteSpace(description) || String.IsNullOrWhiteSpace(photo) || String.IsNullOrWhiteSpace(video) || String.IsNullOrWhiteSpace(photoCarte)) { return false; } return true; } /// /// Méthode LoadFunFacts de la classe Manager qui permet de charger la liste de fun facts grâce à l'IPersistanceManager /// public void LoadFunFacts() { FunFacts.Clear(); foreach(String fun in Pers.LoadFunFacts()) { FunFacts.Add(fun); } } /// /// Méthode LoadFunFacts de la classe Manager qui permet de sauvegarder la liste de fun facts grâce à l'IPersistanceManager /// public void SaveFunFacts() { Pers.SaveFunFacts(FunFacts); } } }