diff --git a/README.md b/README.md index f988b55..e377ca1 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,649 @@ -# Ohara_MAUI -```mermaid -classDiagram - class Bateau{ - + NomRomanise : string - + PremierChap : int - + PremierEp : int - + Description : string - + Caracteristique : string - } - - class Bestiaire { - + Origine : string - + Description : string - + Caracteristique : string - } - - class Equipage { - + NomRomanise : string - + Region : string - + PremierChap : int - + PremierEp : int - + Statut : bool - + Description : string - } - - class FruitDuDemon { - + NomRomanise : string - + Type : string - + PremierChap : int - + PremierEp : int - + Description : string - + Forces : string - + Faiblesses : string - } - - class Ile { - + NomRomanise : string - + Region : string - + PremierChap : int - + PremierEp : int - + Description : string - + Geographie : string - } - - class Personnage { - + Prime : double - + Epithete : string - + Age : int - + Taille : double - + Origine : string - + Biographie : string - + Citation : string - } - - class ObjetOhara { - + Nom : string - + Image : string? - } - - - FruitDuDemon --> Personnage : + Utilisateur - Personnage --> Equipage : + Equipage - Personnage --> FruitDuDemon : + Fruit - Bateau --> Equipage : + Affiliation - Equipage --> Personnage : + Capitaine - Equipage --> Personnage : + Membre - Equipage --> Equipage : + Allie - - Ile --|> ObjetOhara - FruitDuDemon --|> ObjetOhara - Personnage --|> ObjetOhara - Equipage --|> ObjetOhara - Bateau --|> ObjetOhara - Bestiaire --|> ObjetOhara +# Ohara +Ohara est le nom d'une île dans le manga One Piece, écrit par Eiichiro Oda. Cette île abritait de nombreux archéologues qui cherchaient à déceler les mystères du monde. Nous avons choisi le nom Ohara pour notre projet lié à la SAE 2.01, car notre application représente une véritable encyclopédie rassemblant des informations sur One Piece. Avec des centaines de personnages, des dizaines d'îles et de nombreux arcs d'histoire, il peut être difficile de se souvenir de tous les détails. Notre application a été conçue pour aider les fans à accéder facilement à toutes les informations sur One Piece, en offrant une expérience utilisateur fluide et intuitive. +# Sommaire : +[Diagramme de classe](#classe) + +[Diagramme de classe en mettant en avant la partie persistance ](#classePer) + +[Diagramme de classe sur nos parties ajoutées](#ajoute) + +[Diagramme de paquetage](#paquetage) + +[Diagramme de paquetage avec persistance](#paquetagePer) + +[Diagramme de séquence : "Serialization"](#serialization) + +[Diagramme de séquence : "Mettre un objet en favoris"](#fav) + +[Diagramme de séquence : "Créer un objet"](#objet) + +[Diagramme d'architecture](#archi) + + +# Diagramme de classe +```plantuml +@startuml + +hide circle +allowmixing +skinparam classAttributeIconSize 0 +skinparam classBackgroundColor #ffffb9 +skinparam classBorderColor #800000 +skinparam classArrowColor #800000 +skinparam classFontColor #black +skinparam classFontName Tahoma + +class Bateau { + + string NomRomanise + + int PremierChap + + int PremierEp + + string Description + + string Caracteristique + + Bateau(string nom, string nomRomanise, int premierChap, int premierEp,\n string description, string caracteristique, string image) + + Bateau(string nom, string nomRomanise, Equipage affiliation, int premierChap,\n int premierEp, string description, string caracteristique, string image) +} + +class Bestiaire { + + string Origine + + string Description + + string Caracteristique + + Besiaire(string nom, string origine,string description,\n string caracteristiques) + + Bestiaire(string nom, string origine, string description,\n string caracteristiques, string image) +} + +class Equipage { + + string NomRomanise + + string Region + + int PremierChap + + int PremierEp + + bool Statut + + string Description + + Equipage(string nom, string nomRomanise, string region, int premierChap,\n int premierEp, bool statut, string description) + + Equipage(string nom, string nomRomanise, string region, int premierChap,\n int premierEp, bool statut, string description, string image) +} + +class FruitDuDemon { + + string NomRomanise + + string Type + + int PremierChap + + int PremierEp + + string Description + + string Forces + + string Faiblesses + + FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp,\n string description, string forces, string faiblesses) + + FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp,\n string description, string forces, string faiblesses, string image) + + FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp, string description,\n string forces, string faiblesses, string image, List utilisateur) +} + +class Ile { + + string NomRomanise + + string Region + + int PremierChap + + int PremierEp + + string Description + + string Geographie + + Ile(string nom, string nomRomanise, string region, int premierChap, \n int premierEp, string description, string geographie) + + Ile(string nom, string nomRomanise, string region, int premierChap, \n int premierEp, string description, string geographie, string image) +} + +class Personnage { + + double Prime + + string Epithete + + int Age + + double Taille + + string Origine + + string Biographie + + string Citation + + Personnage(string nom , double prime, string epithete, int age, dobule taille,\n string origine, string biographie,string citation) + + Personnage(string nom , double prime, string epithete, int age, dobule taille,\n string origine, string biographie,string citation, string image) +} + +class ObjetOhara { + + string Nom + + string? Image + + bool EstFavori + ObjetOhara(string nom, string image) +} + +class XML_Serializer { + + XML_Serializer(string path) + + void SetPersonnage(List listePerso) + + void SetFDD(List listeFDD) + + void SetBestiaire(List listeBest) + + void SetEquipage(List listeEquip) + + void SetIle(List listIle) + + void SetBateau(List listeBateau) + + IEnumerable GetBateaux() + + IEnumerable GetBestiaires() + + IEnumerable GetEquipages() + + IEnumerable GetFruits() + + IEnumerable GetIles() + + IEnumerable GetPersonnages() +} + +interface IDataManager { + IEnumerable GetBateaux() + IEnumerable GetBestiaires() + IEnumerable GetEquipages() + IEnumerable GetFruits() + IEnumerable GetIles() + IEnumerable GetPersonnages() + void SetBateau(List listeBateaux); + void SetBestiaire(List listeBest); + void SetEquipage(List listeEquip); + void SetFDD(List listeFDD); + void SetIle(List listeIle); + void SetPersonnage(List listePerso); +} + +class Manager { + + IDataManager DataManager + + ObservableCollection Bateaux + + ObservableCollection Personnages + + ObservableCollection Fruits + + ObservableCollection Iles + + ObservableCollection Bestiaire + + ObservableCollection Equipage + + ObjetOhara? SelectedItem + + Manager(IDataManager dataManager) + + List GetPersonnages() + + List GetFruits() + + List GetEquipages() + + List GetBateaux() + + List GetBestiaires() + + List GetIles() + + List FiltrerFDD(string type) + + List RecherObjetOhara(string text, List liste) + + List GetFavoris() + + void ModifierFavFDD(FruitDuDemon fdd, bool value) + + void ModifierFavEquip(Equipage equip, bool value) + + void ModifierFavBest(Bestiaire bestiaire, bool value) + + void ModifierFavPerso(Personnage perso, bool value) + + void ModifierFavIle(Ile ile, bool value) + + void ModifierFavBateau(Bateau bateau, bool value) + + void AjouterFDD(FruitDuDemon fruit) + + void AjouterEquip(Equipage equip) + + void AjouterBest(Bestiaire best) + + void AjouterPerso(Personnage perso) + + void AjouterIle(Ile ile) + + void AjouterBataeu(Bateau bateau) + + void SuppimerFDD(FruitDuDemon fruit) + + void SuppimerEquip(Equipage Equipage) + + void SuppimerBest(Bestiaire best) + + void SuppimerPerso(Personnage perso) + + void SuppimerIle(Ile ile) + + void SuppimerBateau(Bateau bateau) + + +} + +class StubManager { + + StubPersonnage StubPersonnage + + StubFruitDuDemon StubFruitDuDemon + + StubEquipage StubEquipage + + StubBateau StubBateau + + StubBestiaire StubBestiaire + + StubIle StubIle + + StubManager() + + IEnumerable GetPersonnages() + + IEnumerable GetFruits() + + IEnumerable GetEquipages() + + IEnumerable GetBateaux() + + IEnumerable GetBestiaires() + + IEnumerable GetIles() + + void SetBateau(List listeBateaux) + + void SetBestiaire(List listeBest) + + void SetEquipage(List listeEquip) + + void SetFDD(List listeFDD) + + void SetILe(List listeIle) + + void SetPersonnage(List listePerso) +} + +class StubBateau { + + IEnumerable RecupererBateau() +} + +class StubBestiaire { + + IEnumerable RecupererBestiaire() +} + +class StubEquipage { + + IEnumerable RecupererEquipage() +} + +class StubFruitDuDemon { + + IEnumerable RecupererFruitDuDemon() +} + +class StubIle { + + IEnumerable RecupererIle() +} + +class StubPersonnage { + + IEnumerable RecupererPersonnage() +} + + +FruitDuDemon --> "+ Utilisateur" Personnage +Personnage --> "+ Equipage" Equipage +Personnage --> "+ Fruit" FruitDuDemon +Bateau --> "+ Affiliation" Equipage +Equipage --> "+ Capitaine" Personnage +Equipage --> "+ Membre" Personnage +Equipage --> "+ Allie" Equipage + +Ile --|> ObjetOhara +FruitDuDemon --|> ObjetOhara +Personnage --|> ObjetOhara +Equipage --|> ObjetOhara +Bateau --|> ObjetOhara +Bestiaire --|> ObjetOhara + +StubManager --|> IDataManager +XML_Serializer --|> IDataManager + +StubManager --> "+ StubIle" StubIle +StubManager --> "+ StubFruitDuDemon" StubFruitDuDemon +StubManager --> "+ StubPersonnage" StubPersonnage +StubManager --> "+ StubEquipage" StubEquipage +StubManager --> "+ StubBateau" StubBateau +StubManager --> "+ StubBestiaire" StubBestiaire + +Manager --> "+ DataManager" IDataManager + +StubIle *--> "+ ile" Ile +StubFruitDuDemon *--> "+ fdd" FruitDuDemon +StubPersonnage *--> "+ perso" Personnage +StubEquipage *--> "+ Lequipage" Equipage +StubBateau *--> "+ bateau" Bateau +StubBestiaire *--> "+ best" Bestiaire + +@enduml ``` +# Description du diagramme de classe + +Ceci est le diagramme de classe de notre application Ohara se basant sur l'univers de l'oeuvre. + +Il possède 7 classes : + + -Bateau + -> Classe qui représente les différents bateaux avec leur nom, leur affiliation à un équipage (Implémentation de la classe Equipage), quand on les voit pour la première fois dans le manga et dans l'anime. + + -Bestiaire + -> La classe Bestiaire représente toutes les races présents dans l'univers de One Piece avec leur nom, leur origine, une description ainsi que les caractéristiques de la race. + + -Equipage + -> La classe Equipage représente les différents équipages de l'univers One Piece, c'est-à-dire les regroupements de pirates (personnages) qui se regroupent pour partir à l'aventure. On retrouve dans cette classe le nom de l'équipage, sa provenance (région), quand on le voit pour la première fois dans le manga et dans l'anime, son statut (est-ce que l'équipage est toujours actif ou non) ,une description de l'équipage ainsi qu'une liste des membres de l'équipage (Implémentation de la classe Personnage) et une liste des alliés de l'équipage (D'autre équipages) . + + -Fruit du démon + -> La classe Fruit du démon regroupe tous les fruits présents dans l'oeuvre. Les fruits du démons sont des aliments qui, une fois ingéré par un personnage, confère à son utilisateur des pouvoirs spéciaux. Cependant une fois ingéré l'utilisateur perds sa faculté à nager. On retrouve dans cette classe son nom, le type de fruit (paramecia, logia, zoan), quand on le voit pour la première fois dans le manga et dans l'anime, une description du fruit en question, ses forces et ses faiblesses ainsi que son ou ses utilisateurs (Implémentation de la classe Personnage). + + -Ile + -> La classe Ile regroupe toutes les îles de l'oeuvre One Piece. On y retrouve son nom, la région dans laquelle elle se situe, quand on la voit pour la première fois dans le manga et dans l'anime, une description de l'île et une description de la localisation de l'île (qu'est-ce qu'il se trouve à proximité par exemple). + + -Personnage + -> La classe Personnage regroupe tous les personnages de l'oeuvre One Piece. On y retrouve le nom du personnage, la prime associé au personnage (chaque pirate ayant une prime pour sa capture car ils sont recherchés par l'Etat pour les différents crimes qu'ils ont pu commettre), l'âge du personnage, sa taille, son origine (région de naissance), une biographie associé au personnage pour pouvoir le présenter, et une citation associé au personnage qui le représente (exemple Luffy : "Le roi des pirates, ce sera moi !") ansi qu'un liste cotenant son ou ses équipages (Implémentation de la classe Equipage) et une liste de son ou ses Fruits du démon (Implémentation de FruitDuDemon). + + -ObjetOhara + -> La classe ObjetOhara ne représente rien au sein de l'oeuvre One Piece. Elle sert seulement a regrouper le nom, l'image et l'attribut "EstFavori" dans une classe qui sont des éléments qui reviennent dans chaque classes du model, ce qui permet d'éviter la redondance. + + +Nous avons regroupé le nom et l'image dans une classe "Objet Ohara" dont toutes les autres classes hérite pour éviter la redondance et donc supprimer un certain nombre de ligne et faciliter la démarche. + +Il possède aussi 6 stubs + le stub manager : + + -StubBateau + -> Le StubBateau sert à implémenter des objets de la classe Bateau au sein de l'application. + + -StubBestiaire + -> Le StubBestiaire sert à implémenter des objets de la classe Bestiaire au sein de l'application. + + -StubEquipage + -> Le StubEquipage sert à implémenter des objets de la classe Equipage au sein de l'application. + + -StubFruitDuDemon + -> Le StubFruitDuDemon sert à implémenter des objets de la classe FruitDuDemon au sein de l'application. + + -StubIle + -> Le StubIle sert à implémenter des objets de la classe Ile au sein de l'application. + + -StubPersonnage + -> Le StubPersonnage sert à implémenter des objets de la classe Personnage au sein de l'application. + + -StubManager + -> Le StubManager sert à gérer les différents Stubs. + + +Les Stubs sont reliés à chacunes des classes auxquelles ils correspondent (StubBateau à la classe Bateau, StubPersonnage à la classe Personnage, etc...). Ce sont des compositions car si les classes auxquelles ils sont reliés viennent à se faire détruire alors les stubs ne sont plus rien. + +Il regroupe aussi : + + - La classe Manager qui permet de faire le pont entre l'application et le model, en effet c'est cette classe qui permet de récupérer les données, de les stocker puis de les modifier si nécéssaire. On instancie cette classe au lancement de l'application, et c'est cette instance qui est utilisé dans le code behind de nos vues pour afficher les données, les modifiers, etc... En réseumé tout passe par le manager. + - L'interface IDataManager qui sert justement d'interface pour la récupération des données, c'est à dire que grace à cette interface, que l'on utilise le XML_Serializer ou le StubManager pour récupérer les données, le code reste le même. + - La classe XML_Serializer qui permet de sauvegarder nos données (Sérialization) sous formes de fichier .xml puis de les récupérer (Désérialization) lorsqu'on redémarre l'application par exemple. + + + +Ce diagramme de classe représente la structure de notre application. + +# Diagramme de classe en mettant en avant la partie persistance +```plantuml +@startuml + +hide circle +allowmixing +skinparam classAttributeIconSize 0 +skinparam classBackgroundColor #ffffb9 +skinparam classBorderColor #800000 +skinparam classArrowColor #800000 +skinparam classFontColor #black +skinparam classFontName Tahoma + + +class XML_Serializer #LimeGreen { + + XML_Serializer(string path) + + void SetPersonnage(List listePerso) + + void SetFDD(List listeFDD) + + void SetBestiaire(List listeBest) + + void SetEquipage(List listeEquip) + + void SetIle(List listIle) + + void SetBateau(List listeBateau) + + IEnumerable GetBateaux() + + IEnumerable GetBestiaires() + + IEnumerable GetEquipages() + + IEnumerable GetFruits() + + IEnumerable GetIles() + + IEnumerable GetPersonnages() +} + +interface IDataManager #LimeGreen { + IEnumerable GetBateaux() + IEnumerable GetBestiaires() + IEnumerable GetEquipages() + IEnumerable GetFruits() + IEnumerable GetIles() + IEnumerable GetPersonnages() + void SetBateau(List listeBateaux); + void SetBestiaire(List listeBest); + void SetEquipage(List listeEquip); + void SetFDD(List listeFDD); + void SetIle(List listeIle); + void SetPersonnage(List listePerso); +} + +class Manager #LimeGreen { + + IDataManager DataManager + + ObservableCollection Bateaux + + ObservableCollection Personnages + + ObservableCollection Fruits + + ObservableCollection Iles + + ObservableCollection Bestiaire + + ObservableCollection Equipage + + ObjetOhara? SelectedItem + + Manager(IDataManager dataManager) + + List GetPersonnages() + + List GetFruits() + + List GetEquipages() + + List GetBateaux() + + List GetBestiaires() + + List GetIles() + + List FiltrerFDD(string type) + + List RecherObjetOhara(string text, List liste) + + List GetFavoris() + + void ModifierFavFDD(FruitDuDemon fdd, bool value) + + void ModifierFavEquip(Equipage equip, bool value) + + void ModifierFavBest(Bestiaire bestiaire, bool value) + + void ModifierFavPerso(Personnage perso, bool value) + + void ModifierFavIle(Ile ile, bool value) + + void ModifierFavBateau(Bateau bateau, bool value) + + void AjouterFDD(FruitDuDemon fruit) + + void AjouterEquip(Equipage equip) + + void AjouterBest(Bestiaire best) + + void AjouterPerso(Personnage perso) + + void AjouterIle(Ile ile) + + void AjouterBataeu(Bateau bateau) + + void SuppimerFDD(FruitDuDemon fruit) + + void SuppimerEquip(Equipage Equipage) + + void SuppimerBest(Bestiaire best) + + void SuppimerPerso(Personnage perso) + + void SuppimerIle(Ile ile) + + void SuppimerBateau(Bateau bateau) +} + +class StubManager #LimeGreen { + + StubPersonnage StubPersonnage + + StubFruitDuDemon StubFruitDuDemon + + StubEquipage StubEquipage + + StubBateau StubBateau + + StubBestiaire StubBestiaire + + StubIle StubIle + + StubManager() + + IEnumerable GetPersonnages() + + IEnumerable GetFruits() + + IEnumerable GetEquipages() + + IEnumerable GetBateaux() + + IEnumerable GetBestiaires() + + IEnumerable GetIles() +} + + + +StubManager --|> IDataManager +XML_Serializer --|> IDataManager + + +Manager --> "+ DataManager" IDataManager + + +@enduml +``` + +# Description du diagramme de classe en mettant en avant la partie persistance + +Concernant la persistance de l'application, elle est gérée par la classe XML_Serializer, cette dernière est instanciée en paramètre du constructeur de Manager au lancement de l'application. Elle comporte deux constructeurs un qui ne prend aucun paramètre sauvegardant les informations dans le dossier courrant de l'application et l'autre prenant en paramètre un chemin permettant de choisir où stocker les informations (Dans le cas de notre application les fichier son stocker dans le 'AppDataDirectory'). Au lancement de l'application le constructeur de la classe XML_Serializer est donc lancé et il va, si un fichiers .xml n'est pas présent ( il y a un fichier .xml par classe sauf la classe ObjetOhara), le créer à l'aide du StubManager et les méthodes SetPersonnage, SetBateau, etc... Sinon il ne fait rien car les fichiers sont déjà tous présent. Le manager va donc pouvoir ensuite utliser les différentes méthodes get du XML_Serializer pour récupérer les objets et les mettres dans ses collections (Fruits,Personnages,...). Enfin concernant la sauvegarde des informations, dès qu'un objet est modifié, créé ou supprimé à l'aide des méthodes du Manager, il va simplement rappeler la méthode Set de l'objet concerné ce qui est assez lourd mais fonctionnel. + + +# Diagramme de classes sur nos parties ajoutées +```plantuml +@startuml +hide circle +allowmixing +skinparam classAttributeIconSize 0 +skinparam classBackgroundColor #ffffb9 +skinparam classBorderColor #800000 +skinparam classArrowColor #800000 +skinparam classFontColor #black +skinparam classFontName Tahoma + +class Manager { + + IDataManager DataManager + + ObservableCollection Bateaux + + ObservableCollection Personnages + + ObservableCollection Fruits + + ObservableCollection Iles + + ObservableCollection Bestiaire + + ObservableCollection Equipage + + ObjetOhara? SelectedItem + + Manager(IDataManager dataManager) + + List GetPersonnages() + + List GetFruits() + + List GetEquipages() + + List GetBateaux() + + List GetBestiaires() + + List GetIles() + + List FiltrerFDD(string type) + + List RecherObjetOhara(string text, List liste) + + List GetFavoris() + + void ModifierFavFDD(FruitDuDemon fdd, bool value) + + void ModifierFavEquip(Equipage equip, bool value) + + void ModifierFavBest(Bestiaire bestiaire, bool value) + + void ModifierFavPerso(Personnage perso, bool value) + + void ModifierFavIle(Ile ile, bool value) + + void ModifierFavBateau(Bateau bateau, bool value) + + void AjouterFDD(FruitDuDemon fruit) + + void AjouterEquip(Equipage equip) + + void AjouterBest(Bestiaire best) + + void AjouterPerso(Personnage perso) + + void AjouterIle(Ile ile) + + void AjouterBataeu(Bateau bateau) + + void SuppimerFDD(FruitDuDemon fruit) + + void SuppimerEquip(Equipage Equipage) + + void SuppimerBest(Bestiaire best) + + void SuppimerPerso(Personnage perso) + + void SuppimerIle(Ile ile) + + void SuppimerBateau(Bateau bateau) +} + +class ObjetOhara { + + string Nom + + string? Image + + bool EstFavori + ObjetOhara(string nom, string image) +} + +@enduml +``` + +# Description du diagramme de classes sur nos parties ajoutées + +Notre application possède la fonctionnalité d'ajouter un objet à nos favoris, cette fonctionnalité permet à l'utilisateur de retrouver plus facilement des information qui l'interesse grâce à une page de l'application qui affiche directement tout les objets ajoutés en favori. Cette fonctionnalité est gérée par le manager à travers les méthodes: GetFavoris, qui permet de récupérer tout les objets ajoutés en favoris et de les renvoyer sous forme de liste et ModifierFav(Type de l'objet) qui permet d'ajouter ou d'enlever un favoris. Ces méthodes s'appuient sur la propriété EstFavori de type booléen de la classe mère de toute de nos classe ObjetOhara, si cette propriété est égale à true alors l'objet fait partie des favoris. + +# Diagramme de paquetage + +![logo](img/diagramme_paquetage.png) + +# Description du diagramme de paquetage + +Le diagramme de paquetage regroupe nos 4 solutions, le Model, le TestProject, le TestUnitaire et Ohara(vue). + +A l'intérieur du Model nous avons regroupé tous les fichiers dans différents dossier pour pouvoir améliorer la visibilité de notre projet et pour ne pas se perdre dans les fichiers. On peut retrouver les dossiers suivants : + + -Classes : Ici retrouve toutes les classes de notre application, + -Stub : Ici on retrouve tout ce qui est lié au Stub de notre application, + -Managers : Ici on retrouve le IDataManager et le Manager, + -Serializer : Ici on retrouve tout ce qui est lié à la serialization (XML_Serializer). + +Pour continuer dans notre vue il y a le dossier Ressources qui regroupe les dossiers Styles et Images. + +Dans le dossier Image on retrouve toutes les images concernant l'application (images de personnages, logo, diagramme de paquetage, etc...). + +Dans le dossier Styles on retrouve les Styles de notre application. + + +# Diagramme de paquetage avec persistance + +![logo](img/diagramme_paquetage_persistance.png) + + +# Description du diagramme de paquetage avec persistance + +Nous avans déjà décrit avec précisions le fonctionnement de la persistance +dans notre application dans la partie "Description du diagramme de classe en mettant en avant la partie persistance". Pour faire le lien avec le diagramme de paquetage, la partie persistance est principalement assurée par le dosser "Serializer" même si le processus implique les dossiers Managers et Stub l'un pour récupérer les données à sauvegarder (Manager) et l'autre pour récupérer les données si les fichiers n'existent pas (Stub). + +# Diagramme de séquence + +## Serialization + + +```plantuml +@startuml + +actor Utilisateur +participant Front +participant Serializer +participant Files +participant Manager +collections Collections + +Utilisateur -> Front: Démarrage de l'application +Front --> Manager: Instanciation du Manager +Manager -> Serializer: Instanciation du Serializer +Serializer -> Files: Si les fichiers existent, récupération des données avec les méthodes Get(Type de l'objet) du Serializer +Serializer -> Stub: Si les fichiers n'existent pas, récupération des données avec les méthodes Get(Type de l'objet) du StubManager +Serializer -> Manager: Renvoie des données +Manager -> Collections: Enregistrement des données dans les collections +Manager --> Front: Données utilisables par les vues +Front --> Utilisateur: Affichage des données (Binding) +@enduml +``` + +## Description du diagramme de séquence de la Serialization + +Tout d'abord, l'utilisateur démarre l'application MAUI, ensuite le Front s'occupe d'appeler la fonction de chargement, puis le Serializer récupère les données dans les fichiers et charge les données dans des collections qui sont ensuite utilisables par les vues. + + + +## Mettre un objet en favoris + +```plantuml +@startuml + +actor Utilisateur +participant Front +participant Serializer +participant Files +participant Manager +collections Collections + +Utilisateur -> Front: Démarrage de l'application +Front --> Utilisateur: Affichage de l'interface +Utilisateur -> Front: Choisi une page avec le menu de navigation +Front --> Utilisateur: Affichage de la page avec les objets correspondant +Utilisateur -> Front: Clique sur un objet +Front --> Utilisateur: Affichage de la page avec les informations de l'objet +Utilisateur -> Front: Clique sur le boutton "ajouter cet objet au favoris" +Front -> Manager: Appel de la méthode ModifierFav pour l'objet +Manager -> Collections: Modification de l'objet dans la collection +Manager --> Serializer: Appel de la méthode Set(Type de l'objet) +Serializer -> Files: Sauvegarde de l'information dans le fichier .xml +@enduml +``` +## Description du diagramme de séquence de "Mettre un objet en favoris" + +Pour approfondir, ce diagramme de séquence, lorsque un utilisatuer ajoute un objet en favoris, la méthode ModifierFav correspondant à l'objet modifie son attribut EstFavori pour le passer en true, ensuite lorsque un utilisateur souhaite afficher ses favoris, la vue fait un appel à la méthode GetFavoris du Manager qui renvoie une liste contenant tout les objets de chaque collection ayant EstFavori en true. + +## Créer un objet + +```plantuml +@startuml + +actor Utilisateur +participant Front +participant Serializer +participant Files +participant Manager +collections Collections + +Utilisateur -> Front: Démarrage de l'application +Front --> Utilisateur: Affichage de l'interface +Utilisateur -> Front: Choisi une page avec le menu de navigation +Front --> Utilisateur: Affichage de la page avec les objets correspondant +Utilisateur -> Front: Clique le bouton ajouter +Front --> Utilisateur: Affichage du formulaire coresspondant à l'objet +Utilisateur -> Front: Rempli le formulaire et clique sur le boutton confirmer +Front -> Manager: Appel à la méthode Add(Type de l'objet) +Manager -> Collections: Ajout du nouvel objet à la collection correspondante +Manager --> Serializer: Appel de la méthode Set(Type de l'objet) +Serializer -> Files: Sauvegarde du nouvel objet dans le fichier .xml +@enduml +``` + +## Description du diagramme de séquence de "Créer un objet" + +Pour approfondir ce diagrammme, lorsqu'un utilisateur clique sur le bouton pour ajouter un objet, une page modal s'ouvre avec un formulaire permettant de définir les propriétés de l'objet ainsi que un bouton pour annuler et un autre pour confirmer qui fait appel à la méthode Add(Type de l'objet) du manager qui va ajouter l'objet à la collection qui lui correspond et faire un appel à la méthode Set(Type de l'objet) du serializer pour sauvergarder le nouvel objet. + +# Diagramme d'architecture + +![logo](img/diagramme_archi.png) + + + +# Description du diagramme d'architecture + +Nous avons donc notre application principale Ohara sous la solution ".sln" sous .NET 7 avec MAUI. A cela est relié la documentation réalisée grâce à Doxygen. Nous avons ensuite la serialization faites avec XML_serializer, nos crééons des fichiers ".xml" pour chaque classe de notre application (par exemple personnages.xml). Si jamais ce fichier existe déjà, il est écrasé par la méthode "set". Nous avons ensuite Drone et Sonar qui sont reliés à la CI et la CD de notre application et qui permettent de réaliser correctement la déploiement de notre application de part la détection d'erreurs, de duplication de code, etc... + + diff --git a/Sources/Model/Bateau.cs b/Sources/Model/Bateau.cs deleted file mode 100644 index dd718ac..0000000 --- a/Sources/Model/Bateau.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; - -namespace Model -{ - [DataContract(Name = "bateau")] - public class Bateau : ObjetOhara - { - [DataMember(Name = "nomromanise")] - public string NomRomanise { get; set; } - [DataMember(Name = "affiliation", EmitDefaultValue = false)] - public Equipage? Affiliation { get; set; } - [DataMember(Name = "premierchap")] - public int PremierChap { get; set; } - [DataMember(Name = "premierep")] - public int PremierEp { get; set; } - [DataMember(Name = "description")] - public string Description { get; set; } - [DataMember(Name = "caracteristique")] - public string Caracteristique { get; set; } - - - - public Bateau(string nom, string nomRomanise, int premierChap, int premierEp, string description, string caracteristique, string image = "baseimage.png") : base(nom,image) - { - - NomRomanise = nomRomanise; - - if (premierEp < 0) - { - PremierEp = 0; - } - else - { - PremierEp = premierEp; - } - if (premierChap < 0) - { - premierChap = 0; - } - else - { - PremierChap = premierChap; - } - Description = description; - Caracteristique = caracteristique; - - } - - public Bateau(string nom, string nomRomanise, Equipage affiliation, int premierChap, int premierEp, string description, string caracteristique, string image) : this(nom,nomRomanise,premierChap,premierEp,description,caracteristique,image) - { - Affiliation = affiliation; - } - } -} diff --git a/Sources/Model/Bestiaire.cs b/Sources/Model/Bestiaire.cs deleted file mode 100644 index 2ca8d77..0000000 --- a/Sources/Model/Bestiaire.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; - -namespace Model -{ - [DataContract(Name = "bestiaire")] - public class Bestiaire : ObjetOhara - { - [DataMember(Name = "origine")] - public string Origine { get; set; } - [DataMember(Name = "description")] - public string Description { get; set; } - [DataMember(Name = "caracteristique")] - public string Caracteristique { get; set; } - - - public Bestiaire(string nom, string origine, string description, string caracteristique,string image = "baseimage.png") : base(nom, image) - { - Origine = origine; - Description = description; - Caracteristique = caracteristique; - } - - - } -} diff --git a/Sources/Model/Classes/Bateau.cs b/Sources/Model/Classes/Bateau.cs new file mode 100644 index 0000000..b0a6c85 --- /dev/null +++ b/Sources/Model/Classes/Bateau.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Model.Classes +{ + [DataContract(Name = "bateau")] + public class Bateau : ObjetOhara + { + [DataMember(Name = "nomromanise")] + private string? nomromanise; + public string? NomRomanise { + get=>nomromanise; + set + { + if(nomromanise == value) return; + nomromanise = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "affiliation", EmitDefaultValue = false)] + private Equipage? equipage; + public Equipage? Affiliation { + get=>equipage; + set + { + if(equipage == value) return; + equipage = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierchap")] + private int premierchap; + public int PremierChap + { + get => premierchap; + set + { + if (premierchap == value) return; + premierchap = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierep")] + private int premierep; + public int PremierEp + { + get => premierep; + set + { + if (premierep == value) return; + premierep = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "description")] + private string? description; + public string? Description + { + get => description; + set + { + if (description == value) return; + description = value; + OnPropertyChanged(); + } + } + + [DataMember(Name = "caracteristique")] + private string? caracteristique; + public string? Caracteristique { + get=> caracteristique; + set + { + if(caracteristique == value) return; + caracteristique = value; + OnPropertyChanged(); + } + } + + + public Bateau(string nom, string nomRomanise, int premierChap, int premierEp, string description, string? caracteristique) : base(nom) + { + + if (String.IsNullOrEmpty(nomRomanise)) + NomRomanise = ""; + else + NomRomanise = nomRomanise; + if (premierEp < 0) + { + PremierEp = 0; + } + else + { + PremierEp = premierEp; + } + if (premierChap < 0 ) + { + PremierChap = 0; + } + + else + { + PremierChap = premierChap; + } + if (String.IsNullOrEmpty(description)) + Description = "Description du bateau ..."; + else + Description = description; + + if (String.IsNullOrEmpty(caracteristique)) + Caracteristique = "Caracteristiques du bateau ..."; + else + Caracteristique = caracteristique; + + } + public Bateau(string nom, string nomRomanise, int premierChap, int premierEp, string description, string caracteristique, string image) : this(nom, nomRomanise, premierChap, premierEp, description, caracteristique) + { + if (String.IsNullOrEmpty(image)) + image = "baseimage.png"; + Image = image; + } + + public override bool Equals(object? obj) + { + + if (obj == null) return false; + if (this.GetType() != obj.GetType()) + { + return false; + } + else + { + Bateau o = (Bateau)obj; + return o.Nom == Nom; + } + + } + + public override int GetHashCode() + { + + return HashCode.Combine(NomRomanise, Affiliation, PremierChap, PremierEp, Description, Caracteristique); + } + + public override string ToString() + { + return "Bateau : " + Nom +" "+EstFavori +" " + NomRomanise + " " + Affiliation + " " + PremierChap + " " + PremierEp + " " + Description + " " + Caracteristique +" "+ Image; + } + + + } +} diff --git a/Sources/Model/Classes/Bestiaire.cs b/Sources/Model/Classes/Bestiaire.cs new file mode 100644 index 0000000..2b3650d --- /dev/null +++ b/Sources/Model/Classes/Bestiaire.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Model.Classes +{ + [DataContract(Name = "bestiaire")] + public class Bestiaire : ObjetOhara + { + [DataMember(Name = "origine")] + private string? origine; + public string? Origine { + get=>origine; + set + { + if (origine == value) return; + origine = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "description")] + private string? description; + public string? Description { + get=>description; + set + { + if (description == value) return; + description = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "caracteristique")] + private string? caracteristique; + public string? Caracteristique { + get=>caracteristique; + set + { + if(caracteristique == value) return; + caracteristique = value; + OnPropertyChanged(); + } + } + + public Bestiaire(string nom, string origine, string description, string caracteristique) : base(nom) + { + if (String.IsNullOrEmpty(origine)) + origine = "Grand Line"; + Origine = origine; + if (String.IsNullOrEmpty(description)) + description = "Pour décrire ..."; + Description = description; + if (String.IsNullOrEmpty(caracteristique)) + caracteristique = "Les caracteristiques ..."; + Caracteristique = caracteristique; + } + + public Bestiaire(string nom, string origine, string description, string caracteristique, string image) : this(nom, origine, description, caracteristique) + { + if (String.IsNullOrWhiteSpace(image)) + image = "baseimage.png"; + Image = image; + } + public override bool Equals(object? obj) + { + if (obj == null) return false; + if (this.GetType() != obj.GetType()) + { + return false; + } + else + { + Bestiaire o = (Bestiaire)obj; + return o.Nom == Nom; + } + + } + public override int GetHashCode() + { + return HashCode.Combine(Origine, Description, Caracteristique); + } + public override string ToString() + { + return "Bestiaire : " + Nom +" "+EstFavori+ " " + Origine + " " + Description + " " + Caracteristique +" " + Image; + } + } +} diff --git a/Sources/Model/Classes/Equipage.cs b/Sources/Model/Classes/Equipage.cs new file mode 100644 index 0000000..ef7f611 --- /dev/null +++ b/Sources/Model/Classes/Equipage.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Model.Classes +{ + [DataContract(Name = "equipage")] + public class Equipage : ObjetOhara + { + [DataMember(Name = "nomromanise")] + private string? nomromanise; + public string? NomRomanise + { + get => nomromanise; + set + { + nomromanise = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "region")] + private string? region; + public string? Region { + get=> region; + set + { + region = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierchap")] + private int premierchap; + public int PremierChap { + get=>premierchap; + set + { + premierchap = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierep")] + private int premierep; + public int PremierEp { + get=>premierep; + set + { + premierep = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "statut")] + private bool statut; + public bool Statut { + get=>statut; + set + { + statut = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "description")] + private string? description; + public string? Description { + get=>description; + set + { + description = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "capitaine")] + private Personnage? capitaine; + public Personnage? Capitaine { + get=>capitaine; + set + { + capitaine = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "membre")] + private ObservableCollection membre = new ObservableCollection(); + public IReadOnlyCollection Membre { get=>membre; } + + public void AjouterMembre(Personnage? p) + { + if(p!=null) membre.Add(p); + } + public void RetirerMembre(Personnage? p) + { + if(p!=null) membre.Remove(p); + } + + public void ViderMembre() => membre.Clear(); + + + + [DataMember(Name = "allie")] + private ObservableCollection allie = new ObservableCollection(); + public IReadOnlyCollection Allie { get => allie; } + + public void AjouterAllie(Equipage? p) + { + if (p != null) allie.Add(p); + } + public void RetirerAllie(Equipage? p) + { + if (p != null) allie.Remove(p); + } + + public void ViderAllie() => allie.Clear(); + + public Equipage(string nom, string nomRomanise, string region, int premierChap, int premierEp, bool statut, string description) : base(nom) + { + + NomRomanise = nomRomanise; + Region = region; + if (premierEp < 0) + { + PremierEp = 0; + } + else + { + PremierEp = premierEp; + } + if (premierChap < 0) + { + premierChap = 0; + } + else + { + PremierChap = premierChap; + } + Statut = statut; + Description = description; + + } + + public Equipage(string nom, string nomRomanise, string region, int premierChap, int premierEp, bool statut, string description, string image) : this(nom, nomRomanise, region, premierChap, premierEp, statut, description) + { + if (String.IsNullOrWhiteSpace(image)) + { + image = "baseimage.png"; + } + Image = image; + + } + + public override bool Equals(object? obj) + { + if (obj == null) return false; + if (this.GetType() != obj.GetType()) + { + return false; + } + else + { + Equipage o = (Equipage)obj; + return o.Nom == Nom; + } + + } + + public override int GetHashCode() + { + + return HashCode.Combine(NomRomanise, Region, PremierChap, PremierEp, Statut, Description); + } + + public override string ToString() + { + return "Equipage : " + Nom +" "+EstFavori+ " " + NomRomanise + " " + Region + " " + PremierChap + " " + PremierEp + " " + Statut + " " + Description + " " + Image; + } + } +} diff --git a/Sources/Model/Classes/FruitDuDemon.cs b/Sources/Model/Classes/FruitDuDemon.cs new file mode 100644 index 0000000..fdad12e --- /dev/null +++ b/Sources/Model/Classes/FruitDuDemon.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Model.Classes +{ + [DataContract(Name = "fruitdudemon")] + public class FruitDuDemon : ObjetOhara + { + [DataMember(Name = "nomromanise")] + private string? nomromanise; + public string? NomRomanise { + get=>nomromanise; + set + { + nomromanise = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "type")] + private string? type; + public string? Type { + get=>type; + set + { + type = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierchap")] + private int premierchap; + public int PremierChap { + get=>premierchap; + set + { + premierchap = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierep")] + private int premierep; + public int PremierEp { + get=>premierep; + set + { + premierep=value; + OnPropertyChanged(); + } + } + [DataMember(Name = "description")] + private string? description; + public string? Description { + get=>description; + set + { + description = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "forces")] + private string? forces; + public string? Forces { + get=>forces; + set + { + forces = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "faiblesses")] + private string? faiblesses; + public string? Faiblesses { + get=>faiblesses; + set + { + faiblesses = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "utilisateur", EmitDefaultValue = false)] + public List Utilisateur { get; set; } = new List(); + + + public FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp, string description, string forces, string faiblesses) : base(nom) + { + + NomRomanise = nomRomanise; + Type = type; + if (premierEp < 0) + { + PremierEp = 0; + } + else + { + PremierEp = premierEp; + } + if (premierChap < 0) + { + PremierChap = 0; + } + else + { + PremierChap = premierChap; + } + Description = description; + Forces = forces; + Faiblesses = faiblesses; + } + + public FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp, string description, string forces, string faiblesses, string image) : this(nom, nomRomanise, type, premierChap, premierEp, description, forces, faiblesses) + { + if (String.IsNullOrWhiteSpace(image)) + image = "baseimage.png"; + Image = image; + } + public override bool Equals(object? obj) + { + if (obj == null) return false; + if (this.GetType() != obj.GetType()) + { + return false; + } + else + { + FruitDuDemon o = (FruitDuDemon)obj; + return o.Nom == Nom; + } + + } + + public override int GetHashCode() + { + + return HashCode.Combine(NomRomanise, Type, PremierChap, PremierEp, Description, Forces, Faiblesses); + } + public override string ToString() + { + return "FruitDuDemon : " + Nom +" " +EstFavori+" " + NomRomanise + " " + Type + " " + PremierChap + " " + PremierEp + " " + Description + " " + Forces +" "+Faiblesses+ " " + Image; + } + } +} diff --git a/Sources/Model/Classes/Ile.cs b/Sources/Model/Classes/Ile.cs new file mode 100644 index 0000000..43b574f --- /dev/null +++ b/Sources/Model/Classes/Ile.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Model.Classes +{ + [DataContract(Name = "ile")] + public class Ile : ObjetOhara + { + [DataMember(Name = "nomromanise")] + private string? nomromanise; + public string? NomRomanise + { + get => nomromanise; + set + { + nomromanise = value; + OnPropertyChanged(); + } + } + + [DataMember(Name = "region")] + private string? region; + public string? Region { + get=>region; + set + { + region = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierchap")] + private int premierchap; + public int PremierChap { + get=>premierchap; + set + { + premierchap = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "premierep")] + private int premierep; + public int PremierEp { + get=>premierep; + set + { + premierep = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "description")] + private string? description; + public string? Description { + get=>description; + set + { + description = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "geographie")] + private string? geographie; + public string? Geographie { + get=>geographie; + set + { + geographie = value; + OnPropertyChanged(); + } + } + + + + public Ile(string nom, string nomRomanise, string region, int premierChap, int premierEp, string description, string geographie) : base(nom) + { + if (String.IsNullOrWhiteSpace(nomRomanise)) + nomRomanise = "Nom romanisé de l'île..."; + NomRomanise = nomRomanise; + if (String.IsNullOrWhiteSpace(region)) + region = "Grand Line"; + Region = region; + if (premierEp < 0) + { + PremierEp = 0; + } + else + { + PremierEp = premierEp; + } + if (premierChap < 0) + { + PremierChap = 0; + } + else + { + PremierChap = premierChap; + } + if (String.IsNullOrWhiteSpace(description)) + description = "Description de l'île ..."; + Description = description; + if (String.IsNullOrWhiteSpace(geographie)) + geographie = "Situation géographique de l'ile..."; + Geographie = geographie; + + } + + public Ile(string nom, string nomRomanise, string region, int premierChap, int premierEp, string description, string geographie, string image) : this(nom, nomRomanise, region, premierChap, premierEp, description, geographie) + { + if(String.IsNullOrWhiteSpace(image)) { + image = "baseimage.png"; + } + Image = image; + } + + public override bool Equals(object? obj) + { + if (obj == null) return false; + if (this.GetType() != obj.GetType()) + { + return false; + } + else + { + Ile o = (Ile)obj; + return o.Nom == Nom; + } + + } + + public override int GetHashCode() + { + + return HashCode.Combine(NomRomanise, Region, PremierChap, PremierEp, Description, Geographie); + } + + public override string ToString() + { + return "Ile : "+ Nom +" "+NomRomanise+" "+Region+" "+PremierChap+" "+PremierEp+" "+Description+" "+Geographie+" "+Image; + } + } +} diff --git a/Sources/Model/Classes/ObjetOhara.cs b/Sources/Model/Classes/ObjetOhara.cs new file mode 100644 index 0000000..7d9b692 --- /dev/null +++ b/Sources/Model/Classes/ObjetOhara.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Model.Classes +{ + [DataContract(Name = "objetohara")] + public class ObjetOhara : INotifyPropertyChanged + { + + public event PropertyChangedEventHandler? PropertyChanged; + [DataMember(Name = "nom")] + private string? nom; + public string? Nom { + get => nom; + set + { + nom = value; + OnPropertyChanged(); + } + } + + [DataMember(Name = "image")] + private string? image; + public string? Image { + get => image; + set + { + image = value; + OnPropertyChanged(); + + } + } + + [DataMember(Name = "estfavori")] + private bool estfavori; + public bool EstFavori { + get=>estfavori; + set + { + estfavori = value; + } + } + + + + public ObjetOhara(string nom, string image = "baseimage.png", bool estFavori = false) + { + + Nom = nom; + Image = image; + EstFavori = estFavori; + } + + + + public override bool Equals(object? obj) + { + if (obj == null) return false; + if (this.GetType() != obj.GetType()) + { + return false; + } + else + { + ObjetOhara o = (ObjetOhara)obj; + return o.Nom == Nom; + } + + } + + public override int GetHashCode() + { + + return HashCode.Combine(Nom, Image,EstFavori); + } + public override string ToString() + { + return "ObjetOhara : " + Nom + " " +EstFavori+ " " + Image; + } + + protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) + => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } +} + + diff --git a/Sources/Model/Classes/Personnage.cs b/Sources/Model/Classes/Personnage.cs new file mode 100644 index 0000000..594c7f0 --- /dev/null +++ b/Sources/Model/Classes/Personnage.cs @@ -0,0 +1,169 @@ +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; + +namespace Model.Classes +{ + [DataContract(Name = "personnage")] + + public class Personnage : ObjetOhara + { + [DataMember(Name = "prime")] + private double prime; + public double Prime { + get=>prime; + set + { + prime = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "epithete")] + private string? epithete; + public string? Epithete { + get=>epithete; + set + { + epithete = value; + } + } + [DataMember(Name = "age")] + private int age; + public int Age { + get=>age; + set + { + age = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "taille")] + private double taille; + public double Taille { + get=>taille; + set + { + taille = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "origine")] + private string? origine; + public string? Origine { + get=>origine; + set + { + origine = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "biographie")] + private string? biographie; + public string? Biographie { + get=>biographie; + set + { + biographie = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "citation")] + private string? citation; + public string? Citation { + get=>citation; + set + { + citation = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "equipage", EmitDefaultValue = false)] + private Equipage? equipage; + public Equipage? Equipage { + get => equipage; + set + { + equipage = value; + OnPropertyChanged(); + } + } + [DataMember(Name = "fruit", EmitDefaultValue = false)] + private ObservableCollection fruit = new ObservableCollection(); + public IReadOnlyCollection Fruit { + get=>fruit; + } + public void AjouterFruit(FruitDuDemon? f) + { + if (f == null) return; + fruit.Add(f); + } + public void RetierFruit(FruitDuDemon? f) + { + if (f == null) return; + fruit.Remove(f); + } + public void ViderFruit() => fruit.Clear(); + + + + public Personnage(string nom, double prime, string epithete, int age, double taille, string origine, string biographie, string citation) : base(nom) + { + if (prime < 0) + { + Prime = 0; + } + else + { + Prime = prime; + } + Epithete = epithete; + Age = age; + if (taille < 0) + { + Taille = 0; + } + else + { + Taille = taille; + } + + Origine = origine; + Biographie = biographie; + Citation = citation; + + + } + + public Personnage(string nom, double prime, string epithete, int age, double taille, string origine, string biographie, string citation, string image) : this(nom, prime, epithete, age, taille, origine, biographie, citation) + { + if (String.IsNullOrWhiteSpace(image)) + image = "baseimage.png"; + Image = image; + } + public override bool Equals(object? obj) + { + if (obj == null) return false; + if (this.GetType() != obj.GetType()) + { + return false; + } + else + { + Personnage o = (Personnage)obj; + return o.Nom == Nom; + } + + } + + public override int GetHashCode() + { + return HashCode.Combine(Prime, Epithete, Age, Origine,Biographie, Citation,Equipage,Fruit); + } + + public override string ToString() + { + return "Personnage : " + Nom + " " + EstFavori + " " + Prime + " " + Epithete + " " + Age + " " + Origine + " " + Biographie + " "+ Citation+" " +Equipage+" " + Fruit+" "+ Image; + } + } +} \ No newline at end of file diff --git a/Sources/Model/Equipage.cs b/Sources/Model/Equipage.cs deleted file mode 100644 index 9d047bb..0000000 --- a/Sources/Model/Equipage.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; - -namespace Model -{ - [DataContract(Name = "equipage")] - public class Equipage : ObjetOhara - { - [DataMember(Name = "nomromanise")] - public string NomRomanise { get; set; } - [DataMember(Name = "region")] - public string Region { get; set; } - [DataMember(Name = "premierchap")] - public int PremierChap { get; set; } - [DataMember(Name = "premierep")] - public int PremierEp { get; set; } - [DataMember(Name = "statut")] - public bool Statut { get; set; } - [DataMember(Name = "description")] - public string Description { get; set; } - [DataMember(Name = "capitaine")] - public Personnage? Capitaine { get; set; } - [DataMember(Name = "membre")] - public List Membre { get; set; } = new List(); - [DataMember(Name = "allie")] - public List Allie { get; set; } = new List(); - - - public Equipage(string nom, string nomRomanise, string region, int premierChap, int premierEp, bool statut, string description,string image = "baseimage.png") : base(nom,image) - { - - NomRomanise = nomRomanise; - Region = region; - if(premierEp < 0) - { - PremierEp = 0; - } - else - { - PremierEp = premierEp; - } - if(premierChap < 0) - { - premierChap = 0; - } - else - { - PremierChap = premierChap; - } - Statut = statut; - Description = description; - - } - } -} diff --git a/Sources/Model/FruitDuDemon.cs b/Sources/Model/FruitDuDemon.cs deleted file mode 100644 index 3ca5ccb..0000000 --- a/Sources/Model/FruitDuDemon.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; - -namespace Model -{ - [DataContract(Name = "fruitdudemon")] - public class FruitDuDemon : ObjetOhara - { - [DataMember (Name = "nomromanise")] - public string NomRomanise { get; set; } - [DataMember(Name = "type")] - public string Type { get; set; } - [DataMember(Name = "premierchap")] - public int PremierChap { get; set; } - [DataMember(Name = "premierep")] - public int PremierEp { get; set; } - [DataMember(Name = "description")] - public string Description { get; set; } - [DataMember(Name = "forces")] - public string Forces { get; set; } - [DataMember(Name = "faiblesses")] - public string Faiblesses { get; set; } - [DataMember(Name = "utilisateur",EmitDefaultValue = false)] - public List Utilisateur { get; set; }= new List(); - - - - public FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp, string description, string forces, string faiblesses, string image = "baseimage.png") : base(nom,image) - { - - NomRomanise = nomRomanise; - Type = type; - if (premierEp < 0) - { - PremierEp = 0; - } - else - { - PremierEp = premierEp; - } - if (premierChap < 0) - { - premierChap = 0; - } - else - { - PremierChap = premierChap; - } - Description = description; - Forces = forces; - Faiblesses = faiblesses; - } - - public FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp, string description, string forces, string faiblesses,string image, List utilisateur) : this( nom, nomRomanise, type, premierChap, premierEp, description, forces, faiblesses, image) - { - Utilisateur = utilisateur; - } - } -} diff --git a/Sources/Model/Ile.cs b/Sources/Model/Ile.cs deleted file mode 100644 index cb23bab..0000000 --- a/Sources/Model/Ile.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; - -namespace Model -{ - [DataContract(Name = "ile")] - public class Ile : ObjetOhara - { - [DataMember(Name = "nomromanise")] - public string NomRomanise { get; set; } - [DataMember(Name = "region")] - public string Region { get; set; } - [DataMember(Name = "premierchap")] - public int PremierChap { get; set; } - [DataMember(Name = "premierep")] - public int PremierEp { get; set; } - [DataMember(Name = "description")] - public string Description { get; set; } - [DataMember(Name = "geographie")] - public string Geographie { get; set; } - - - - public Ile(string nom, string nomRomanise, string region, int premierChap, int premierEp, string description, string geographie, string image = "baseimage.png") : base(nom,image) - { - - NomRomanise = nomRomanise; - Region = region; - if (premierEp < 0) - { - PremierEp = 0; - } - else - { - PremierEp = premierEp; - } - if (premierChap < 0) - { - premierChap = 0; - } - else - { - PremierChap = premierChap; - } - Description = description; - Geographie = geographie; - - } - } -} diff --git a/Sources/Model/Manager.cs b/Sources/Model/Manager.cs deleted file mode 100644 index cef6e1a..0000000 --- a/Sources/Model/Manager.cs +++ /dev/null @@ -1,88 +0,0 @@ -using Model.Stub; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model - -{ - public class Manager - { - public IDataManager DataManager { get; set; } - - - - public Manager() { - DataManager = new StubManager(); - } - - public List GetPersonnages() - { - return DataManager.GetPersonnages().ToList(); - } - public List GetFruits() - { - return DataManager.GetFruits().ToList(); - } - public List GetEquipages() - { - return DataManager.GetEquipages().ToList(); - } - public List GetBateaux() - { - return DataManager.GetBateaux().ToList(); - } - public List GetBestiaires() - { - return DataManager.GetBestiaires().ToList(); - } - public List GetIles() - { - return DataManager.GetIles().ToList(); - } - - public List FiltrerFDD(string type) - { - List fdd = GetFruits(); - foreach(FruitDuDemon f in fdd.ToList()) - { - if(f.Type != type) - { - fdd.Remove(f); - } - } - return fdd; - } - - public List RechercheFDD(string text,List listeFDD) - { - if (text == "") { - return listeFDD; - } - foreach(FruitDuDemon f in listeFDD.ToList()) - { - bool correspondance = false; - int textPos = 0; - for (int i = 0; i < (f.Nom.Length); i++) { - if (string.Equals(text[textPos].ToString(), f.Nom[i].ToString(), StringComparison.OrdinalIgnoreCase)) - { - textPos++; - } - if(textPos == text.Length) - { - correspondance = true; - break; - } - - } - if (!correspondance) - { - listeFDD.Remove(f); - } - } - return listeFDD; - } - } -} diff --git a/Sources/Model/IDataManager.cs b/Sources/Model/Managers/IDataManager.cs similarity index 53% rename from Sources/Model/IDataManager.cs rename to Sources/Model/Managers/IDataManager.cs index 8cf01e9..564ca42 100644 --- a/Sources/Model/IDataManager.cs +++ b/Sources/Model/Managers/IDataManager.cs @@ -3,8 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Model.Classes; -namespace Model +namespace Model.Managers { public interface IDataManager { @@ -14,5 +15,11 @@ namespace Model IEnumerable GetFruits(); IEnumerable GetIles(); IEnumerable GetPersonnages(); + void SetBateau(List listeBateaux); + void SetBestiaire(List listeBest); + void SetEquipage(List listeEquip); + void SetFDD(List listeFDD); + void SetIle(List listeIle); + void SetPersonnage(List listePerso); } } diff --git a/Sources/Model/Managers/Manager.cs b/Sources/Model/Managers/Manager.cs new file mode 100644 index 0000000..c9d5614 --- /dev/null +++ b/Sources/Model/Managers/Manager.cs @@ -0,0 +1,306 @@ + +using Model.Classes; +using Microsoft.VisualBasic; +using Model.Serializer; +using Model.Stub; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Resources; +using System.Text; +using System.Threading.Tasks; + +namespace Model.Managers + +{ + public class Manager + { + public IDataManager DataManager { get; set; } + public ObservableCollection Bateaux { get; set; } + public ObservableCollection Personnages { get; set; } + public ObservableCollection Fruits { get; set; } + public ObservableCollection Iles { get; set; } + public ObservableCollection Bestiaire { get; set; } + public ObservableCollection Equipages { get; set; } + + public ObjetOhara? SelectedItem { get; set; } = null; + + public Manager(IDataManager dataManager) { + DataManager = dataManager; + Bateaux = new ObservableCollection(DataManager.GetBateaux()); + Personnages = new ObservableCollection(DataManager.GetPersonnages()); + Fruits = new ObservableCollection(DataManager.GetFruits()); + Iles = new ObservableCollection(DataManager.GetIles()); + Bestiaire = new ObservableCollection(DataManager.GetBestiaires()); + Equipages = new ObservableCollection(DataManager.GetEquipages()); + } + + public List GetPersonnages() + { + return DataManager.GetPersonnages().ToList(); + } + public List GetFruits() + { + return DataManager.GetFruits().ToList(); + } + public List GetEquipages() + { + return DataManager.GetEquipages().ToList(); + } + public List GetBateaux() + { + return DataManager.GetBateaux().ToList(); + } + public List GetBestiaires() + { + return DataManager.GetBestiaires().ToList(); + } + public List GetIles() + { + return DataManager.GetIles().ToList(); + } + + public List FiltrerFDD(string type) + { + List fdd = new List(); + fdd=Fruits.Where(p=>p.Type==type).ToList(); + return fdd; + } + + public List FiltrerBateau(string nom) + { + List bateau = new List(); + bateau = Bateaux.Where(p => p.Affiliation?.Nom == nom).ToList(); + return bateau; + } + + public List FiltrerIle(string region) + { + List ile = new List(); + ile = Iles.Where(p => p.Region == region).ToList(); + return ile; + } + + public List RechercheObjetOhara(string text, List liste) + { + if (text == "") + { + return liste; + } + foreach (ObjetOhara f in liste.ToList()) + { + bool correspondance = false; + int textPos = 0; + for (int i = 0; i < (f.Nom?.Length); i++) + { + if (string.Equals(text[textPos].ToString(), f.Nom[i].ToString(), StringComparison.OrdinalIgnoreCase)) + { + textPos++; + } + if (textPos == text.Length) + { + correspondance = true; + break; + } + + } + if (!correspondance) + { + liste.Remove(f); + } + } + return liste; + } + public List GetFavoris() + { + List listeFavoris = new List(); + listeFavoris.AddRange(Bateaux); + listeFavoris.AddRange(Equipages); + listeFavoris.AddRange(Bestiaire); + listeFavoris.AddRange(Fruits); + listeFavoris.AddRange(Iles); + listeFavoris.AddRange(Personnages); + foreach(ObjetOhara obj in listeFavoris.ToList()) + { + if (obj.EstFavori == false) + { + listeFavoris.Remove(obj); + } + } + return listeFavoris; + } + + public void ModifierFavFDD(FruitDuDemon fruit, bool value) + { + FruitDuDemon? fruitToUpdate = Fruits.FirstOrDefault(b => b.Equals(fruit)); + if (fruitToUpdate != null) + { + fruitToUpdate.EstFavori = value; + DataManager.SetFDD(Fruits.ToList()); + } + } + + public void ModifierFavEquip(Equipage equip, bool value) + { + Equipage? equipToUpdate = Equipages.FirstOrDefault(e => e.Equals(equip)); + if (equipToUpdate != null) + { + equipToUpdate.EstFavori = value; + DataManager.SetEquipage(Equipages.ToList()); + } + } + + public void ModifierFavBest(Bestiaire best, bool value) + { + Bestiaire? bestToUpdate = Bestiaire.FirstOrDefault(b => b.Equals(best)); + if (bestToUpdate != null) + { + bestToUpdate.EstFavori = value; + DataManager.SetBestiaire(Bestiaire.ToList()); + } + } + + public void ModifierFavPerso(Personnage perso, bool value) + { + Personnage? persoToUpdate = Personnages.FirstOrDefault(p => p.Equals(perso)); + if (persoToUpdate != null) + { + persoToUpdate.EstFavori = value; + DataManager.SetPersonnage(Personnages.ToList()); + } + } + + public void ModifierFavIle(Ile ile, bool value) + { + Ile? ileToUpdate = Iles.FirstOrDefault(i => i.Equals(ile)); + if (ileToUpdate != null) + { + ileToUpdate.EstFavori = value; + DataManager.SetIle(Iles.ToList()); + } + } + + public void ModifierFavBateau(Bateau bateau, bool value) + { + Bateau? bateauToUpdate = Bateaux.FirstOrDefault(b => b.Equals(bateau)); + if (bateauToUpdate != null) + { + bateauToUpdate.EstFavori = value; + DataManager.SetBateau(Bateaux.ToList()); + } + } + public void AjouterFDD(FruitDuDemon fruit) + { + Fruits.Add(fruit); + DataManager.SetFDD(Fruits.ToList()); + } + public void AjouterEquip(Equipage equip) + { + Equipages.Add(equip); + DataManager.SetEquipage(Equipages.ToList()); + } + public void AjouterBest(Bestiaire best) + { + Bestiaire.Add(best); + DataManager.SetBestiaire(Bestiaire.ToList()); + } + public void AjouterPerso(Personnage perso) + { + Personnages.Add(perso); + DataManager.SetPersonnage(Personnages.ToList()); + } + public void AjouterIle(Ile ile) + { + Iles.Add(ile); + DataManager.SetIle(Iles.ToList()); + } + public void AjouterBateau(Bateau bateau) + { + Bateaux.Add(bateau); + DataManager.SetBateau(Bateaux.ToList()); + } + public void SupprimerFDD(FruitDuDemon fruit) + { + Fruits.Remove(fruit); + DataManager.SetFDD(Fruits.ToList()); + } + public void SupprimerEquip(Equipage equip) + { + Equipages.Remove(equip); + DataManager.SetEquipage(Equipages.ToList()); + } + public void SupprimerBest(Bestiaire best) + { + Bestiaire.Remove(best); + DataManager.SetBestiaire(Bestiaire.ToList()); + } + public void SupprimerPerso(Personnage perso) + { + Personnages.Remove(perso); + DataManager.SetPersonnage(Personnages.ToList()); + } + public void SupprimerIle(Ile ile) + { + Iles.Remove(ile); + DataManager.SetIle(Iles.ToList()); + } + public void SupprimerBateau(Bateau bateau) + { + Bateaux.Remove(bateau); + DataManager.SetBateau(Bateaux.ToList()); + } + + public void ModifierIle(Ile ile, string ancienNom) + { + Ile? ancienneIle = Iles.FirstOrDefault(p => p.Nom == ancienNom); + if(ancienneIle !=null) { + Iles.Remove(ancienneIle); + Iles.Add(ile); + DataManager.SetIle(Iles.ToList()); + } + } + public void ModifierBest(Bestiaire best, string ancienNom) + { + Bestiaire? ancienBest = Bestiaire.FirstOrDefault(p => p.Nom == ancienNom); + if (ancienBest == null) return; + Bestiaire.Remove(ancienBest); + Bestiaire.Add(best); + DataManager.SetBestiaire(Bestiaire.ToList()); + } + public void ModifierEquipage(Equipage equip, string ancienNom) + { + Equipage? ancienEquip = Equipages.FirstOrDefault(p => p.Nom == ancienNom); + if (ancienEquip == null) return; + Equipages.Remove(ancienEquip); + Equipages.Add(equip); + DataManager.SetEquipage(Equipages.ToList()); + } + + public void ModifierBateau(Bateau bateau, string ancienNom) + { + Bateau? ancienBateau = Bateaux.FirstOrDefault(p => p.Nom == ancienNom); + if (ancienBateau == null) return; + Bateaux.Remove(ancienBateau); + Bateaux.Add(bateau); + DataManager.SetBateau(Bateaux.ToList()); + } + public void ModifierFDD(FruitDuDemon fruit, string ancienNom) + { + FruitDuDemon? ancienFDD = Fruits.FirstOrDefault(p => p.Nom == ancienNom); + if (ancienFDD == null) return; + Fruits.Remove(ancienFDD); + Fruits.Add(fruit); + DataManager.SetFDD(Fruits.ToList()); + } + public void ModifierPerso(Personnage perso, string ancienNom) + { + Personnage? ancienPerso = Personnages.FirstOrDefault(p => p.Nom == ancienNom); + if (ancienPerso == null) return; + Personnages.Remove(ancienPerso); + Personnages.Add(perso); + DataManager.SetPersonnage(Personnages.ToList()); + } + } +} diff --git a/Sources/Model/Model.csproj b/Sources/Model/Model.csproj index 4658cbf..e9bb112 100644 --- a/Sources/Model/Model.csproj +++ b/Sources/Model/Model.csproj @@ -1,4 +1,4 @@ - + net7.0 diff --git a/Sources/Model/ObjetOhara.cs b/Sources/Model/ObjetOhara.cs deleted file mode 100644 index 0efc395..0000000 --- a/Sources/Model/ObjetOhara.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace Model -{ - [DataContract(Name = "objetohara")] - public class ObjetOhara - { - [DataMember (Name = "nom")] - public string Nom { get; set; } - [DataMember (Name ="image")] - public string? Image { get; set;} - - public ObjetOhara(string nom,string image) { - Nom = nom; - Image = image; - } - } -} diff --git a/Sources/Model/Personnage.cs b/Sources/Model/Personnage.cs deleted file mode 100644 index 1eb7009..0000000 --- a/Sources/Model/Personnage.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.Runtime.Serialization; - -namespace Model -{ - [DataContract(Name = "personnage")] - public class Personnage : ObjetOhara - { - [DataMember(Name = "prime")] - public double Prime { get; set; } - [DataMember(Name = "epithete")] - public string Epithete { get; set; } - [DataMember(Name = "age")] - public int Age { get; set; } - [DataMember(Name = "taille")] - public double Taille { get; set; } - [DataMember(Name = "origine")] - public string Origine { get; set; } - [DataMember(Name = "biographie")] - public string Biographie { get; set; } - [DataMember(Name = "citation")] - public string Citation { get; set; } - [DataMember(Name="equipage",EmitDefaultValue = false)] - public Equipage? Equipage { get; set; } - [DataMember(Name="fruit",EmitDefaultValue = false)] - public List Fruit { get; set; } = new List(); - - - - - public Personnage(string nom, double prime, string epithete, int age, double taille, string origine, string biographie, string citation, string image = "baseimage.png") : base(nom,image) - { - if(prime < 0) - { - Prime = 0; - } - else - { - Prime = prime; - } - Epithete = epithete; - Age = age; - if(taille < 0) - { - Taille = 0; - } - else - { - Taille= taille; - } - - Origine = origine; - Biographie = biographie; - Citation = citation; - - - } - public Personnage(string nom, double prime, string epithete, int age, double taille, string origine, string biographie, string citation,string image ,Equipage equipage,List fruit) : this(nom,prime,epithete,age,taille,origine,biographie,citation,image) - { - Equipage = equipage; - Fruit = fruit; - - } - } -} \ No newline at end of file diff --git a/Sources/Model/Serializer/XML_Serializer.cs b/Sources/Model/Serializer/XML_Serializer.cs index 8d5031a..86e4259 100644 --- a/Sources/Model/Serializer/XML_Serializer.cs +++ b/Sources/Model/Serializer/XML_Serializer.cs @@ -1,25 +1,64 @@ -using System; +using Model.Stub; +using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml; +using Model.Classes; +using Model.Managers; namespace Model.Serializer { public class XML_Serializer : IDataManager { + public string Chemin { get; set; } public XML_Serializer() { - + StubManager stubManager = new StubManager(); + Chemin = Directory.GetCurrentDirectory(); + InitialiserFichiers(stubManager); + } + public XML_Serializer(string path) + { + Chemin= path; + StubManager stubManager = new StubManager(); + InitialiserFichiers(stubManager); + } + public void InitialiserFichiers(StubManager stubManager) + { + if (!File.Exists(Path.Combine(Chemin, "./personnage.xml"))) + { + SetPersonnage(stubManager.GetPersonnages().ToList()); + } + if (!File.Exists(Path.Combine(Chemin, "./bateau.xml"))) + { + SetBateau(stubManager.GetBateaux().ToList()); + } + if (!File.Exists(Path.Combine(Chemin, "./fruitdudemon.xml"))) + { + SetFDD(stubManager.GetFruits().ToList()); + } + if (!File.Exists(Path.Combine(Chemin, "./bestiaire.xml"))) + { + SetBestiaire(stubManager.GetBestiaires().ToList()); + } + if (!File.Exists(Path.Combine(Chemin, "./equipage.xml"))) + { + SetEquipage(stubManager.GetEquipages().ToList()); + } + if (!File.Exists(Path.Combine(Chemin, "./ile.xml"))) + { + SetIle(stubManager.GetIles().ToList()); + } } public void SetPersonnage(List listePerso) { var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "personnage.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; using (TextWriter tw = File.CreateText(xmlFile)) { @@ -36,7 +75,7 @@ namespace Model.Serializer { var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "fruitdudemon.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; using (TextWriter tw = File.CreateText(xmlFile)) { @@ -54,7 +93,7 @@ namespace Model.Serializer { var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "bestiaire.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; using (TextWriter tw = File.CreateText(xmlFile)) { @@ -72,7 +111,7 @@ namespace Model.Serializer { var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "equipage.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; using (TextWriter tw = File.CreateText(xmlFile)) { @@ -90,7 +129,7 @@ namespace Model.Serializer { var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "ile.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; using (TextWriter tw = File.CreateText(xmlFile)) { @@ -108,7 +147,7 @@ namespace Model.Serializer { var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "bateau.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; using (TextWriter tw = File.CreateText(xmlFile)) { @@ -124,24 +163,26 @@ namespace Model.Serializer public IEnumerable GetBateaux() { - List listeBateau = new List(); + List? listeBateau = new List(); var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "bateau.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); using (Stream s = File.OpenRead(xmlFile)) { listeBateau = serializer.ReadObject(s) as List; } + + return listeBateau; } public IEnumerable GetBestiaires() { - List listeBest = new List(); + List? listeBest = new List(); var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "bestiaire.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); using (Stream s = File.OpenRead(xmlFile)) { @@ -151,10 +192,10 @@ namespace Model.Serializer } public IEnumerable GetEquipages() { - List listeEquip = new List(); + List? listeEquip = new List(); var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "equipage.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); using (Stream s = File.OpenRead(xmlFile)) { @@ -164,10 +205,10 @@ namespace Model.Serializer } public IEnumerable GetFruits() { - List listeFDD = new List(); + List? listeFDD = new List(); var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "fruitdudemon.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); using (Stream s = File.OpenRead(xmlFile)) { @@ -177,10 +218,10 @@ namespace Model.Serializer } public IEnumerable GetIles() { - List listeIle = new List(); + List? listeIle = new List(); var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "ile.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); using (Stream s = File.OpenRead(xmlFile)) { @@ -190,10 +231,10 @@ namespace Model.Serializer } public IEnumerable GetPersonnages() { - List listePerso = new List(); + List? listePerso = new List(); var serializer = new DataContractSerializer(typeof(List)); string xmlFile = "personnage.xml"; - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "./")); + Directory.SetCurrentDirectory(Path.Combine(Chemin, "./")); using (Stream s = File.OpenRead(xmlFile)) { diff --git a/Sources/Model/Stub/StubBateau.cs b/Sources/Model/Stub/StubBateau.cs index a5c1e4d..7069b98 100644 --- a/Sources/Model/Stub/StubBateau.cs +++ b/Sources/Model/Stub/StubBateau.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Model.Classes; using static System.Net.Mime.MediaTypeNames; namespace Model.Stub @@ -11,11 +12,21 @@ namespace Model.Stub { public IEnumerable RecupererBateau() { + Bateau sunny = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", "sunny.png"); + Bateau merry =new Bateau("Vogue Merry", "Goingu Merri-go", 41, 17, "Le Vogue Merry est...", "Ce bateau a pour particularités ...", "vogue_merry.png"); + Bateau moby = new Bateau("Moby Dick", "Mobi Dikku-go", 234, 151, "Le Moby Dick est...", "Ce bateau a pour particularités ...", "moby_dick.png"); + StubEquipage stubEquipage = new StubEquipage(); + StubPersonnage stubPersonnage = new StubPersonnage(); + stubEquipage.ChargerEquipage(stubPersonnage.RecupererPersonnage().ToList()); + List equipages = stubEquipage.RecupererEquipage().ToList(); + sunny.Affiliation = equipages.FirstOrDefault(p => p.Nom == "Équipage au chapeau de paille"); + merry.Affiliation = equipages.FirstOrDefault(p => p.Nom == "Équipage au chapeau de paille"); + moby.Affiliation = equipages.FirstOrDefault(p => p.Nom == "Équipage de Barbe Blanche"); List bateau = new List() { - new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", "sunny.png"), - new Bateau("Vogue Merry", "Goingu Merri-go", 41, 17, "Le Vogue Merry est...", "Ce bateau a pour particularités ...", "vogue_merry.png"), - new Bateau("Moby Dick", "Mobi Dikku-go", 234, 151, "Le Moby Dick est...", "Ce bateau a pour particularités ...", "moby_dick.png"), + sunny, + merry, + moby, }; return bateau; } diff --git a/Sources/Model/Stub/StubBestiaire.cs b/Sources/Model/Stub/StubBestiaire.cs index 5a0fbb6..a70eca0 100644 --- a/Sources/Model/Stub/StubBestiaire.cs +++ b/Sources/Model/Stub/StubBestiaire.cs @@ -1,25 +1,26 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Stub -{ - public class StubBestiaire - { - public IEnumerable RecupererBestiaire() - { - List best = new List() - { - new Bestiaire("Humains", "??", "Les humains sont ...","Ils possèdent les caractéristiques suivantes ...","humain.png"), - new Bestiaire("Géants", "Elbaf", "Les géants sont ...","Ils possèdent les caractéristiques suivantes ...","geant.png"), - new Bestiaire("Hommes poissons", "Îles des hommes poissons", "Les hommes poissons sont ...","Ils possèdent les caractéristiques suivantes ...","hpoisson.png"), - new Bestiaire("Lunariens", "Redline", "Les lunariens sont ...","Ils possèdent les caractéristiques suivantes ...","lunarien.png"), - new Bestiaire("Minks", "Zo", "Les minks sont ...","Ils possèdent les caractéristiques suivantes ...","minks.png"), - - }; - return best; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Model.Classes; + +namespace Model.Stub +{ + public class StubBestiaire + { + public IEnumerable RecupererBestiaire() + { + List best = new List() + { + new Bestiaire("Humains", "??", "Les humains sont ...","Ils possèdent les caractéristiques suivantes ...","humain.png"), + new Bestiaire("Géants", "Elbaf", "Les géants sont ...","Ils possèdent les caractéristiques suivantes ...","geant.png"), + new Bestiaire("Hommes poissons", "Îles des hommes poissons", "Les hommes poissons sont ...","Ils possèdent les caractéristiques suivantes ...","hpoisson.png"), + new Bestiaire("Lunariens", "Redline", "Les lunariens sont ...","Ils possèdent les caractéristiques suivantes ...","lunarien.png"), + new Bestiaire("Minks", "Zo", "Les minks sont ...","Ils possèdent les caractéristiques suivantes ...","minks.png"), + + }; + return best; + } + } +} diff --git a/Sources/Model/Stub/StubEquipage.cs b/Sources/Model/Stub/StubEquipage.cs index 17a5055..184284e 100644 --- a/Sources/Model/Stub/StubEquipage.cs +++ b/Sources/Model/Stub/StubEquipage.cs @@ -1,34 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Stub -{ - public class StubEquipage - { - public IEnumerable RecupererEquipage() - { - List Lequipage = new List() - { - new Equipage("Équipage au chapeau de paille", "Mugiwara No Ichimi", "East Blue", 1, 1, true, "L'équipage du Chapeau de Paille ...","mugiwara.jpg"), - new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", 1, 4, true, "L'équipage du Roux ...","roux.png"), - new Equipage("Équipage du Clown", "Bagï Kalzokudan", "East Blue", 8, 4, true, "L'équipage du Clown ...","clown.png"), - new Equipage("Équipage de Barbe Blanche", "Shirohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Blanche ...","blanche.jpg"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...","noire.png"), - }; - return Lequipage; - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Model.Classes; + +namespace Model.Stub +{ + public class StubEquipage + { + public List? Equipages { get; set; } + + public void ChargerEquipage(List persos) + { + var paille = new Equipage("Équipage au chapeau de paille", "Mugiwara No Ichimi", "East Blue", 1, 1, true, "L'équipage du Chapeau de Paille ...", "mugiwara.jpg"); + var roux = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", 1, 4, true, "L'équipage du Roux ...", "roux.png"); + var clown = new Equipage("Équipage du Clown", "Bagï Kalzokudan", "East Blue", 8, 4, true, "L'équipage du Clown ...", "clown.png"); + var blanche = new Equipage("Équipage de Barbe Blanche", "Shirohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Blanche ...", "blanche.jpg"); + var noire = new Equipage("Équipage de Barbe Noire", "Kurohige Kaizokudan", "East Blue", 234, 151, true, "L'équipage de Barbe Noire ...", "noire.png"); + paille.AjouterAllie(clown); + paille = RemplirEquipage(paille, persos, new List { "Luffy" }); + Equipages = new List() + { + paille, + roux, + clown, + blanche, + }; + } + public IEnumerable RecupererEquipage() + { + + return Equipages; + } + public Equipage RemplirEquipage(Equipage equipage,List persos,List noms) + { + var persos2 = persos.Where(p => noms.Contains(p.Nom)); + foreach (Personnage p in persos2) + equipage.AjouterMembre(p); + return equipage; + + } + } } \ No newline at end of file diff --git a/Sources/Model/Stub/StubFruitDuDemon.cs b/Sources/Model/Stub/StubFruitDuDemon.cs index d59f908..9862470 100644 --- a/Sources/Model/Stub/StubFruitDuDemon.cs +++ b/Sources/Model/Stub/StubFruitDuDemon.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Model.Classes; namespace Model.Stub { diff --git a/Sources/Model/Stub/StubIle.cs b/Sources/Model/Stub/StubIle.cs index 2ed4367..aac92a2 100644 --- a/Sources/Model/Stub/StubIle.cs +++ b/Sources/Model/Stub/StubIle.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Model.Classes; using static System.Net.Mime.MediaTypeNames; namespace Model.Stub @@ -14,8 +15,8 @@ namespace Model.Stub List ile = new List() { new Ile("Dawn", "Don-to", "East Blue", 1, 4, "L'île de Dawn est ...", "Cette île est situé dans la mer d'East Blue près de ...", "dawn.png"), - new Ile("Water Seven", "Mizu no Miyako Wōtā Sebun", "Première partie de Grand Line", 323, 229, "Water Seven est ...", "Cette île est situé dans la première partie de Grand Line près de ...", "water_seven.png"), - new Ile("Alabsta", "Arabasuta-Ōkoku'", "Première partie de Grand Line", 113, 78, "L'île d'Alabsta est ...", "Cette île est situé dans la première partie de Grand Line près de ...", "alabasta.png"), + new Ile("Water Seven", "Mizu no Miyako Wōtā Sebun", "Grand Line", 323, 229, "Water Seven est ...", "Cette île est situé dans la première partie de Grand Line près de ...", "water_seven.png"), + new Ile("Alabsta", "Arabasuta-Ōkoku'", "Grand Line", 113, 78, "L'île d'Alabsta est ...", "Cette île est situé dans la première partie de Grand Line près de ...", "alabasta.png"), }; return ile; } diff --git a/Sources/Model/Stub/StubManager.cs b/Sources/Model/Stub/StubManager.cs index bbb04b7..361dba6 100644 --- a/Sources/Model/Stub/StubManager.cs +++ b/Sources/Model/Stub/StubManager.cs @@ -1,14 +1,17 @@ -using System; +using Model.Serializer; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Model.Classes; +using Model.Managers; namespace Model.Stub { public class StubManager : IDataManager { - + public StubPersonnage StubPersonnage { get; set; } public StubFruitDuDemon StubFruitDuDemon { get; set; } public StubEquipage StubEquipage { get; set; } @@ -28,7 +31,8 @@ namespace Model.Stub public IEnumerable GetPersonnages() - { + { + return StubPersonnage.RecupererPersonnage(); } @@ -38,6 +42,7 @@ namespace Model.Stub } public IEnumerable GetEquipages() { + StubEquipage.ChargerEquipage(StubPersonnage.RecupererPersonnage().ToList()); return StubEquipage.RecupererEquipage(); } public IEnumerable GetBateaux() @@ -52,5 +57,35 @@ namespace Model.Stub { return StubIle.RecupererIle(); } + + public void SetBateau(List listeBateaux) + { + return; + } + + public void SetBestiaire(List listeBest) + { + return; + } + + public void SetEquipage(List listeEquip) + { + return; + } + + public void SetFDD(List listeFDD) + { + return; + } + + public void SetIle(List listeIle) + { + return; + } + + public void SetPersonnage(List listePerso) + { + return; + } } } diff --git a/Sources/Model/Stub/StubPersonnage.cs b/Sources/Model/Stub/StubPersonnage.cs index 1d1b8eb..3599b2c 100644 --- a/Sources/Model/Stub/StubPersonnage.cs +++ b/Sources/Model/Stub/StubPersonnage.cs @@ -4,21 +4,65 @@ using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; +using Model.Classes; namespace Model.Stub { public class StubPersonnage { + public IEnumerable RecupererPersonnage() { - List perso = new List() + var luffy = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, 1.74, "East Blue", "Monkey D. Luffy (モンキー・D・ルフィ, Monkī Dī Rufi) est un pirate et le principal protagoniste du manga et anime One Piece. Luffy est le fils du chef de l'Armée Révolutionnaire, Monkey D. Dragon, le petit-fils du célèbre héros de la Marine, Monkey D. Garp, le fils adoptif d'une bandit des montagnes, Curly Dadan ainsi que le frère adoptif du défunt Portgas D. Ace et de Sabo.\n\nSon rêve le plus cher est de devenir le Seigneur des Pirates en trouvant le trésor légendaire One Piece, caché quelque part dans le monde par Gol D. Roger. Selon lui, ce rêve se concrétisera, en devenant la personne la plus libre qui soit. Il a mangé par erreur un Fruit du Démon, le Gomu Gomu no Mi, qui lui permet d'être un homme-élastique, que l'Équipage du Roux avait pris à un convoi du Gouvernement Mondial.\n\n En tant que fondateur et Capitaine de l'Équipage du Chapeau de Paille, il est le premier membre à en faire partie. C'est également le fondateur involontaire de la Grande Flotte du Chapeau de Paille, même s'il refuse cependant d'en être le Capitaine, ne désirant pas priver les autres de leur liberté. ", "\"Le Roi des Pirates, ce sera moi !\"", "luffy.png"); + var nami = new Personnage("Nami", 366000000, "Le Chatte Voleuse", 20, 1.70, "East Blue", "Nami, alias La Chatte Voleuse (泥棒猫, Dorobō Neko), est la navigatrice de L'Équipage du Chapeau de Paille. Elle est la deuxième personne à se joindre à l'équipage après Zoro. Elle a brièvement trahi l'Équipage du Chapeau de Paille pendant l'Arc Baratie et les rejoignit officiellement à la fin de l'Arc d'Arlong après que son passé et ses intentions furent révélés. Son rêve est de dessiner une carte complète du monde. Sa prime actuelle s'élève à 366 000 000 berry.", "\"Je n'aime que deux choses, l'argent et les mandarines !!\"", "nami.png"); + var usopp = new Personnage("Usopp", 500000000, "Dieu Usopp", 19, 1.76, "East Blue", "Usopp (ウソップ, Usoppu), également nommé Pipo dans les anciennes éditions de Glénat du manga, est un membre de L'Équipage du Chapeau de Paille, il occupe le poste de Tireur d'Élite. Il est originaire du Village de Sirop. Bien que n'étant pas Charpentier Naval, il s'occupait également de réparer le Vogue Merry (dont il colmatait les trous avec les moyens du bord). Il est ensuite remplacé par Franky, lorsque ce dernier et le Thousand Sunny rejoignirent l'équipage, pour ce qui est de l'entretien du navire.\n\nLorsqu’il était au Village de Sirop, il était le Capitaine de l'Équipage du Capitaine Usopp et était connu par les membres de son équipage comme le Capitaine Usopp (船長ウソップ, Kyaputen Usoppu). Il a d'ailleurs gardé ce pseudonyme qui fait partie de ses répliques cultes. Il a dissous l'équipage lorsqu'il est parti en mer et qu'il a rejoint l'Équipage du Chapeau de Paille. Il est le fils de Yasopp, membre de l'Équipage du Roux.\n\nSon rêve est de devenir un valeureux guerrier des mers, et de suivre les traces de son père, et il estime qu'il pourra mourir tranquille lorsqu'il l'aura réalisé. Il pourra alors se dire : \"C'est moi Usopp !! Le preux guerrier des mers!!\".\n\nAlors que sa prime initiale était seulement de 30 000 000 berrys (sous le pseudonyme de Sogeking (そげキング, Sogekingu)) avant l'ellipse, celle-ci a drastiquement augmenté, allant jusqu'à 200 000 000 de berry(sous le pseudonyme de God Usopp (神ウソップ, Goddo Usoppu)) suite aux événements de l'Arc Dressrosa, puis 500.000.000 de berry après les événements de l'Arc Pays des Wa. ", "\"Je suis le grand capitaine Usopp ! J'ai 8 000 hommes sous mon commandement ! C'est moi qui fait la loi sur cette île ! Je vous préviens, quittez ce village pendant qu'il est encore temps sinon vous aurez à faire à moi et à mes hommes!\"", "usopp.png"); + var zoro = new Personnage("Zoro", 1111000000, "Le Chasseur de Pirates", 21, 1.81, "East Blue", "Roronoa Zoro le Chasseur de Pirates est un pirate, un ex-chasseur de pirates et l'un des protagonistes de One Piece.\n\nIl fut le premier membre à rejoindre l'Équipage du Chapeau de Paille, il en est le premier et principal épéiste. Son ambition est de devenir le meilleur sabreur au monde et il a d'ailleurs montré une volonté de fer dans le but d'y parvenir. C'est un maître escrimeur qui peut utiliser plusieurs styles de combat dont la particularité repose sur le nombre d'épées, ses capacités au combat sont telles qu'il donne parfois l'impression aux personnes extérieures à l'équipage d'être le véritable Capitaine.\n\nZoro fait partie des Onze Supernovas avec sa prime de 120 000 000 de berry qu'il a obtenu avant ellipse, il est ainsi l'une des deux personnes du groupe à être Supernova sans pour autant être capitaine d'équipage. Après l'ellipse, suite aux événements de Dressrosa, il possède une prime de 320 000 000 de berry, ce qui en fait la quatrième plus grosse prime de l'équipage. Après les événements de l'Arc Pays des Wa, sa prime monte ensuite à 1.111.000.000 de berry.\n\nIl est né dans East Blue, Zoro étant le fils de Tera et Roronoa Arashi, et le petit-fils de Shimotsuki Furiko et Roronoa Pinzoro, faisant de lui un descendant de la Fami lleShimotsuki du Pays des Wa.", "\"Un coup dans le dos est le déshonneur pour un sabreur !\"", "zoro.png"); + var robin = new Personnage("Robin", 1111000000, "", 21, 1.81, "East Blue", "", "\"Un coup dans le dos est le déshonneur pour un sabreur !\"", "robin.jpg"); + var chopper = new Personnage("Chopper", 1111000000, "", 21, 1.81, "East Blue", "", "\"Un coup dans le dos est le déshonneur pour un sabreur !\"", "chopper.jpg"); + var brook = new Personnage("Brook", 1111000000, "", 21, 1.81, "East Blue", "", "\"Un coup dans le dos est le déshonneur pour un sabreur !\"", "brook.png"); + StubEquipage stubEquipage = new StubEquipage(); + StubFruitDuDemon stubFruitDuDemon = new StubFruitDuDemon(); + + List fruits = new List(stubFruitDuDemon.RecupererFruit()); + + + luffy.AjouterFruit(fruits.FirstOrDefault(p => p.Nom == "Fruit de l'humain modèle Nika")); + robin.AjouterFruit(fruits.FirstOrDefault(p => p.Nom == "Fruit des Éclosions")); + + + List persos = new List() { - new Personnage("Luffy", 3000000000,"Luffy au Chapeau de Paille", 19, 1.74, "East Blue", "Monkey D. Luffy (モンキー・D・ルフィ, Monkī Dī Rufi) est un pirate et le principal protagoniste du manga et anime One Piece. Luffy est le fils du chef de l'Armée Révolutionnaire, Monkey D. Dragon, le petit-fils du célèbre héros de la Marine, Monkey D. Garp, le fils adoptif d'une bandit des montagnes, Curly Dadan ainsi que le frère adoptif du défunt Portgas D. Ace et de Sabo.\n\nSon rêve le plus cher est de devenir le Seigneur des Pirates en trouvant le trésor légendaire One Piece, caché quelque part dans le monde par Gol D. Roger. Selon lui, ce rêve se concrétisera, en devenant la personne la plus libre qui soit. Il a mangé par erreur un Fruit du Démon, le Gomu Gomu no Mi, qui lui permet d'être un homme-élastique, que l'Équipage du Roux avait pris à un convoi du Gouvernement Mondial.\n\n En tant que fondateur et Capitaine de l'Équipage du Chapeau de Paille, il est le premier membre à en faire partie. C'est également le fondateur involontaire de la Grande Flotte du Chapeau de Paille, même s'il refuse cependant d'en être le Capitaine, ne désirant pas priver les autres de leur liberté. ", "\"Le Roi des Pirates, ce sera moi !\"", "luffy.png"), - new Personnage("Nami", 366000000, "Le Chatte Voleuse", 20, 1.70, "East Blue", "Nami, alias La Chatte Voleuse (泥棒猫, Dorobō Neko), est la navigatrice de L'Équipage du Chapeau de Paille. Elle est la deuxième personne à se joindre à l'équipage après Zoro. Elle a brièvement trahi l'Équipage du Chapeau de Paille pendant l'Arc Baratie et les rejoignit officiellement à la fin de l'Arc d'Arlong après que son passé et ses intentions furent révélés. Son rêve est de dessiner une carte complète du monde. Sa prime actuelle s'élève à 366 000 000 berry.", "\"Je n'aime que deux choses, l'argent et les mandarines !!\"", "nami.png"), - new Personnage("Usopp", 500000000,"Dieu Usopp", 19, 1.76, "East Blue", "Usopp (ウソップ, Usoppu), également nommé Pipo dans les anciennes éditions de Glénat du manga, est un membre de L'Équipage du Chapeau de Paille, il occupe le poste de Tireur d'Élite. Il est originaire du Village de Sirop. Bien que n'étant pas Charpentier Naval, il s'occupait également de réparer le Vogue Merry (dont il colmatait les trous avec les moyens du bord). Il est ensuite remplacé par Franky, lorsque ce dernier et le Thousand Sunny rejoignirent l'équipage, pour ce qui est de l'entretien du navire.\n\nLorsqu’il était au Village de Sirop, il était le Capitaine de l'Équipage du Capitaine Usopp et était connu par les membres de son équipage comme le Capitaine Usopp (船長ウソップ, Kyaputen Usoppu). Il a d'ailleurs gardé ce pseudonyme qui fait partie de ses répliques cultes. Il a dissous l'équipage lorsqu'il est parti en mer et qu'il a rejoint l'Équipage du Chapeau de Paille. Il est le fils de Yasopp, membre de l'Équipage du Roux.\n\nSon rêve est de devenir un valeureux guerrier des mers, et de suivre les traces de son père, et il estime qu'il pourra mourir tranquille lorsqu'il l'aura réalisé. Il pourra alors se dire : \"C'est moi Usopp !! Le preux guerrier des mers!!\".\n\nAlors que sa prime initiale était seulement de 30 000 000 berrys (sous le pseudonyme de Sogeking (そげキング, Sogekingu)) avant l'ellipse, celle-ci a drastiquement augmenté, allant jusqu'à 200 000 000 de berry(sous le pseudonyme de God Usopp (神ウソップ, Goddo Usoppu)) suite aux événements de l'Arc Dressrosa, puis 500.000.000 de berry après les événements de l'Arc Pays des Wa. ", "\"Je suis le grand capitaine Usopp ! J'ai 8 000 hommes sous mon commandement ! C'est moi qui fait la loi sur cette île ! Je vous préviens, quittez ce village pendant qu'il est encore temps sinon vous aurez à faire à moi et à mes hommes!\"", "usopp.png"), - new Personnage("Zoro", 1111000000,"Le Chasseur de Pirates", 21, 1.81, "East Blue", "Roronoa Zoro le Chasseur de Pirates est un pirate, un ex-chasseur de pirates et l'un des protagonistes de One Piece.\n\nIl fut le premier membre à rejoindre l'Équipage du Chapeau de Paille, il en est le premier et principal épéiste. Son ambition est de devenir le meilleur sabreur au monde et il a d'ailleurs montré une volonté de fer dans le but d'y parvenir. C'est un maître escrimeur qui peut utiliser plusieurs styles de combat dont la particularité repose sur le nombre d'épées, ses capacités au combat sont telles qu'il donne parfois l'impression aux personnes extérieures à l'équipage d'être le véritable Capitaine.\n\nZoro fait partie des Onze Supernovas avec sa prime de 120 000 000 de berry qu'il a obtenu avant ellipse, il est ainsi l'une des deux personnes du groupe à être Supernova sans pour autant être capitaine d'équipage. Après l'ellipse, suite aux événements de Dressrosa, il possède une prime de 320 000 000 de berry, ce qui en fait la quatrième plus grosse prime de l'équipage. Après les événements de l'Arc Pays des Wa, sa prime monte ensuite à 1.111.000.000 de berry.\n\nIl est né dans East Blue, Zoro étant le fils de Tera et Roronoa Arashi, et le petit-fils de Shimotsuki Furiko et Roronoa Pinzoro, faisant de lui un descendant de la Famille Shimotsuki du Pays des Wa.", "\"Un coup dans le dos est le déshonneur pour un sabreur !\"", "zoro.png"), + luffy, + nami, + usopp, + zoro, + robin, + chopper, + brook, + }; - return perso; + //stubEquipage.ChargerEquipage(persos); + //List equipages = new List(stubEquipage.RecupererEquipage()); + //var equip = equipages.Where(p => p.Nom == "Équipage au chapeau de paille"); + //luffy.Equipage.AddRange(equip); + //nami.Equipage.AddRange(equip); + //usopp.Equipage.AddRange(equip); + //zoro.Equipage.AddRange(equip); + //robin.Equipage.AddRange(equip); + //brook.Equipage.AddRange(equip); + //chopper.Equipage.AddRange(equip); + //List persos2 = new List() + //{ + // luffy, + // nami, + // usopp, + // zoro, + // robin, + // chopper, + // brook, + + //}; + return persos; } } } \ No newline at end of file diff --git a/Sources/Ohara.sln b/Sources/Ohara.sln index d536ff9..25fd92f 100644 --- a/Sources/Ohara.sln +++ b/Sources/Ohara.sln @@ -9,7 +9,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestConsole", "TestConsole\TestConsole.csproj", "{82A1ED67-9A29-4F12-94CD-2DC8221DE374}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject1", "TestProject1\TestProject1.csproj", "{4AD3B218-1007-4859-BC93-2B3E957632E0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestProject1", "TestProject1\TestProject1.csproj", "{4AD3B218-1007-4859-BC93-2B3E957632E0}" ProjectSection(ProjectDependencies) = postProject {A0307D66-E621-4BC1-A239-87C9021E7CFD} = {A0307D66-E621-4BC1-A239-87C9021E7CFD} EndProjectSection diff --git a/Sources/Ohara/App.xaml.cs b/Sources/Ohara/App.xaml.cs index 9ac759d..7347f52 100644 --- a/Sources/Ohara/App.xaml.cs +++ b/Sources/Ohara/App.xaml.cs @@ -1,11 +1,29 @@ -namespace Ohara; +using Model.Serializer; +using Model.Stub; +using Model.Managers; + +namespace Ohara; + public partial class App : Application { - public App() + + public Manager manager { get; set; } = new Manager(new XML_Serializer(FileSystem.Current.AppDataDirectory)); + public App() { - InitializeComponent(); - - MainPage = new AppShell(); + InitializeComponent(); + Routing.RegisterRoute(nameof(PageInfoIle), typeof(PageInfoIle)); + Routing.RegisterRoute(nameof(PageInfoBateau), typeof(PageInfoBateau)); + Routing.RegisterRoute(nameof(PageInfoBestiaire), typeof(PageInfoBestiaire)); + Routing.RegisterRoute(nameof(PageInfoEquipage), typeof(PageInfoEquipage)); + Routing.RegisterRoute(nameof(PageInfoFdd), typeof(PageInfoFdd)); + Routing.RegisterRoute(nameof(PageInfoPersonnage), typeof(PageInfoPersonnage)); + Routing.RegisterRoute(nameof(ModalIle), typeof(ModalIle)); + Routing.RegisterRoute(nameof(ModalBestiaire), typeof(ModalBestiaire)); + Routing.RegisterRoute(nameof(ModalFDD), typeof(ModalFDD)); + Routing.RegisterRoute(nameof(ModalPersonnage), typeof(ModalPersonnage)); + Routing.RegisterRoute(nameof(ModalEquipage), typeof(ModalEquipage)); + Routing.RegisterRoute(nameof(ModalBateau), typeof(ModalBateau)); + MainPage = new AppShell(); } } diff --git a/Sources/Ohara/AppShell.xaml b/Sources/Ohara/AppShell.xaml index ee7e3c1..4c2b3ae 100644 --- a/Sources/Ohara/AppShell.xaml +++ b/Sources/Ohara/AppShell.xaml @@ -4,17 +4,178 @@ xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Ohara" - Shell.FlyoutBehavior="Flyout" - Shell.NavBarIsVisible="False"> + xmlns:icon="clr-namespace:Ohara.Resources" + FlyoutBackgroundColor="White" + Shell.FlyoutBehavior="Locked" + Shell.NavBarIsVisible="False" + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + diff --git a/Sources/Ohara/AppShell.xaml.cs b/Sources/Ohara/AppShell.xaml.cs index d8ecc87..250878a 100644 --- a/Sources/Ohara/AppShell.xaml.cs +++ b/Sources/Ohara/AppShell.xaml.cs @@ -1,9 +1,13 @@ namespace Ohara; +using Model; + public partial class AppShell : Shell { - public AppShell() + + public AppShell() { InitializeComponent(); + } } diff --git a/Sources/Ohara/MainPage.xaml b/Sources/Ohara/MainPage.xaml index 4101d0e..7d6c440 100644 --- a/Sources/Ohara/MainPage.xaml +++ b/Sources/Ohara/MainPage.xaml @@ -4,44 +4,56 @@ xmlns:local="clr-namespace:Ohara" x:Class="Ohara.MainPage" BackgroundColor="#e2edf1"> + + + + + - - - - - - - - - - - - - - - - - - + + + + +<<<<<<< HEAD @@ -53,4 +65,8 @@ +======= + + +>>>>>>> master diff --git a/Sources/Ohara/MainPage.xaml.cs b/Sources/Ohara/MainPage.xaml.cs index fe9e482..cde458b 100644 --- a/Sources/Ohara/MainPage.xaml.cs +++ b/Sources/Ohara/MainPage.xaml.cs @@ -1,13 +1,15 @@ using Microsoft.Maui.Platform; +using Model.Managers; using Plugin.Maui.Audio; namespace Ohara; public partial class MainPage : ContentPage { + public Manager manager => (App.Current as App).manager; public MainPage() - { - InitializeComponent(); - + { + InitializeComponent(); + BindingContext = manager; } } diff --git a/Sources/Ohara/MauiProgram.cs b/Sources/Ohara/MauiProgram.cs index 8e2f0f3..2942024 100644 --- a/Sources/Ohara/MauiProgram.cs +++ b/Sources/Ohara/MauiProgram.cs @@ -1,7 +1,11 @@ using Microsoft.Extensions.Logging; + + + namespace Ohara; + public static class MauiProgram { public static MauiApp CreateMauiApp() @@ -12,8 +16,9 @@ public static class MauiProgram .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); - fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); - }); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + fonts.AddFont("typicons.ttf", "Icons"); + }); #if DEBUG builder.Logging.AddDebug(); diff --git a/Sources/Ohara/ModalBateau.xaml b/Sources/Ohara/ModalBateau.xaml new file mode 100644 index 0000000..b60df87 --- /dev/null +++ b/Sources/Ohara/ModalBateau.xaml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + +