Tutoriel 4: modifications #
Renommage des vues #
VueA
#
-
Avec F2, renommer la classe suivante:
VueA=>VueFileAttente
-
Dans le fichier
vue_a.fxml, modifier le nom du contrôleurdepart.frontal.vues.VueA=>pong.frontal.vues.VueFileAttente
VueB
#
-
Avec F2, renommer la classe suivante:
VueB=>VuePartie
-
Dans le fichier
vue_b.fxml, modifier le nom du contrôleurdepart.frontal.vues.VueB=>pong.frontal.vues.VuePartie
VueRacine
#
-
Dans le fichier
racine.fxml, modifier le nom du contrôleurdepart.frontal.vues.VueB=>pong.frontal.vues.VueRacine
Renommage des fichiers .fxml
#
-
Avec F2, renommer les fichiers suivants
-
vue_a.fxml=>file_attente.fxml -
vue_b.fxml=>partie.fxml
-
-
Dans
FrontalPong, ajuster les déclarations des vues:registrar.registerView(VueFileAttente.class, "/vues/file_attente.fxml"); registrar.registerView(VuePartie.class, "/vues/partie.fxml");
Vérifier que pong04 s’exécute
#
-
Dans un GitBash à la racine du dépôt Git
$ sh gradlew pong04
Renommage des événements #
-
Avec F2, renommer la classe
EvtA=>EvtAfficherVueFileAttente
-
Avec F2, renommer la classe
EvtB=>EvtAfficherVuePartie
Renommage du modèle #
-
Avec F2, renommer la classe
ModeleA=>ModeleFileAttente
-
Avec F2, renommer la classe
ValeurA=>PartieEnFile
Renommage du groupe TachesA
#
-
Avec F2, renommer la classe
TachesA=>CreerVues
-
Modifier le nom du groupe de tâche
"TachesA"=>"CreerVues"
Tâche creerVueFileAttente
#
-
Avec F2, renommer la méthode
tacheA1=>creerVueFileAttente
-
Avec F2, renommer les variables
objA=>viewLoaderobjB=>vueFileAttente
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesViewLoader<VueFileAttente>VueFileAttente
Tâche creerVueRacine
#
-
Avec F2, renommer la méthode
tacheA2=>creerVueRacine
-
Avec F2, renommer les variables
objC=>viewLoaderobjD=>vueRacine
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesViewLoader<VueRacine>VueRacine
Tâche creerVuePartie
#
-
Avec F2, renommer la méthode
tacheA3=>creerVuePartie
-
Avec F2, renommer les variables
objE=>viewLoaderobjF=>vuePartie
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesViewLoader<VuePartie>VuePartie
Formater le code de CreerVue proprement
#
Par exemples:
private static void creerVueFileAttente(FrontendTasks subTasks) {
subTasks.task(create(VueFileAttente.class))
.waitsFor(viewLoader(VueFileAttente.class))
.executesAndReturnsValue(inputs -> {
ViewLoader<VueFileAttente> viewLoader = inputs.get(viewLoader(VueFileAttente.class));
VueFileAttente vueFileAttente = viewLoader.createView();
return vueFileAttente;
});
}
Renommage du groupe TachesB
#
-
Avec F2, renommer la classe
TachesB=>PremierAffichage
-
Modifier le nom du groupe de tâche
"TachesB"=>"PremierAffichage"
-
Modifier le
waitsFor("TachesA")"TachesA"=>"CreerVues"
Tâche tacheB1 => installerVueFileAttente
#
-
Avec F2, renommer la méthode
tacheB1=>installerVueRacine
-
Modifier le nom de la tâche
"tacheB1"=>"installerVueRacine"
-
Avec F2, renommer les variables
objA=>vueRacineobjB=>window
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesVueRacineWindow
Tâche tacheB2 => afficherFenetre
#
-
Avec F2, renommer la méthode
tacheB2=>afficherFenetre
-
Modifier le nom de la tâche
"tacheB2"=>"afficherFenetre"
-
Avec F2, renommer les variables
objC=>window
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesWindow
Tâche tacheB3 => naviguerVersPremiereVue
#
-
Avec F2, renommer la méthode
tacheB3=>naviguerVersPremiereVue
-
Modifier le nom de la tâche
"tacheB3"=>"naviguerVersPremiereVue"
Formater le code de PremierAffichage proprement
#
Par exemple:
private static void installerVueRacine(FrontendTasks subTasks) {
subTasks.task("installerVueRacine")
.waitsFor(window())
.waitsFor(created(VueRacine.class))
.executes(inputs -> {
VueRacine vueRacine = inputs.get(created(VueRacine.class));
Window window = inputs.get(window());
window.installRootView(vueRacine);
});
}
Renommage du groupe TachesC
#
-
Avec F2, renommer la classe
TachesC=>Navigation
-
Modifier le nom du groupe de tâche
"TachesC"=>"Navigation"
-
Modifier le
waitsFor("TachesB")"TachesB"=>"PremierAffichage"
Tâche tacheC1 => installerVueFileAttente
#
-
Avec F2, renommer la méthode
tacheC1=>afficherVueFileAttente
-
Modifier le nom de la tâche
"tacheC1"=>"installerVueRacine"
-
Avec F2, renommer les variables
objA=>evtAfficherVueFileAttenteobjB=>vueRacineobjC=>vueFileAttente
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesEvtAfficherVueFileAttenteVueRacineVueFileAttente
Tâche tacheC2 => afficherVuePartie
#
-
Avec F2, renommer la méthode
tacheC2=>afficherVuePartie
-
Modifier le nom de la tâche
"tacheC2"=>"afficherVuePartie"
-
Avec F2, renommer les variables
objD=>evtAfficherVuePartieobjE=>vueRacineobjF=>vuePartie
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesEvtAfficherVuePartieVueRacineVuePartie
Formater le code de Navigation proprement
#
Par exemple:
private static void afficherVueFileAttente(FrontendTasks tasks) {
tasks.task("afficherVueFileAttente")
.waitsFor(event(EvtAfficherVueFileAttente.class))
.waitsFor(created(VueRacine.class))
.waitsFor(created(VueFileAttente.class))
.executes(inputs -> {
EvtAfficherVueFileAttente evtAfficherVueFileAttente = inputs.get(event(EvtAfficherVueFileAttente.class));
VueRacine vueRacine = inputs.get(created(VueRacine.class));
VueFileAttente vueFileAttente = inputs.get(created(VueFileAttente.class));
evtAfficherVueFileAttente.methodeA(vueRacine, vueFileAttente);
});
}
Renommage du groupe TachesD
#
-
Avec F2, renommer la classe
TachesD=>GererFileAttente
-
Modifier le nom du groupe de tâche
"TachesD"=>"GererFileAttente"
-
Modifier le
waitsFor("tacheC1")"tacheC1"=>"afficherVueFileAttente"
Tâche tacheD1 => observerFileAttente
#
-
Avec F2, renommer la méthode
tacheD1=>observerFileAttente
-
Modifier le nom de la tâche
"tacheD1"=>"observerFileAttente"
-
Avec F2, renommer les variables
objA=>vueFileAttenteobjB=>fileAttente
-
Utiliser Ctrl+. pour remplacer chaque
varpar les bons typesVueFileAttenteModified<ModeleFileAttente>
Formater le code de GererFileAttente proprement
#
Par exemple:
private static void observerFileAttente(FrontendTasks tasks) {
tasks.task("observerFileAttente")
.waitsFor(modified(ModeleFileAttente.class))
.waitsFor(created(VueFileAttente.class))
.executes(inputs -> {
VueFileAttente vueFileAttente = inputs.get(created(VueFileAttente.class));
Modified<ModeleFileAttente> fileAttente = inputs.get(modified(ModeleFileAttente.class));
fileAttente.currentValue().methodeC(vueFileAttente);
});
}
Vérifier que pong04 s’exécute
#
-
Dans un GitBash à la racine du dépôt Git
$ sh gradlew pong04 -
Fermer l’application
-
Ouvrir le graphe de tâches
pong04/_storage/graphs/fontend.png, on devrait avoir:
-
Ré-ouvrir l’application et vérifier qu’on peut modifier les données
$ sh gradlew pong04 # ouvrir le fichier pong04/_storage/models/ModeleFileAttente.json
Modifier les fichiers .properties
#
-
fr.propertiesajouter=Ajouter jouer=Jouer quitter=Quitter partie -
en.propertiesajouter=Add jouer=Play quitter=Exit Game
Adapter le fichier file_attente.fxml
#
-
Ajouter un bouton en dessous du Label
<!-- ... --> <Label text="%tmp" /> <Pane styleClass="espacement,petit"/> <!-- ajouter --> <Button fx:id="boutonJouer" text="%jouer" /> <!-- ajouter --> -
Modifier les
fx:idet les%var<!-- ... --> <Button text="%ajouter" /> <!-- modifier --> <!-- ... --> <Label fx:id="labelFileAttente" /> <!-- modifier -->
Adapter la VueFileAttente
#
-
Avec F2, renommer les attributs suivants:
labelA=>lableFileAttenteboutonA=>boutonJouer
Adapter le fichier partie.fxml
#
-
Retirer le Label et modifier le
fx:idet le%vardu bouton<!-- ... --> <Label styleClass="label" text="%texteA"> </Label> <!-- retirer --> <Pane styleClass="espacement,moyen"/> <!-- retirer --> <Button fx:id="boutonQuitter" text="%quitter"> </Button> <!-- modifier -->
Adapter les déclarations dans le frontal #
-
Dans
FrontalPong.java, modifier la déclaration devue_a.fxml=>file_attente.fxmlregistrar.registerView(VueFileAttente.class, "/vues/file_attente.fxml");
Adapter la VuePartie
#
-
Avec F2, renommer l’attribut suivant:
boutonA=>boutonQuitter
Vérifier que pong04 fonctionne toujours
#
-
Dans un GitBash à la racine du dépôt Git
$ sh gradlew pong04
Finalement, implanter ModeleFileAttente « pour vrai »
#
-
Modifier
ModeleFileAttenteselon le document de conception:public class ModeleFileAttente implements Model, WatchJson, WriteObjectGraph { private int prochainId = 0; private List<PartieEnFile> parties = new ArrayList<>(); // ... -
Modifier
ModeleFileAttente.toStringpublic String toString() { StringBuilder builder = new StringBuilder(); builder.append("prochainId: " + prochainId); builder.append(System.lineSeparator()); builder.append("parties: "); builder.append(System.lineSeparator()); for(PartieEnFile valeur : parties) { builder.append(" "); builder.append(valeur.toString()); builder.append(System.lineSeparator()); } return builder.toString(); } -
Modifier
PartieEnFileselon le document de conception:public class PartieEnFile implements ModelValue { private String idPartie; private String idJoueurA; private String nomJoueurA; private int scoreJoueurA; private String idJoueurB; private String nomJoueurB; private int scoreJoueurB; // ... -
Modifier
PartieEnFile.toString@Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(nomJoueurA); builder.append(" Vs "); if(nomJoueurB == null){ builder.append("???"); }else{ builder.append(nomJoueurB); } builder.append(" "); builder.append(scoreJoueurA); builder.append("-"); builder.append(scoreJoueurB); return builder.toString(); }
Vérifier que pong04 charge le modèle
#
-
Dans un GitBash à la racine du dépôt Git
$ sh gradlew pong04
- L’erreur fatale est normale vu que le modèle ne correspond plus au données du
.json
- L’erreur fatale est normale vu que le modèle ne correspond plus au données du
-
Ré-exécuter
$ sh gradlew pong04
- La librairie a créé un
.jsonvide
- La librairie a créé un
-
Modifier
pong04/_storage/models/ModeleFileAttente.json:{ "_C": "ModeleFileAttente", "parties": [ { "_C": "PartieEnFile", "idPartie": "1", "scoreJoueurB": 0, "nomJoueurA": "Alice", "scoreJoueurA": 0, "nomJoueurB": null, "idJoueurA": "alice", "idJoueurB": null }, { "_C": "PartieEnFile", "idPartie": "2", "scoreJoueurB": 6, "nomJoueurA": "Charlie", "scoreJoueurA": 12, "nomJoueurB": "Bob", "idJoueurA": "charlie", "idJoueurB": "bob" }, { "_C": "PartieEnFile", "idPartie": "3", "scoreJoueurB": 0, "nomJoueurA": "Amina", "scoreJoueurA": 0, "nomJoueurB": "Gregson", "idJoueurA": "amina", "idJoueurB": "gregson" } ], "prochainId": 4 -
Ré-exécuter
$ sh gradlew pong04
Ajouter un fichier prod.css et le déclarer dans FrontalPong.java
#
-
Télécharger le fichier prod.css et le copier dans
pong04/src/main/resources/style -
Dans
FrontalPong.java, modifier la déclaration du CSS://registrar.registerStylesheet("/style/dev.css"); registrar.registerStylesheet("/style/prod.css");
Vérifier pong04 une dernière fois
#
-
Dans un GitBash à la racine du dépôt Git
$ sh gradlew pong04