1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
| package bisc8;
import java.io.PrintStream;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/**
* Cette classe représente un ouvrage, dont la bibliothèque peut posséder
* plusieurs exemplaires. La différence entre un ouvrage et un exemplaire
* est parfois utile, par exemple si un utilisateur veut réserver un livre :
* il réservera un ouvrage et pas un exemplaire; pour l'utilisateur,
* n'importe quel exemplaire d'un ouvrage conviendra.
*/
public class Ouvrage {
// liste de tous les exemplaires correspondant à un ouvrage
private List exemplaires = new LinkedList();
// Données d'ouvrage
private List auteurs = new LinkedList();
private String titre;
private String date;
private String serie;
private String nombrePages;
private String reference;
private String editeur;
private String descriptionComplete;
/**
* @return la référence, c'est-à-dire l'identificateur univoque
* de l'ouvrage.
*/
public String reference() {
return reference;
}
/**
* Change la reference de l'ouvrage.
*
* @param ref la nouvelle reference de l'ouvrage.
*/
public void changerReference(String ref) {
this.reference = ref;
}
/**
* @return la série de l'ouvrage.
*/
public String serie() {
// méthode à implémenter (phase 1)
Main.erreur(this, "serie");
return null;
}
/**
* Change la série de l'ouvrage.
*
* @param serie la nouvelle série de l'ouvrage.
*/
public void changerSerie(String serie) {
this.serie = serie;
}
/**
* @return l'éditeur de l'ouvrage.
*/
public String editeur() {
// méthode à implémenter (phase 1)
Main.erreur(this, "editeur");
return null;
}
/**
* Change l'éditeur de l'ouvrage.
*
* @param editeur le nouvel éditeur de l'ouvrage.
*/
public void changerEditeur(String editeur) {
this.editeur = editeur;
}
/**
* @return un itérateur sur l'ensemble de tous les auteurs de l'ouvrage.
*/
public Iterator auteurs() {
// méthode à implémenter (phase 1)
Main.erreur(this, "auteurs");
return null;
}
/**
* Ajoute un auteur à l'ouvrage.
*
* @param nom le nom de l'auteur à ajouter.
*/
public void ajouterAuteur(String nom) {
auteurs.add(nom);
}
/**
* @return le titre de l'ouvrage.
*/
public String titre() {
// méthode à implémenter (phase 1)
Main.erreur(this, "titre");
return null;
}
/**
* Change le titre de l'ouvrage.
*
* @param titre le nouveau titre de l'ouvrage.
*/
public void changerTitre(String titre) {
this.titre = titre;
}
/**
* @return la date de publication de l'ouvrage.
*/
public String datePublication() {
// méthode à implémenter (phase 1)
Main.erreur(this, "datePublication");
return null;
}
/**
* Change la date de publication de l'ouvrage.
*
* @param la nouvelle date de publication de l'ouvrage.
*/
public void changerDatePub(String date) {
this.date = date;
}
/**
* @return le nombre de pages de l'ouvrage
*/
public String nombrePages() {
// méthode à implémenter (phase 1)
Main.erreur(this, "nombrePages");
return null;
}
/**
* Change le nombre de pages de l'ouvrage.
*
* @param le nouveau nombre de pages de l'ouvrage.
*/
public void changerNombrePages(String nombrePages) {
this.nombrePages = nombrePages;
}
/**
* Compare une instance d'Ouvrage avec un autre objet donné
* et retourne vrai si le objet est un Ouvrage avec la même
* reference.
*
* @see méthode Ouvrage.reference()
*/
public boolean equals(Object obj) {
return
obj != null &&
obj instanceof Ouvrage &&
this.reference() != null &&
this.reference().equals(((Ouvrage)obj).reference());
}
/**
* Quand on réecrit la méthode Object.equals(), il faut réecrire
* Object.hashCode() pour respecter le contrait entre ces deux méthodes.
*
* @see méthode Object.hashCode()
*/
public int hashCode() {
return (null == reference() ? 0 : reference().hashCode());
}
/**
* Affiche une répresentation texte de l'ouvrage.
*
* @param le canal de sortie où la répresentation sera affichée
* (p.e. System.out)
*/
public void affiche(PrintStream out) {
// méthode à implémenter (phase 1)
Main.erreur(this, "affiche");
}
/**
* Ajoute des nouveaux exemplaires à l'ouvrage.
*
* @param quantité quantité d'exemplaires à ajouter.
*/
public void ajouterExemplaires(int quantite) {
for(; quantite > 0; quantite--)
exemplaires.add(new Exemplaire(this));
}
/**
* Encode une réservation pour le client passé en paramètre.
* Si le client possède déjà une réserve, la méthode ne fait rien et renvoie
* vrai.
* Si un autre client a déjà réservé l'ouvrage, le client donné ne peut
* pas faire une réserve, et la méthode renvoie faux.
* On peut réserver un ouvrage seulement s'il n'y a plus d'exemplaires
* disponibles.
*
* @return Vrai si la méthode réussit a placer une réserve pour le client, ou
* si le client possédait déjà une réserve. Sinon, faux.
*/
public boolean reservePour(Emprunteur client) {
// méthode à implémenter (phase 3)
Main.erreur(this, "reservePour");
return false;
}
/**
* @return un itérateur sur l'ensemble de tous les exemplaires de cet ouvrage.
*/
public Iterator exemplaires() {
return exemplaires.iterator();
}
/**
* @return le nombre d'exemplaires de cet ouvrage.
*/
public int nombreExemplaires() {
return exemplaires.size();
}
/**
* @return un itérateur sur l'ensemble de tous les exemplaires non empruntés à ce moment.
*/
public Iterator exemplairesDisponibles() {
// méthode à implémenter (phase 2)
Main.erreur(this, "exemplairesDisponibles");
return null;
}
/**
* Renvoie un exemplaire pour que le client donnée l'emprunte, tenant
* compte des réservations placées sur cet ouvrage.
*
* S'il n'y a pas des exemplaires disponibles, la méthode renvoie null. Ceci
* inclut le cas où il y a des exemplaires mais il y a une réservation pour
* un autre client.
*
* Si le client possède une réservation, il est possible de lui donner un
* exemplaire disponible, et la réservation sur l'ouvrage est retiré.
*
* Si l'ouvrage n'a pas de réservation à ce moment, la méthode renvoie un
* exemplaire disponible quelconque.
*
* @return Un exemplaire à emprunter par le client passé en parametre, ou null
* s'il n'y a pas aucun exemplaire disponible pour ce client à ce moment.
*
* @see Ouvrage.reservePour()
*/
public Exemplaire exemplairePour(Emprunteur client) {
// méthode à implémenter (phase 2 + 3)
Main.erreur(this, "exemplairePour");
return null;
}
/**
* @return un itérateur sur l'ensemble de tous les exemplaires empruntés à ce moment.
*/
public Iterator exemplairesEmpruntes() {
// méthode à implémenter (phase 2)
Main.erreur(this, "exemplairesEmpruntes");
return null;
}
} |