package avis;
import java.util.LinkedList;
import exception.BadEntry;
import exception.ItemFilmAlreadyExists;
import exception.ItemBookAlreadyExists;
import exception.MemberAlreadyExists;
import exception.NotItem;
import exception.NotMember;
import exception.NotAvis;
/**
* @author A. Beugnard,
* @author G. Ouvradou
* @author B. Prou
* @date février - mars 2011
* @version V0.6
*/
/**
* <p>
* <b>Système de mutualisation d'opinions portant sur des domaines
* variés (littérature, cinéma, art, gastronomie, etc.) et non limités.</b>
* </p>
* <p>
* L'accès aux items et aux opinions qui leurs sont associées
* est public. La création d'item et le dépôt d'opinion nécessite en revanche
* que l'utilisateur crée son profil au préalable.
* </p>
* <p>
* Dans une version avancée (version 2), une opinion peut également
* être évaluée. Chaque membre se voit dans cette version décerner un "karma" qui mesure
* la moyenne des notes portant sur les opinions qu'il a émises.
* L'impact des opinions entrant dans le calcul de la note moyenne attribuée à un item
* est pondéré par le karma des membres qui les émettent.
* </p>
*/
/**
* @author Quentin
*
*/
public class SocialNetwork {
private LinkedList<Member> listeMembre = new LinkedList<Member>();
private LinkedList<Film> listeFilms = new LinkedList<Film>();
private LinkedList<Book> listeBooks = new LinkedList<Book>();
/**
* constructeur de <i>SocialNetwok</i>
*
*/
public SocialNetwork() {
}
/**
* Obtenir le nombre de membres du <i>SocialNetwork</i>
*
* @return le nombre de membres
*/
public int nbMembers() {
return listeMembre.size();
}
/**
* Obtenir le nombre de films du <i>SocialNetwork</i>
*
* @return le nombre de films
*/
public int nbFilms() {
return listeFilms.size();
}
/**
* Obtenir le nombre de livres du <i>SocialNetwork</i>
*
* @return le nombre de livres
*/
public int nbBooks() {
return listeBooks.size();
}
/**
* Ajouter un nouveau membre au <i>SocialNetwork</i>
*
* @param pseudo son pseudo
* @param password son mot de passe
* @param profil son profil
*
* @throws BadEntry :
* <ul>
* <li> si le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces . </li>
* <li> si le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks. </li>
* <li> si le profil n'est pas instancié. </li>
* </ul><br>
*
* @throws MemberAlreadyExists membre de même pseudo déjà présent dans le <i>SocialNetwork</i> (même pseudo : indifférent à la casse et aux leadings et trailings blanks)
*
*/
public void addMember(String pseudo, String password, String profil) throws BadEntry, MemberAlreadyExists {
//Test sur les paramètres :
if(pseudo == null || password == null || profil == null){
throw new BadEntry("Parametre non instancié");
}
if(pseudo.trim().length()==0) throw new BadEntry("Pseudo contenant que des espaces");
if(password.trim().length()<4) throw new BadEntry("Password contenant pas assez de caractères");
//Recherche si le membre existe ou pas
if(this.getMember(pseudo)!=null) throw new MemberAlreadyExists();
listeMembre.add(new Member(pseudo,password,profil));
}
/**
* Ajouter un nouvel item de film au <i>SocialNetwork</i>
*
* @param pseudo le pseudo du membre
* @param password le password du membre
* @param titre le titre du film
* @param genre son genre (aventure, policier, etc.)
* @param realisateur le réalisateur
* @param scenariste le scénariste
* @param duree sa durée en minutes
*
* @throws BadEntry :
* <ul>
* <li> si le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces . </li>
* <li> si le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks. </li>
* <li> si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces. </li>
* <li> si le genre n'est pas instancié. </li>
* <li> si le réalisateur n'est pas instancié. </li>
* <li> si le scénariste n'est pas instancié. </li>
* <li> si la durée n'est pas positive. </li>
* </ul><br>
* @throws NotMember : si le pseudo n'est pas celui d'un membre ou si le pseudo et le password ne correspondent pas.
* @throws ItemFilmAlreadyExists : item film de même titre déjà présent (même titre : indifférent à la casse et aux leadings et trailings blanks)
*
*/
public void addItemFilm(String pseudo, String password, String titre, String genre, String realisateur, String scenariste, int duree) throws BadEntry, NotMember, ItemFilmAlreadyExists {
//Test sur les paramètres
if(pseudo == null || password == null || titre== null || genre == null || realisateur == null || scenariste == null || duree <= 0){
throw new BadEntry("Parametre non instancié");
}
if(pseudo.trim().length()==0 || titre.trim().length()==0) throw new BadEntry("Pseudo contenant que des espaces");
if(password.trim().length()<4) throw new BadEntry("Password contenant pas assez de caractères");
//Si un probleme, l'exception NotMember est levée, et l'exécution est interrompue
verifieUtilisateur(pseudo, password);
//Si le film existe déja, on leve l'exception ItemFilmAlreadyExists
if(this.getFilm(titre)!=null) throw new ItemFilmAlreadyExists();
//Ajout du film
listeFilms.add(new Film(titre, genre, duree, realisateur, scenariste));
}
/**
* Ajouter un nouvel item de livre au <i>SocialNetwork</i>
*
* @param pseudo le pseudo du membre
* @param password le password du membre
* @param titre le titre du livre
* @param genre son genre (roman, essai, etc.)
* @param auteur l'auteur
* @param nbPages le nombre de pages
*
* @throws BadEntry :
* <ul>
* <li> si le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces . </li>
* <li> si le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks. </li>
* <li> si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces. </li>
* <li> si le genre n'est pas instancié. </li>
* <li> si l'auteur n'est pas instancié. </li>
* <li> si le nombre de pages n'est pas positif. </li>
* </ul><br>
* @throws NotMember : si le pseudo n'est pas celui d'un membre ou si le pseudo et le password ne correspondent pas.
* @throws ItemBookAlreadyExists item livre de même titre déjà présent (même titre : indifférent à la casse et aux leadings et trailings blanks)
*
*
*/
public void addItemBook(String pseudo, String password, String titre, String genre, String auteur, int nbPages) throws BadEntry, NotMember, ItemBookAlreadyExists{
//Test sur les paramètres
if(pseudo == null || password == null || titre== null || genre == null || auteur == null || nbPages <= 0){
throw new BadEntry("Parametre non instancié");
}
if(pseudo.trim().length()==0 || titre.trim().length()==0) throw new BadEntry("Pseudo contenant que des espaces");
if(password.trim().length()<4) throw new BadEntry("Password contenant pas assez de caractères");
//Si un probleme, l'exception NotMember est levée, et l'exécution est interrompue
verifieUtilisateur(pseudo, password);
//Si le livre existe déja, on leve l'exception ItemBookAlreadyExists
if(this.getBook(titre)!=null) throw new ItemBookAlreadyExists();
//Ajout du livre
listeBooks.add(new Book(genre, titre, auteur, nbPages));
}
/**
* Consulter les items du <i>SocialNetwork</i> par nom
*
* @param nom son nom (eg. titre d'un film, d'un livre, etc.)
*
* @throws BadEntry : si le nom n'est pas instancié ou a moins de 1 caractère autre que des espaces. </li>
*
* @return LinkedList <String> : la liste des représentations de tous les items ayant ce nom
* (une liste vide si aucun item ne correspond)
*/
public LinkedList <String> consultItems(String nom) throws BadEntry {
LinkedList<String> listeItems = new LinkedList<String>();
if ((nom==null)||(nom.trim().length()==0)){
throw new BadEntry("Le nom n'est pas instancié ou a moins de 1 caractère autre que des espaces");
}
for (Film f : listeFilms){
if (f.isTitre(nom)){
listeItems.addLast(f.toString());
}
}
for (Book b : listeBooks){
if (b.isTitre(nom)){
listeItems.addLast(b.toString());
}
}
return listeItems;
}
/**
* Donner son opinion sur un item film.
* Ajoute l'opinion de ce membre sur ce film au <i>SocialNetwork</i>
* Si une opinion de ce membre sur ce film préexiste, elle est mise à jour avec ces nouvelles valeurs.
*
* @param pseudo pseudo du membre émettant l'opinion
* @param password son mot de passe
* @param titre titre du film concerné
* @param note la note qu'il donne au film
* @param commentaire ses commentaires
*
* @throws BadEntry :
* <ul>
* <li> si le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces . </li>
* <li> si le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks. </li>
* <li> si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces. </li>
* <li> si la note est négative. </li>
* <li> si le commentaire n'est pas instancié. </li>
* </ul><br>
* @throws NotMember : si le pseudo n'est pas celui d'un membre ou si le pseudo et le password ne correspondent pas.
* @throws NotItem : si le titre n'est pas le titre d'un film.
*
* @return la note du film
*/
public float reviewItemFilm(String pseudo, String password, String titre, float note, String commentaire) throws BadEntry, NotMember, NotItem {
boolean avisExiste = false;
Film film = null;
// Recherche d'erreur BadEntry
this.verifieParametreReviewItem(pseudo, password, titre, note, commentaire);
// Recherche d'erreur NotMember
this.verifieUtilisateur(pseudo, password);
// Recherche d'erreur NotItem
if((film=this.getFilm(titre))==null) throw new NotItem("Le titre n'est pas le titre d'un film");
// Vérification de la pré-existence d'un commentaire du même auteur
for(Avis a : film.getListeAvis()){
if(a.getAuteur().isExist(pseudo)){
avisExiste = true;
a.setNote(note);
a.setCommentaire(commentaire);
break;
}
}
// Traitement du cas normal
if (avisExiste == false) film.addAvis(new AvisItem(getMember(pseudo),commentaire,note));
return film.getMoyenne();
//
}
/**
* Donner son opinion sur un item livre.
* Ajoute l'opinion de ce membre sur ce livre au <i>SocialNetwork</i>
* Si une opinion de ce membre sur ce livre préexiste, elle est mise à jour avec ces nouvelles valeurs.
*
* @param pseudo pseudo du membre émettant l'opinion
* @param password son mot de passe
* @param titre titre du livre concerné
* @param note la note qu'il donne au livre
* @param commentaire ses commentaires
*
* @throws BadEntry :
* <ul>
* <li> si le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces . </li>
* <li> si le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks. </li>
* <li> si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces. </li>
* <li> si la note est négative. </li>
* <li> si le commentaire n'est pas instancié. </li>
* </ul><br>
* @throws NotMember : si le pseudo n'est pas celui d'un membre ou si le pseudo et le password ne correspondent pas.
* @throws NotItem : si le titre n'est pas le titre d'un livre.
*
* @return la note du livre
*/
public float reviewItemBook(String pseudo, String password, String titre, float note, String commentaire) throws BadEntry, NotMember, NotItem {
boolean avisExiste = false;
Book book = null;
// Recherche d'erreur BadEntry
this.verifieParametreReviewItem(pseudo, password, titre, note, commentaire);
// Recherche d'erreur NotMember
this.verifieUtilisateur(pseudo, password);
// Recherche d'erreur NotItem
if((book=this.getBook(titre))==null) throw new NotItem("Le titre n'est pas le titre d'un livre");
// Vérification de la pré-existence d'un commentaire du même auteur
for(Avis a : book.getListeAvis()){
if(a.getAuteur().isExist(pseudo)){
avisExiste = true;
a.setNote(note);
a.setCommentaire(commentaire);
break;
}
}
// Traitement du cas normal
if (avisExiste == false) book.addAvis(new AvisItem(getMember(pseudo),commentaire,note));
return book.getMoyenne();
}
/**
* Donner une opinion sur un avis existant (avis sur un livre)
* @param titre titre du film
* @param auteur auteur du film
* @param pseudo pseudo du membre
* @param password mot de passe du membre
* @param commentaire les commentaires
* @param note la note attribuée
* @return
* @throws NotItem si le titre n'est pas le titre d'un film
* @throws NotMember: si le pseudo n'est pas celui d'un membre ou si le pseudo et le password ne correspondent pas.
* @throws NotAvis si l'avis n'existe pas
* @throws BadEntry
* <ul>
* <li> si le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces
* <li> si le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks
* <li> si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces
* <li> si la note est négative
* <li> si le commentaire ou l'auteur ne sont pas instancié
* </ul><br>
*/
public float reviewOpinionFilm (String titre, String auteur, String pseudo, String password, String commentaire, float note) throws NotItem, NotMember,NotAvis,BadEntry{
//Variable interne
Film film = null;
AvisItem avis = null;
// Recherche d'erreur BadEntry
this.verifieParametreReviewOpinion(pseudo, password, titre, note, commentaire, auteur);
//Si un probleme, l'exception NotMember est levée, et l'exécution est interrompue
this.verifieUtilisateur(pseudo, password);
//On recupere le film si il existe, sinon on leve l'exception NotItem
if((film = this.getFilm(titre))==null) throw new NotItem("film inexistant");
//On vérifie que l'auteur existe, sinon on leve l'exception NotMember
if(this.getMember(auteur)==null) throw new NotMember("Auteur inexistant");
//On recupere l'avis que l'auteur à posté sur le film si il existe, sinon on leve l'exception NotAvis
for(AvisItem a : film.getListeAvis())
if(a.isAuteur(auteur))
avis = a;
if(avis == null) throw new NotAvis("Avis inexistant"+"\n"+auteur+film);
// Ajout de l'avis et retour de la moyenne
avis.addAvis(getMember(pseudo), note, commentaire);
updateKarma(auteur);
return avis.getMoyenne();
}
/**
* Donner une opinion sur un avis existant (avis sur un film)
* @param titre Titre du livre
* @param auteur Auteur de l'avis sur le livre
* @param pseudo pseudo du membre
* @param password mot de passe du membre
* @param commentaire les commentaires
* @param note la note attribuée
* @return la moyenne des avis
* @throws NotItem si le titre n'est pas le titre d'un livre.
* @throws NotMember
* @throws NotAvis
* @throws BadEntry
* <ul>
* <li> si le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces . </li>
* <li> si le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks. </li>
* <li> si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces. </li>
* <li> si la note est négative. </li>
* <li> si le commentaire n'est pas instancié. </li>
* </ul><br>
* @throws NotMember : si le pseudo n'est pas celui d'un membre ou si le pseudo et le password ne correspondent pas.
* @throws NotItem : si le titre n'est pas le titre d'un film.
*/
public float reviewOpinionBook (String titre, String auteur, String pseudo, String password, String commentaire, float note) throws NotItem, NotMember,NotAvis,BadEntry{
//Variable interne
Book book = null;
AvisItem avis = null;
// Recherche d'erreur BadEntry
this.verifieParametreReviewOpinion(pseudo, password, titre, note, commentaire, auteur);
//Si un probleme, l'exception NotMember est levée, et l'exécution est interrompue
this.verifieUtilisateur(pseudo, password);
//On recupere le film si il existe, sinon on leve l'exception NotItem
if((book = this.getBook(titre))==null) throw new NotItem("livre inexistant");
//On vérifie que l'auteur existe, sinon on leve l'exception NotMember
if(this.getMember(auteur)==null) throw new NotMember("Auteur inexistant");
//On recupere l'avis que l'auteur à posté sur le film si il existe, sinon on leve l'exception NotAvis
for(AvisItem a : book.getListeAvis())
if(a.isAuteur(auteur))
avis = a;
if(avis == null) throw new NotAvis("Avis inexistant"+"\n"+auteur+book);
// Ajout de l'avis et retour de la moyenne
avis.addAvis(getMember(pseudo), note, commentaire);
updateKarma(auteur);
return avis.getMoyenne();
}
/**calcule / met à jour le karma d'un membre
* @param pseudo pseudo du membre
*/
private void updateKarma(String pseudo){
// recherche du membre
Member membre = this.getMember(pseudo);
int nbAvis = 0;
float somme = 0;
// recherche des avis de l'auteur dans itemsFilm
for(Film f : listeFilms)
for(AvisItem a : f.getListeAvis())
if(a.isAuteur(pseudo))
if(a.getMoyenne()!=-1){
somme += a.getMoyenne();
nbAvis++;
}
// recherche des avis de l'auteur dans itemsBook
for(Book b : listeBooks)
for(AvisItem a : b.getListeAvis())
if(a.isAuteur(pseudo))
if(a.getMoyenne()!=-1){
somme += a.getMoyenne();
nbAvis++;
}
if (nbAvis==0) membre.setKarma(2.5f); //Valeur par defaut du karma si aucun avis
else membre.setKarma(somme/nbAvis);
}
/**
* Recherche dans la liste des livres et des films l'ensemble des items correspondant à la chaine de caractère rentrée en paramètre
*
* @param titre
* @return Liste des items classé par pertinence
*/
public LinkedList<Item> rechercher(String titre){
//Création d'un objet ayant deux attributs : Item et Occurence
class ItemRecherche{
public Item item;
public int occurence=1;
public ItemRecherche(Item i){
this.item = i;
}
}
boolean dejaPresent = false;
//Liste qui contient tous les items qui ont au moins un mot de la phrase de recherche
//Si un items contient plusieurs mot de la phrase de recherche, l'attribut occurence de ItemRecherche est augmenté en concéquence
LinkedList<ItemRecherche> listeResultatFinalAvecOccurence = new LinkedList<ItemRecherche>();
//Liste qui contient tous les items correspondant à la recherche classé par pertinence (A l'aide du champs occurence)
LinkedList<Item> listeResultatFinal = new LinkedList<Item>();
//On decoupe la phrase de recherche en mot -> Ex : [Harry Potter] devient [Harry] [Potter]
String[] mot = titre.toLowerCase().split(" ");
//Pour chaque mot
for(int i=0;i<mot.length;i++){
if(!mot.equals(" "))//Si le mot est autre qu'un espace
//On parcours tous les livres
for(Book b : listeBooks){
//Si le mot est présent dans le titre
if((b.getTitre().toLowerCase().indexOf(mot[i]))>=0){
dejaPresent = false;
//On recherche si on a deja trouver l'objet avec un autre mot de notre recherche
for(ItemRecherche item : listeResultatFinalAvecOccurence)
//Si il existe, on augment le nombre d'occurence
if(b.equals(item.item)){
dejaPresent = true;
item.occurence++;
break;
}
//Si il n'existe pas, on ajoute l'item dans le liste
if(dejaPresent == false) listeResultatFinalAvecOccurence.add(new ItemRecherche(b));
}
}
for(Film f : listeFilms){
if((f.getTitre().toLowerCase().indexOf(mot[i]))>=0){
dejaPresent = false;
for(ItemRecherche item : listeResultatFinalAvecOccurence)
if(f.equals(item.item)){
dejaPresent = true;
item.occurence++;
break;
}
if(dejaPresent == false) listeResultatFinalAvecOccurence.add(new ItemRecherche(f));
}
}
}
int max = 0; //valeur max de l'occurence de la liste
int indiceMax = 0; //indice du max
int i = 0; //Position courante dans la liste lors du parcours du for
//Tant qu'il y a des items dans la liste, on cherche le maximum des items restant
while(listeResultatFinalAvecOccurence.size()>0){
//On parcours toute la liste listeResultatFinalAvecOccurence pour chercher l'occurence maximum
for(ItemRecherche iRecherche : listeResultatFinalAvecOccurence){
//Si il devient la maximum
if(iRecherche.occurence>max){
indiceMax=i;
max = iRecherche.occurence;
}
i++;
}
//On ajoute l'item dans listeResultatFinal
listeResultatFinal.add(listeResultatFinalAvecOccurence.get(indiceMax).item);
//On supprime ensuite l'objet de la listeResultatFinalAvecOccurence
listeResultatFinalAvecOccurence.remove(indiceMax);
//Réinit des valeurs
i=0;
max=0;
}
return listeResultatFinal;
}
/**
* Obtenir une représentation textuelle du <i>SocialNetwork</i>.
*
* @return la chaîne de caractères représentation textuelle du <i>SocialNetwork</i>
*/
public String toString() {
String s = null;
s = "Représentation textuelle du SocialNetwork :\n";
s += "\nListe des films :\n";
for (Film f : listeFilms){
s += f.toString();
}
s += "\nListe des livres :\n";
for (Book b : listeBooks){
s += b.toString();
}
s += "\nListe des membres :\n";
for (Member m : listeMembre){
s += "\n"+m.toString();
}
return s;
}
/**
* Vérifie si l'utilisateur existe puis si le mdp et le pseudo coïnside
* @param pseudo
* @param password
* @throws NotMember
*/
private void verifieUtilisateur(String pseudo,String password) throws NotMember{
boolean memberExist = false;
for(Member m : listeMembre){
if(m.isExist(pseudo)){
memberExist = true;
//Test si le password n'est pas celui d'un membre
if(!m.authentifier(pseudo, password)) throw new NotMember ("mot de passe incorrect");
break;
}
}
if (memberExist == false) throw new NotMember("Utilisateur inexistant");
}
/**
* Retourne l'objet membre à partir de son pseudo si il existe
*
* @param pseudo
* @return Objet membre si il existe, null sinon
*/
private Member getMember(String pseudo) {
for(Member m : listeMembre)
if(m.isExist(pseudo))
return m;
return null;
}
/**
* Retourne l'objet Film à partir de son titre si il existe
* @param titre
* @return Objet film si il existe, null sinon
*/
private Film getFilm(String titre){
for (Film f : listeFilms)
if(f.isTitre(titre))
return f;
return null;
}
/**
* Retourne l'objet Book à partir de son titre si il existe
* @param titre
* @return Objet titre si il existe, null sinon
*/
private Book getBook(String titre){
for (Book b : listeBooks)
if(b.isTitre(titre))
return b;
return null;
}
/**
* Vérifie la conformité des paramètres des fonctions ReviewOpinion*****
* @param pseudo Pseudo du membre
* @param password Mot de passe du membre
* @param titre Titre de l'item
* @param note Note de l'avis sur l'avis
* @param commentaire Commentaire sur l'avis
* @param auteur Auteur de l'avis
* @throws BadEntry
*/
private void verifieParametreReviewOpinion(String pseudo, String password, String titre, float note, String commentaire, String auteur) throws BadEntry{
if ((pseudo==null)||(pseudo.trim().length()==0)){
throw new BadEntry("Le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces");
}
if ((password==null)||(password.trim().length()<4)){
throw new BadEntry("Le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks");
}
if ((titre==null)||(titre.trim().length()==0)){
throw new BadEntry("Le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces");
}
if (note<0){
throw new BadEntry("La note est négative");
}
if (commentaire==null){
throw new BadEntry("Le commentaire n'est pas instancié");
}
if (auteur==null||(auteur.trim().length()==0)){
throw new BadEntry("L'auteur n'est pas instancié");
}
}
/**
* Vérifie la conformité des paramètres des fonctions ReviewItem*****
* @param pseudo Pseudo du membre
* @param password Mot de passe du membre
* @param titre Titre de l'item
* @param note Note de l'avis
* @param commentaire Commentaire sur l'item
* @throws BadEntry
*/
private void verifieParametreReviewItem(String pseudo, String password, String titre, float note, String commentaire) throws BadEntry{
if ((pseudo==null)||(pseudo.trim().length()==0)){
throw new BadEntry("Le pseudo n'est pas instancié ou a moins de 1 caractère autre que des espaces");
}
if ((password==null)||(password.trim().length()<4)){
throw new BadEntry("Le password n'est pas instancié ou a moins de 4 caractères, autre que des leadings or trailing blanks");
}
if ((titre==null)||(titre.trim().length()==0)){
throw new BadEntry("Le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces");
}
if (note<0){
throw new BadEntry("La note est négative");
}
if (commentaire==null){
throw new BadEntry("Le commentaire n'est pas instancié");
}
}
}