brouillon un peu mieux de ReservationFactoryNP -- disclaimer : use at your own risk

This commit is contained in:
2021-10-22 18:57:48 +02:00
parent 20012ff5d1
commit 2a124a8934
3 changed files with 67 additions and 18 deletions

View File

@@ -28,16 +28,18 @@ public class ReservationFactoryNP implements ReservationFactory{
// similaire pour stocker la valeur max, même un hotel magique devrait faire le ménage.
private EnumMap<TypeChambre,Integer> brokenMagic;
// BUGFIX. ^ c'est le xor en java donc 10^6 ça ne fait pas un million mais autre chose
// Du coup en dessous j'écris 1000000 à la place.
// plus petite et plus grande valeur pour les chambres UNLS
private static int MIN_UNLS = 0;
private static int MAX_UNLS = 10^6 -1;
private static int MAX_UNLS = 1000000 -1;
// plus petite et plus grande valeur pour les chambres DEUXLS
private static int MIN_DEUXLS = 10^6;
private static int MAX_DEUXLS = 2*10^6 -1;
private static int MIN_DEUXLS = 1000000;
private static int MAX_DEUXLS = 2*1000000 -1;
// plus petite et plus grande valeur pour les chambres UNLD
private static int MIN_UNLD = 2*10^6;
private static int MAX_UNLD = 3*10^6 -1;
private static int MIN_UNLD = 2*1000000;
private static int MAX_UNLD = 3*1000000 -1;
// plus grand nombre de chambres à proposer si le client souhaite choisir (va automatiquement salir les chambres précédentes)
private static int ADEQUATE = 5;
@@ -93,7 +95,7 @@ public class ReservationFactoryNP implements ReservationFactory{
this.nextFreeRoom.put(TypeChambre.UNLS,Integer.valueOf(this.MIN_UNLS));
this.nextFreeRoom.put(TypeChambre.DEUXLS,Integer.valueOf(this.MIN_DEUXLS));
this.nextFreeRoom.put(TypeChambre.UNLD,Integer.valueOf(this.MIN_UNLD));
brokenMagic = new EnumMap<>(TypeChambre.class);
this.brokenMagic.put(TypeChambre.UNLS,Integer.valueOf(this.MAX_UNLS));
this.brokenMagic.put(TypeChambre.DEUXLS,Integer.valueOf(this.MAX_DEUXLS));
@@ -143,7 +145,7 @@ public class ReservationFactoryNP implements ReservationFactory{
int howMany = Math.min(this.brokenMagic.get(p.getTypeChambre()) - this.nextFreeRoom.get(p.getTypeChambre()), this.ADEQUATE);
for (int i=0; i< howMany ;i++) {
Chambre c = new ChambreNP(numero,p.getTypeChambre());
Chambre c = new ChambreNP(numero+i,p.getTypeChambre());
res.add(c);
}
@@ -161,7 +163,7 @@ public class ReservationFactoryNP implements ReservationFactory{
*/
private void addReservationToBrain(Reservation r){
// mise à jour de la prochaine chambre libre à 1 de plus que moi
this.nextFreeRoom.put(r.getChambre().getType(),Integer.valueOf(r.getChambre().getNumero() + 1));
this.nextFreeRoom.put(r.getChambre().getType(),Integer.valueOf(r.getChambre().getNumero() + 1));
// Ajout pour toutes les dates de la réservation.
LocalDate d = r.getDateDebut();
for (int i=0; i< r.getJours() ;i++) {
@@ -184,7 +186,13 @@ public class ReservationFactoryNP implements ReservationFactory{
this.brain.put(d,s);
}
public String prochainesChambresLibres(){
StringBuilder sb = new StringBuilder("prochaines chambres libres par type:\n");
for (TypeChambre t : TypeChambre.values()){
sb.append("\t _ " + t + " " + this.nextFreeRoom.get(t) + "\n");
}
return sb.toString();
}
/**
* Fabrique (ajoute) une réservation
@@ -203,10 +211,10 @@ public class ReservationFactoryNP implements ReservationFactory{
if (c.getType()!=p.getTypeChambre()) {
throw new IllegalArgumentException("Erreur sur le type de la chambre: la préréservation indique " + p.getTypeChambre() + " mais la chambre est " + c.getType());
}
else if (false) // n'arrive jamais dans l'hôtel magique.
else if (false) // on fait comme si ça n'arrive jamais dans l'hôtel magique (pour l'instant).
{
throw new IllegalArgumentException("Pas de chambre disponible de type " + p.getTypeChambre());
}
throw new IllegalArgumentException("La chambre " + c.monPrint() + " n'est pas disponible pour fabriquer une réservation à partir de la préréservation " + p.monPrint());
}
else {
Reservation r = new ReservationNP(p.getReference(), p.getDateDebut(), p.getJours(), c, p.getClient());
this.addReservationToBrain(r);