Bugfix merci Dylan, plus ajout quelques fonctionalités pipeau pour tester les ratio pour le second sujet

This commit is contained in:
Florent Madelaine 2022-02-16 11:55:47 +01:00
parent 2a124a8934
commit a08b214242
3 changed files with 120 additions and 4 deletions

View File

@ -57,11 +57,12 @@ public class PrereservationFactoryNP implements PrereservationFactory{
public Set<Prereservation> getPrereservations(String n, String p){ public Set<Prereservation> getPrereservations(String n, String p){
Objects.requireNonNull(n,"Le nom recherché est null."); Objects.requireNonNull(n,"Le nom recherché est null.");
Objects.requireNonNull(p,"Le prénom recherché est null."); Objects.requireNonNull(p,"Le prénom recherché est null.");
// on va extraire toutes les préréservations du cerveau // on va extraire toutes les préréservations d'une copie du cerveau
Collection<Prereservation> c = this.brain.values(); HashMap<String, Prereservation> copy_brain = (HashMap<String, Prereservation>) this.brain.clone();
Collection<Prereservation> c = copy_brain.values();
// on définit un prédicat sur les Préréservations : // on définit un prédicat sur les Préréservations :
Predicate<Prereservation> filtre = preresa -> !preresa.getClient().getNom().equals(n) || !preresa.getClient().getPrenom().equals(p); Predicate<Prereservation> filtre = preresa -> !preresa.getClient().getNom().equals(n) || !preresa.getClient().getPrenom().equals(p);
// on filtre la collection. // on filtre la collection (ceci provoque des effets de bords sur le hashmap, d' la copie ci-dessus. Merci à Dylan Giraud pour le bugfix).
c.removeIf(filtre); c.removeIf(filtre);
if (c.isEmpty()){ if (c.isEmpty()){
throw new IllegalStateException("Il n'y a pas de préréservation avec un Client ayant pour nom et prenom : " + n + " et " + p); throw new IllegalStateException("Il n'y a pas de préréservation avec un Client ayant pour nom et prenom : " + n + " et " + p);

View File

@ -4,6 +4,7 @@ import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.lang.*; import java.lang.*;
import java.util.Random;
/** /**
* Usine non persistante stockant les réservations dans une structure de données permettant de simuler un ensemble. * Usine non persistante stockant les réservations dans une structure de données permettant de simuler un ensemble.
@ -86,6 +87,10 @@ public class ReservationFactoryNP implements ReservationFactory{
// //
private HashMap<LocalDate,Set<Reservation>> brain; private HashMap<LocalDate,Set<Reservation>> brain;
// mostly useless stuff to pretend to implement some methods.
private Random rnd;
// /** // /**
// * Constructeur // * Constructeur
// */ // */
@ -102,6 +107,10 @@ public class ReservationFactoryNP implements ReservationFactory{
this.brokenMagic.put(TypeChambre.UNLD,Integer.valueOf(this.MAX_UNLD)); this.brokenMagic.put(TypeChambre.UNLD,Integer.valueOf(this.MAX_UNLD));
brain = new HashMap<LocalDate,Set<Reservation>>(); brain = new HashMap<LocalDate,Set<Reservation>>();
// crap stuff to do drawing
this.rnd = new Random();
rnd.setSeed(42);
} }
/** /**
@ -284,12 +293,32 @@ public class ReservationFactoryNP implements ReservationFactory{
/** /**
* Cherche la proportion de chambres disponibles pour une date (réservées sur réservables). * Cherche la proportion de chambres disponibles pour une date (réservées sur réservables).
* (en théorie)
*
* En pratique cette méthode répond n'importe quoi mais ça devrait faire des jolis dessins.
*
* @param d une date * @param d une date
* @return un entier entre 0 et 100 * @return un entier entre 0 et 100
* @throws NullPointerException si un argument est null * @throws NullPointerException si un argument est null
*/ */
public int getRatio(LocalDate d){ public int getRatio(LocalDate d){
throw new UnsupportedOperationException("pas encore implanté"); //throw new UnsupportedOperationException("pas encore implanté");
// normalement vu le nombre de chambres ceci serait probablement correct
// return 100;
// Je vais répondre un truc idiot pour faire des plus jolis dessins.
int jourint = d.getDayOfWeek().getValue(); // une valeur entre 1 pour lundi et 7 pour dimanche.
// tableau indexé par le jour
int[] intArray = new int[]{ 30,40,60,65,40,60,30};
//un peu de bruit pour faire joli
// Random rnd; intialisé dans constructeur maintenant, c'est un attribut.
int max = 10;
int min = 0;
int bruit = this.rnd.nextInt((max - min) + 1) + min;
return intArray[jourint-1]+bruit;
} }

View File

@ -95,6 +95,36 @@ public class TestTexteMNP{
System.out.print("I am sorry Madam, no booking under this reference.\n"); System.out.print("I am sorry Madam, no booking under this reference.\n");
} }
System.out.println("=========================="); System.out.println("==========================");
System.out.println("Le portier a un moment d'absence? on est dans total recall?");
System.out.println("==========================");
System.out.print("Hello Madam. Je cherche votre préreservation avec référence 2436-3909-NXLL\n");
try{
Prereservation preresa = bookingPointComAPISeulement.getPrereservation("2436-3909-NXLL");
System.out.print("I found your booking.\n");
System.out.println(preresa.monPrint());
Chambre libre=null;
try{
libre = grandLivreDOrAPISeulement.getChambre(preresa);
System.out.print("I have a great room for you.\n");
System.out.println(libre.monPrint());
}
catch(IllegalStateException e){
System.out.print(e.getMessage());
}
try{
System.out.print("You like this room? Excellent! Let me confirm the reservation for you.\n");
Reservation resa = grandLivreDOrAPISeulement.createReservation(preresa,libre);
System.out.println(resa.monPrint());
}
catch(IllegalStateException e){
System.out.print(e.getMessage());
}
}
catch(IllegalStateException e){
System.out.print("I am sorry Madam, no booking under this reference.\n");
}
System.out.println("==========================");
System.out.print("Hello Madam. Vous avez oubliée votre numéro de préréservation. Ce n'est pas grave, je vais chercher avec votre nom et prénom.\n"); System.out.print("Hello Madam. Vous avez oubliée votre numéro de préréservation. Ce n'est pas grave, je vais chercher avec votre nom et prénom.\n");
System.out.print("Marine Carpentier? C-A-R-P-E-N-T-I-E-R? Un instant, je vous prie.\n"); System.out.print("Marine Carpentier? C-A-R-P-E-N-T-I-E-R? Un instant, je vous prie.\n");
try{ try{
@ -141,6 +171,54 @@ public class TestTexteMNP{
System.out.print("I am sorry Madam, no booking under this reference.\n"); System.out.print("I am sorry Madam, no booking under this reference.\n");
} }
System.out.println("=========================="); System.out.println("==========================");
System.out.println("Deux clients à la suite. Ça ne marche pas sans le bugfix de Dylan avec le modèle non persistant.");
System.out.println("==========================");
System.out.print("Hello Sir. Vous avez oubliée votre numéro de préréservation. Ce n'est pas grave, je vais chercher avec votre nom et prénom.\n");
System.out.print("Dumas Aaron? ah non, Aaron Dumas? OK. Un instant, je vous prie.\n");
try{
Set<Prereservation> preresas = bookingPointComAPISeulement.getPrereservations("Dumas","Aaron");
System.out.print("I found your bookings.\n");
for(Prereservation p : preresas){
System.out.println(p.monPrint());
Chambre libre = null;
Set<Chambre> disponibles=null;
try{
disponibles = grandLivreDOrAPISeulement.getChambres(p);
System.out.print("I have great rooms for you :\n");
for(Chambre c : disponibles){
System.out.println(c.monPrint());
}
// choix de la chambre au hasard simulant le choix du client
int choix = random.nextInt(disponibles.size());
System.out.println("choix: " + choix);
int compter = 0;
for(Chambre c : disponibles){
if (compter == choix){
libre = c;
break;
}
compter++;
}
}
catch(IllegalStateException e){
System.out.print(e.getMessage());
}
try{
System.out.println(libre.monPrint());
System.out.print("You like this room? Excellent! Let me confirm the reservation for you.\n");
Reservation resa = grandLivreDOrAPISeulement.createReservation(p,libre);
System.out.println(resa.monPrint());
}
catch(IllegalStateException e){
System.out.print(e.getMessage());
}
}
}
catch(IllegalStateException e){
System.out.print("I am sorry Madam, no booking under this reference.\n");
}
System.out.println("==========================");
System.out.println("=== Vue du manageur ===="); System.out.println("=== Vue du manageur ====");
System.out.println("=========================="); System.out.println("==========================");
Set<Reservation> resas = grandLivreDOrAPISeulement.getReservation(LocalDate.of(2018,01,05)); Set<Reservation> resas = grandLivreDOrAPISeulement.getReservation(LocalDate.of(2018,01,05));
@ -148,6 +226,14 @@ public class TestTexteMNP{
for(Reservation r : resas){ for(Reservation r : resas){
System.out.println(r.monPrint()); System.out.println(r.monPrint());
} }
System.out.println("Attention ce n'est pas cohérent mais nous avons le moyen de récupérer un ratio pour faire joli");
System.out.print("Ratio du "+ LocalDate.of(2018,01,7) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,7)) + "%\n");
System.out.print("Ratio du "+ LocalDate.of(2018,01,8) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,8)) + "%\n");
System.out.print("Ratio du "+ LocalDate.of(2018,01,9) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,9)) + "%\n");
System.out.print("Ratio du "+ LocalDate.of(2018,01,10) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,10)) + "%\n");
System.out.print("Ratio du "+ LocalDate.of(2018,01,11) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,11)) + "%\n");
System.out.print("Ratio du "+ LocalDate.of(2018,01,12) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,12)) + "%\n");
System.out.print("Ratio du "+ LocalDate.of(2018,01,13) + " : " + grandLivreDOrAPISeulement.getRatio(LocalDate.of(2018,01,13)) + "%\n");
} }
} }