/**
  * Informer les abonnées s'il n'y a plus de place, ou s'il n'y en avait plus et que quelques
  * places se sont libérées.
  *
  * @param source la source du message.
  * @param objet l'objet du message.
  */
 public void update(Observable source, Object objet) {
   if (source instanceof Spectacle) {
     Spectacle concert = (Spectacle) source;
     List<Object> info = new ArrayList<Object>();
     info.add(concert.getTitre());
     info.add(concert.getdate());
     info.add(objet);
     setChanged();
     notifyObservers(info);
   }
 }
 /**
  * Réserve les places demandées sauf s'il reste moins de places. Dans ce cas, la liste retournée
  * est la liste des places encore disponibles, mais elle ne sont pas encore réservées.
  *
  * @param titreConcert Le titre du concert.
  * @param date La date du concert.
  * @param nbPlacesDemandees Le nombre de places demandées
  * @return Une liste de places réservées s'il y a assez de place pour satidfaire la demande, la
  *     liste des numéros de places encore disponibles dans le cas contraire.
  */
 public List<String> getPlaces(
     String titreConcert, GregorianCalendar date, int nbPlacesDemandees) {
   Spectacle concert = listeSpectacles.get(getCleSpectacle(titreConcert, date));
   int nbDispo = concert.getNbPlacesDispo();
   List<String> listePlaces;
   if (nbDispo < nbPlacesDemandees) listePlaces = concert.getPlacesDisponibles();
   else {
     listePlaces = new ArrayList<String>();
     while (nbPlacesDemandees-- > 0) listePlaces.add(concert.reserver());
   }
   return listePlaces;
 }
 /**
  * Libère une place.
  *
  * @param titreSpectacle Le titre du spectacle.
  * @param date La date du spectacle.
  * @param place Le numéro de la place.
  * @return Le libellé du spectacle, y compris date et lieu, si la place a été libérée, <code>null
  *     </code> si la place n'est pas réservée ou n'existe pas.
  */
 public String liberer(String titreSpectacle, GregorianCalendar date, String place) {
   Spectacle spectacle = listeSpectacles.get(getCleSpectacle(titreSpectacle, date));
   if (spectacle.liberer(place)) return spectacle.toStringShort();
   else return null;
 }