Package avis

Source Code of avis.SocialNetwork

package avis;


import java.util.Collection;
import java.util.LinkedList;

import exception.BadEntry;
import exception.ItemBookAlreadyExists;
import exception.ItemFilmAlreadyExists;
import exception.MemberAlreadyExists;
import exception.NotAvis;
import exception.NotItem;
import exception.NotMember;
/**classe permettant d'instancier le SocialNetwork et qui regroupe les fonctions importantes*/
public class SocialNetwork {

  /**
   * Attributs
   */
  private LinkedList <Member> _listMembers;
  private LinkedList <Item> _listItems;
  private LinkedList <ReviewOpinion> _listReviewsOfReviews = new LinkedList <ReviewOpinion> ();

  /**
   * Constructeurs
   */

  public SocialNetwork(){
    _listMembers = new LinkedList <Member>() ;
    //    listeMembreConstructeur = getMembers();
    _listItems = new LinkedList <Item>();
    //    listeItemConstructeur = getItems(); 
  }

  /**
   * @return Nombre de livres dans le SocialNetwork.
   */
  public int nbBooks(){
    int nbBook = 0;
    for(int i =0; i< _listItems.size();i++){
      if(_listItems.get(i) instanceof Book){
        nbBook ++;
     
    }
    return nbBook;
  }
  /**
   * @return Nombre de Films dans le SocialNetwork.
   */
  public int nbFilms(){
    int nbFilms = 0;
    for(int i =0; i< _listItems.size();i++){
      if(_listItems.get(i) instanceof Film){
        nbFilms ++;
     
    }
    return nbFilms;
  }
  /**
   * @return Nombre de membres du SocialNetwork.
   */
  public int nbMembers(){
    return _listMembers.size();
  }

  /**
   * Méthode vérifiant la saisie des champs pseudo et password.
   * @param pseudo Pseudo du membre
   * @param password Password du membre
   * @return Booleen, vrai si les champs sont correctement saisis
   * @throws BadEntry
   * <ul>
   <li>  si le pseudo n'est pas instancié
   *  <li>  si le pseudo a moins de 1 caractère
   *  <li>  si le password n'est pas instancié
   *  <li>  si le password a moins de 4 caractères, autre que des leadings or trailing blanks.
   *  </li></ul>
   */
  public boolean checkEntryPseudoPassword(String pseudo, String password) throws BadEntry {
    // pseudo non instancie
    if(pseudo ==null)
      throw new exception.BadEntry("Le pseudo n est pas instancie.");

    //pseudo ayant moins de 1 caractere autre que des espaces
    if(pseudo.trim().length()<1)
      throw new exception.BadEntry("Le pseudo contient moins de un caractere autre que des espaces.");

    //password non instancie
    if(password==null)
      throw new exception.BadEntry("Le password n est pas instancie");

    //password ayant moins de 4 caracteres autre que des espaces
    if(password.trim().length()<4)
      throw new exception.BadEntry("Le password contient moins de 4 caracteres autre que des espaces.");

    return true;
  }

  /**
   * Méthode vérifiant la saisie du champ profil

   * @param profil Profil du membre.
   * @return Booleen, vrai si le champ profil est correctement saisi
   * @throws BadEntry
   * <ul>
   <li>  si le profil n'est pas instancié
   *  </li></ul>
   */
  public boolean checkEntryProfil(String profil) throws BadEntry {
    if((profil==null))
      throw new exception.BadEntry("Le profil n est pas instancie.");

    return true; //true si la saisie est correcte, on arrive a la fin de la methode

  }

  /**
   * Méthode vérifiant la saisie des champs titre, genre, auteur, nbPages pour l'ajout d'un livre.
   * @param titre Titre du livre
   * @param genre Genre du livre
   * @param auteur Auteur du livre
   * @param nbPages Nombre de pages du livre
   * @return Booleen, vrai si les champs sont correctements saisis
   * @throws BadEntry
   * <ul>
   <li>  si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces.
   *  <li>  si le genre n'est pas instancié.
   *  <li>  si l'auteur n'est pas instancié
   *  <li>  si le nombre de pages n'est pas positif
   *  </li></ul>
   */
  public boolean checkEntryBook(String titre, String genre, String auteur, int nbPages) throws BadEntry {
    //titre non instancie
    if(titre==null)
      throw new exception.BadEntry("Le titre n est pas instancie");

    //titre ayant moins de 1 caractere autre que des espaces
    if(titre.trim().length()<1)
      throw new exception.BadEntry("Le titre contient moins de un caractere autre que des espaces.");


    //genre non instancie
    if(genre==null)
      throw new exception.BadEntry("Le genre n est pas instancie");

    //auteur non instancie
    if(auteur==null)
      throw new exception.BadEntry("L'auteur n est pas instancie");

    //nombre de page négatif
    if((nbPages==0)||(nbPages<0))
      throw new exception.BadEntry("Le nombre de page est négatif");

    return true; // retournera true si toutes les saisies sont correctes
  }

  /**
   * Méthode vérifiant la saisie des champs titre, genre, réalisateur, scénariste, durée pour l'ajout d'un film.
   * @param titre Titre du film
   * @param genre Genre du film
   * @param realisateur Réalisateur du film
   * @param scenariste scénariste du film
   * @param duree Durée du film
   * @return Booleen, vrai si les champs sont correctements saisis
   * @throws  : BadEntry
   * <ul>
   <li>  si le titre n'est pas instancié ou a moins de 1 caractère autre que des espaces.
   *  <li>  si le genre n'est pas instancié.
   *  <li>  si le réalisateur n'est pas instancié
   *  <li>  si le scénariste n'est pas instancié
   *  <li>  si la durée n'est pas positive
   */ 
  public boolean checkEntryFilm(String titre,String genre,String realisateur,String scenariste, int duree) throws BadEntry {
    //titre non instancie
    if(titre==null)
      throw new exception.BadEntry("Le titre n est pas instancie");

    //titre ayant moins de 1 caractere autre que des espaces
    if(titre.trim().length()<1)
      throw new exception.BadEntry("Le titre contient moins de un caractere autre que des espaces.");

    //genre non instancie
    if(genre==null)
      throw new exception.BadEntry("Le genre n est pas instancie");
    //realisateur non instancie
    if(realisateur==null)
      throw new exception.BadEntry("Le realisateur n est pas instancie");
    //scenariste non instancie
    if(scenariste==null)
      throw new exception.BadEntry("Le scenariste n est pas instancie");
    //duree nulle
    if((duree==0))
      throw new exception.BadEntry("La duree est égale a 0");
    //durée négative
    if((duree<0))
      throw new exception.BadEntry("La duree est négative");
    return true; // retournera true si toutes les saisies sont correctes

  }




  /**
   * Teste les erreurs de type BadEntry qu'on peut rencontrer lors de l'instanciation d'un review
   * Retourne un boolean
   *
   * @param titre titre de l'item
   * @param note note attribuée
   * @param commentaire commentaire attribué

   * @throws  : BadEntry
   * <ul>
   <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 n'est pas instancié

   * @return un boolean pour indiquer si l'on évite les conditions énnoncées ci-dessus.
   */
  public boolean checkEntryReview(String titre,float note,String commentaire) throws BadEntry {
    //titre non instancie
    if(titre==null)
      throw new exception.BadEntry("Le titre n est pas instancie");

    //titre ayant moins de 1 caractere autre que des espaces
    if(titre.trim().length()<1)
      throw new exception.BadEntry("Le titre contient moins de un caractere autre que des espaces.");

    //note negative
    if(note<0)
      throw new exception.BadEntry("La note est négative");


    //commentaire non instancie
    if(commentaire==null)
      throw new exception.BadEntry("Le commentaire n est pas instancie");

    return true;
  }
  /**
   * Teste les erreurs de type BadEntry qu'on peut rencontrer lors de l'instanciation d'un reviewOpinion
   * Retourne un boolean
   *
   * @param titre titre de l'item
   * @param note note attribuée
   * @param commentaire commentaire attribué

   * @throws  : BadEntry
   * <ul>
   <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 n'est pas instancié
   * 
   * @return un boolean pour indiquer si l'on évite d'être dans les situations décrites ci-dessus.
   */
  public boolean checkEntryAvisDavis (String titre, String pseduorev, float note, String com) throws BadEntry{
    //titre non instancie
    if(titre==null)
      throw new exception.BadEntry("Le titre n est pas instancie");
    //pseduorev non instancie
    if(pseduorev==null)
      throw new exception.BadEntry("Le pseduorev n est pas instancie");
    //commenataire non instancie
    if(com ==null){
      throw new exception.BadEntry("Le commentaire n'est pas instancié.")
    }

    //note negative
    if(note <0) {
      throw new exception.BadEntry("La note est négative");
    }

    if(com.trim().length()<1){
      throw new exception.BadEntry ("le commentaire fait moins d'un caractère")
    }

    return true;
  }

  /**
   * Test si le nom accordé à ConsultItem n'éxecute pas une exception BadEntry
   * Retourne un boolean
   *
   * @param nom nom utilisé par consultItem

   * @throws  : BadEntry
   * <ul>
   <li>  si le nom n'est pas instancié
   * <li>   si le nom contient moins de un caractere autre que des espaces

   * @return un boolean pour indiquer si l'on évite la BadEntry ou non
   */
  public boolean checkEntryNameConsultItem(String nom) throws BadEntry{
    //nom non instancie
    if(nom==null)
      throw new exception.BadEntry("Le nom n est pas instancie");

    //titre ayant moins de 1 caractere autre que des espaces
    if(nom.trim().length()<1)
      throw new exception.BadEntry("Le nom contient moins de un caractere autre que des espaces.");

    return true;
  }

  /**
   * Méthode de recherche de la presence d un membre
   * @param pseudo Pseudo du membre
   * @param password Mot de passe du membre
   * @param condition Specifie le cas dans lequel la methode est appelée
   * <ul>
   <li> Add : la methode est appellée lors de l'ajout d un membre
   *  <li> Other : la methode est appellée lors de l'ajout d'un livre, film, avis
   * </li></ul>
   * @return Booleen, faux si la confition n'est ni "add" ni "other"
   * @throws MemberAlreadyExists
   */

  public boolean checkMember(String pseudo, String password, String condition) throws NotMember, MemberAlreadyExists{
    //verification de la non presence du membre dans le cas d'ajout de membre
    if (condition.equals("add")){
      for(Member m : _listMembers){
        if(m.getPseudo().toLowerCase().trim().equals(pseudo.trim().toLowerCase())){
          throw new MemberAlreadyExists();
        }
      }
      return true
    }
    //verification de la presence effective du membre pour l ajout de livre, film, review...
    else if (condition.equals("other")){
      for(Member m : _listMembers){
        if(m.getPseudo().toLowerCase().trim().equals(pseudo.trim().toLowerCase()))
          if(m.getPassword().equals(password)){
            return true;
          }
      }
      throw new NotMember("Le membre n est pas present");
    }
    return false;
  }

  /**
   * Méthode de recherche de la presence d un livre
   * @param titre Titre du livre a rechercher
   * @param condition Specifie le cas dans lequel la methode est appelée
   * <ul>
   <li> Add : la methode est appellee lors de l'ajout d'un livre
   *  <li> Other : la methode est appelle lors de l'ajout d'un avis
   * </li></ul>
   * @return Book, l'objet de type Book s'il existe
   * @throws NotItem
   * @throws ItemBookAlreadyExists
   */
  public Book checkBook(String titre, String condition) throws NotItem, ItemBookAlreadyExists{
    //verification de la presence effective du livre pour l ajout de livre
    if (condition.equals("add")){
      for(Item i : _listItems){
        if(i instanceof Book){
          //si le livre existe, il ne peut etre ajouter, on sort avec la levée de l exception
          if(i.getTitre().trim().toLowerCase().equals(titre.trim().toLowerCase())){
            throw new exception.ItemBookAlreadyExists();
          }
        }
      }
      //retourne null a la fin de la boucle for si lexception nest pas levee,
      // si le livre n est pas deja present
      return null;
    }
    //verification de la non presence du livre dans le cas d'ajout de review
    if (condition.equals("other")){
      Book book = null;
      for(Item i : _listItems){
        if(i instanceof Book){
          if(i.getTitre().trim().toLowerCase().equals(titre.trim().toLowerCase())){
            book = (Book)i;
            return book;
          }
        }
      }
      throw new NotItem("Le livre n'existe pas");
    }
    return null; //retourne null si la condition n'est ni add ni other
  }


  /**
   * Permet de chercher un film par son titre dans la liste d'Items
   * Retourne un boolean
   *
   * @param titre titre du film

   * @throws  : NotItem
   * <ul>
   <li>  si le film n'existe pas dans la liste d'Items

   * @return un boolean pour indiquer si le film existe ou non.
   */
  public Film esTuCeFilm(String titre) throws NotItem{
    Film film = null;
    int compteur =0;
    for(Item i : _listItems){
      if(i instanceof Film)
        if(i.getTitre().trim().toLowerCase().equals(titre.trim().toLowerCase())){
          film = (Film)i;
          compteur++;
       
    }
    if(compteur == 0)
      throw new NotItem("Le film n'existe pas");

    return film;
  }

  /**
   * Permet de savoir si le livre peut être ajouté à la liste d'Items
   * Retourne un boolean
   *
   * @param titre titre du livre

   * @throws  : ItemFilmAlreadyExists
   * <ul>
   <li>  si le film est déjà présent

   * @return un boolean pour indiquer si le film peut être instancié ou non
   */
  public boolean esTuDejaCeFilm(String titre) throws ItemFilmAlreadyExists {
    for(Item i : _listItems){
      if(i instanceof Film)
        if(i.getTitre().trim().toLowerCase().equals(titre.trim().toLowerCase())){
          throw new exception.ItemFilmAlreadyExists();
       
    }
    return true;
  }

  /**
   * Permet d'ajouter un membre au Social Network
   * Retourne un boolean
   *
   * @param pseudo pseudo souhaité
   * @param password password du membre
   * @param profil profil du member

   * @throws  : BadEntry
   * <ul>
   <li>  si le pseudo n'est pas instancié
   *  <li>  si le pseudo a moins de 1 caractère
   *  <li>  si le password n'est pas instancié
   *  <li>  si le password a moins de 4 caractères, autre que des leadings or trailing blanks.

   * </ul><br>      
   * @throws MemberAlreadyExists : si le pseudo est déjà pris

   *
   * @return le boolean indiquant la possibilité de créer ce membre
   */

  public boolean addMember(String pseudo, String password, String profil) throws BadEntry, MemberAlreadyExists, NotMember{
    String condition = "add";
    if(checkEntryPseudoPassword(pseudo,password)){ // true
      if(checkEntryProfil(profil)){ //true
        if(checkMember(pseudo, password, condition)){ // si retourne true, le pseudo choisi n existe pas
          //creation du membre
          Member newMember = new Member(pseudo, password, profil);
          _listMembers.add(newMember);
        }
      }
    } 
    return true; //true si le membre a ete cree 
  }

  /**
   * Permet d'ajouter un livre à la liste d'Items
   * Retourne un boolean
   *
   * @param pseudo Pseudo du membre
   * @param password Password du membre
   * @param titre Titre du livre
   * @param genre Genre du livre
   * @param auteur Auteur du livre
   * @param nbPages Nombre de pages du livres

   *
   * @throws  : BadEntry
   * <ul>
   <li>  si le pseudo n'est pas instancié
   *  <li>  si le pseudo a moins de 1 caractère
   *  <li>  si le password n'est pas instancié
   *  <li>  si le password a moins de 4 caractères, autre que des leadings or trailing blanks.
   * </ul><br>      
   * @throws NotMember :
   * si le pseudo n'est pas celui d'un membre 
   * si le pseudo et le password ne correspondent pas.
   *
   * </ul><br>      
   * @throws ItemFilmAlreadyExists : si le livre existe déjà (avec un titre indifférent à la casse et aux trailing blanks)
   *
   * @return le boolean indiquant la possibilité d'ajouter le livre à la liste d'Items
   * @throws MemberAlreadyExists
   * @throws NotItem
   */
  public boolean addItemBook(String pseudo, String password, String titre, String genre, String auteur, int nbPages) throws BadEntry, NotMember, ItemBookAlreadyExists, MemberAlreadyExists, NotItem {
    //test saisie pseudo password
    if(checkEntryPseudoPassword(pseudo,password)){ // true
      //verification si le membre est bien present
      if(checkMember(pseudo, password, "other")){ // si true : membre présent, on continu ...
        //verification saisie des champs relatifs au book
        if(checkEntryBook(titre,genre,auteur,nbPages)){ // si true, on continu ...
          //verification que le titre de livre n est pas deja present
          if(checkBook(titre, "add")==null){ //null si le livre n est pas present
            Book newBook = new Book(titre,genre,auteur,nbPages);
            _listItems.add(newBook);   // on ajoute un livre en le spécifiant a un item
          }
        }
      }
    }
    return true
  }

  /**
   * Permet d'ajouter un film à la liste d'Items
   * Retourne un boolean
   *
   * @param pseudo pseudo du membre
   * @param password password du membre
   * @param titre titre du film
   * @param genre genre du film
   * @param réalisateur réalisateur du film
   * @param scénariste scénariste du film nombre de pages du livres
   * @param durée durée du film
   *
   *
   * @throws  : BadEntry
   * <ul>
   <li>  si le pseudo n'est pas instancié
   *  <li>  si le pseudo a moins de 1 caractère
   *  <li>  si le password n'est pas instancié
   *  <li>  si le password 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 le genre n'est pas instancié.
   *  <li>  si le réalisateur n'est pas instancié.
   *  <li>  si le scénariste n'est pas instancié.
   *  <li>  si la durée n'est pas positive.

   * </ul><br>      
   * @throws NotMember :
   * si le pseudo n'est pas celui d'un membre 
   * si le pseudo et le password ne correspondent pas.
   *
   * </ul><br>      
   * @throws ItemFilmAlreadyExists : si le film existe déjà (avec un titre indifférent à la casse et aux trailing blanks)
   *
   * @return le boolean indiquant la possibilité d'ajouter le film à la liste d'Items
   * @throws MemberAlreadyExists
   */
  public boolean addItemFilm(String pseudo, String password, String titre, String genre, String realisateur, String scenariste, int duree) throws BadEntry, NotMember, ItemFilmAlreadyExists, MemberAlreadyExists{
    String condition ="other";
    //test saisie pseudo password
    if(checkEntryPseudoPassword(pseudo,password)){ // true
      //verification si le membre est bien present
      if(checkMember(pseudo, password, condition)){ // si true : membre présent, on continu ...
        //verification saisie des champs relatifs au film
        if(checkEntryFilm(titre,genre,realisateur,scenariste,duree)){ // si true, on continu ...
          //verification que le titre de film n est pas deja present
          if(esTuDejaCeFilm(titre)){
            Film newFilm = new Film(titre,genre,realisateur,scenariste,duree);
            _listItems.add(newFilm);   // on ajoute un film en le spécifiant a un item
          }
          else
            throw new exception.ItemFilmAlreadyExists();
        }
      }
      else
        throw new exception.NotMember("Le membre n est pas present");
    }
    return true
  }

  /**
   * Permet de consulter les items du socialNetwork par nom
   * Retourne une LinkedList avec la représentation de tous les items ayant un titre équivalent à nom.
   * Une liste vide sinon
   *
   * @param nom le nom de l'item (titre d'un film, d'un livre)

   *
   * @throws  : BadEntry
   * <ul>
   <li>  si le nom n'est pas instancié
   *  <li>  si le nom a moins de 1 caractère autre que des espaces

   * @return une LinkedList avec la représentation de tous les items ayant un titre équivalent à nom. Une liste vide sinon
   */

  public LinkedList<String> consultItems(String nom) throws BadEntry {
    LinkedList <String> consultation = new LinkedList <String>();
    if(checkEntryNameConsultItem(nom)){
      consultation.add("Liste d'Item correspondant à la recherche : \n");
      for(int i= 0; i <_listItems.size();i++){
        if((_listItems.get(i).getTitre().trim().toLowerCase()).equals(nom.trim().toLowerCase())){      
          if((_listItems.get(i)) instanceof Book){
            //transformation de listeItems en type Book
            Book b = (Book)_listItems.get(i);
            consultation.add("\nListe des livres correspondant : ");
            consultation.add(b.toString());
          }
          else if((_listItems.get(i)) instanceof Film){
            //transformation de listeItems en type Film
            Film f = (Film)_listItems.get(i);
            consultation.add("\nListe des films correspondant : ");
            consultation.add(f.toString());
          }
        }
      }
    }
    return consultation;
  }



  /**
   * Permet de donner un avis sur un livre
   * Retourne la note moyenne sur ce livre
   *
   * @param pseudo pseudo du membre
   * @param password password du membre
   * @param titre titre du film
   * @param note note attribuée
   * @param commmentaire commentaire attribué

   * @throws  : BadEntry
   * <ul>
   <li>  si le pseudo n'est pas instancié
   *  <li>  si le pseudo a moins de 1 caractère
   *  <li>  si le password n'est pas instancié
   *  <li>  si le password 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 n'est pas instancié
   * </ul><br>      
   * @throws NotMember :
   * si le pseudo n'est pas celui d'un membre 
   * si le pseudo et le password ne correspondent pas.
   *
   * </ul><br>      
   * @throws NotItem : si le titre n'est pas le titre d'un film. 
   *
   * @return la note moyenne du livre
   * @throws MemberAlreadyExists
   * @throws ItemBookAlreadyExists
   */
  public float reviewItemBook(String pseudo, String password, String titre, float note, String commentaire) throws BadEntry, NotMember, NotItem, MemberAlreadyExists, ItemBookAlreadyExists{
    int compteur =0;
    String condition = "other";
    //test saisie pseudo password
    if(checkEntryPseudoPassword(pseudo,password)){ // true
      //doit retourner le membre
      //verification si le membre est bien present
      if(checkMember(pseudo, password, condition)){ // si true : membre présent, on continu ...
        //verification saisie des champs relatifs au riew
        if((checkEntryReview(titre,note,commentaire))){ // si true : on continu
          //verification que le titre de Book est bien présent
          Book reviewedBook = checkBook(titre, condition);
          if(reviewedBook!=null){ //si livre present
            //pour chaque élément de la liste d'item
            for(Item i : _listItems){
              //verifie qu'il s'agit d'un livre
              if(i instanceof Book){
                //compare le titre entre en parametre a celui dans la liste
                if(i.getTitre().trim().toLowerCase().equals(titre.trim().toLowerCase())){
                  //cree une nouvelle liste a partir de la liste d'avis du livre
                  LinkedList<Review> reviews = i.getReview();
                  //si la liste est vide = 1er avis
                  if(reviews.size()==0){
                    i.addReview(new Review(commentaire, note, pseudo));
                  }
                  else{
                    //sinon pour chaque element de la liste d'avis
                    for(Review r : reviews){
                      //on cherche le pseudo entre au debut
                      if(r.getPseudo().trim().toLowerCase().equals(pseudo.trim().toLowerCase())){
                        //on met a jour
                        i.setReview(note, commentaire, pseudo);
                        compteur++;
                      }
                    }
                    if(compteur == 0){//cad la liste n'est pas vide mais le membre qui veut ajouter n'a pas encore mis d'avis pour cet Item
                      i.addReview(new Review(commentaire, note, pseudo));
                    }
                  }
                }
              }

            }
          }
          else
            throw new exception.NotItem("Le livre n'est pas present");
        }else
          throw new exception.NotMember("Le membre n est pas present");
      }

    }
    return note;
  }

  /**
   * Permet de donner un avis sur un film
   * Retourne la note moyenne de ce film
   *
   * @param pseudo pseudo du membre
   * @param password password du membre
   * @param titre titre du film
   * @param note note attribuée
   * @param commmentaire commentaire attribué

   * @throws  : BadEntry
   * <ul>
   <li>  si le pseudo n'est pas instancié
   *  <li>  si le pseudo a moins de 1 caractère
   *  <li>  si le password n'est pas instancié
   *  <li>  si le password 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 n'est pas instancié
   * </ul><br>      
   * @throws NotMember :
   * si le pseudo n'est pas celui d'un membre 
   * si le pseudo et le password ne correspondent pas.
   *
   * </ul><br>      
   * @throws NotItem : si le titre n'est pas le titre d'un film. 
   *
   * @return la note moyenne du film
   * @throws MemberAlreadyExists
   */

  public float reviewItemFilm(String pseudo, String password, String titre, float note, String commentaire) throws BadEntry, NotMember, NotItem, MemberAlreadyExists{
    int compteur=0;
    String condition = "other";
    //test saisie pseudo password
    if(checkEntryPseudoPassword(pseudo,password)){ // true
      //doit retourner le membre
      //verification si le membre est bien present
      if(checkMember(pseudo, password, condition)){ // si true : membre présent, on continu ...
        //verification saisie des champs relatifs au riew
        if((checkEntryReview(titre,note,commentaire))){ // si true : on continu
          //verification que le titre de Book est bien présent
          Film reviewedFilm = esTuCeFilm(titre);
          if(reviewedFilm!=null){ //si livre present
            //pour chaque élément de la liste d'item
            for(Item i : _listItems){
              //verifie qu'il s'agit d'un livre
              if(i instanceof Film){
                //compare le titre entre en parametre a celui dans la liste
                if(i.getTitre().trim().toLowerCase().equals(titre.trim().toLowerCase())){
                  //cree une nouvelle liste a partir de la liste d'avis du livre
                  LinkedList<Review> reviews = i.getReview();
                  //si la liste est vide = 1er avis
                  if(reviews.size()==0){
                    i.addReview(new Review(commentaire, note, pseudo));
                  }
                  else{
                    //sinon pour chaque element de la liste d'avis
                    for(Review r : reviews){
                      //on cherche le pseudo entre au debut
                      if(r.getPseudo().trim().toLowerCase().equals(pseudo.trim().toLowerCase())){
                        //on met a jour
                        i.setReview(note, commentaire, pseudo);
                        compteur++;
                      }
                    }
                    if(compteur == 0){//cad la liste n'est pas vide mais le membre qui veut ajouter n'a pas encore mis d'avis pour cet Item
                      i.addReview(new Review(commentaire, note, pseudo));
                    }
                  }
                }
              }

            }
          }
          else
            throw new exception.NotItem("Le film n'est pas present");
        }else
          throw new exception.NotMember("Le membre n est pas present");
      }

    }
    return note;
  }


  /**
   * Getter of the property <tt>members</tt>
   * @return  Returns the member.
   */
  public Collection getMembers(){
    return _listMembers;
  }
  /**
   * Setter of the property <tt>members</tt>
   * @param members  The member to set.
   */
  //  public void setMembers(Collection members) {
  //    _listMembers = (LinkedList)members;
  //  }



  public String toString(){
    String message= "Membre de notre listeMembers : \n";
    for(int i=0;i<_listMembers.size();i++){
      message = message +_listMembers.get(i);
    }
    if(message=="Membre de notre listeMembers : \n")
      message="Pas de membre";

    return message; 
  }


  /**
   * Getter of the property <tt>items</tt>
   * @return  Returns the items.
   */
  public LinkedList <Item> getItems() {
    return _listItems;
  }

  /**
   * Setter of the property <tt>items</tt>
   * @param items  The items to set.
   */
  //  public void setItems(Collection items) {
  //    this._listItems = (LinkedList)items;
  //  }

  /**
   * @uml.property  name="item"
   * @uml.associationEnd  multiplicity="(0 -1)" inverse="socialNetwork1:avis.Item"
   */
  //private Collection item;

  /**
   * Getter of the property <tt>item</tt>
   * @return  Returns the item.
   * @uml.property  name="item"
   */
  //  public Collection getItem() {
  //    return item;
  //  }

  /**
   * Setter of the property <tt>item</tt>
   * @param item  The item to set.
   * @uml.property  name="item"
   */
  //  public void setItem(Collection item) {
  //    this.item = item;
  //  }


  /**
   * @throws MemberAlreadyExists
   * @throws BadEntry
   */
  public void main() throws BadEntry, MemberAlreadyExists, NotMember {

  }


  public int existeOuPas(ReviewOpinion remplaceOrNot,LinkedList <Review> lesAutres){ // permet de dire si fo remplacer ou pas et si oui à quelle position.
    int position =0;

    for(int j =0;j<lesAutres.size();j++){
      if((lesAutres.get(j).getCommentaire())==(remplaceOrNot.getCommentaire())){

        position = j;
      }
    }
    return position;
  }


  /**
   * Donner son opinion sur un Avis.
   * Ajoute l'opinion de ce membre sur cet Avis 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 donnant son avis sur une opinion d'un autre membre
   * @param password son mot de passe
   * @param titre titre du film concerné
   * @param reviewPseudo pseudo du membre qui a posé l'avis du film
   * @param note la note qu'il donne à l'opinion
   * @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 le reviewPseudo 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 NotMember : si le reviewPseudo n'est pas celui d'un membre.
   * @throws NotItem : si le titre n'est pas le titre d'un film.
   * @throws NotAvis : si reviewPseudo n'a pas donné d'avis sur ce film.
   *
   * @return la moyenne des opinions de ce film
   * @throws MemberAlreadyExists
   */
  public float reviewOpinionFilm(String pseudo, String password, String titre, String reviewPseudo, float note, String commentaire) throws BadEntry, NotMember, NotItem, NotAvis, MemberAlreadyExists {
    // variable qui va contenir l'avis
    Review avi = null;
    String condition = "other";
    if(checkEntryAvisDavis(titre, reviewPseudo, note, commentaire)){

      // On récupère le membre qui note et qui est noté

      // On récupère la liste des membres
      LinkedList<Member>  m = (LinkedList<Member>) getMembers();

      // variable qui stock le membre qui note
      Member membre = null;
      //variable qui stock le membre qui est noté
      Member reviewMembre = null;

      // parcours de la liste
      for (int i=0;i<m.size();i++) {

        if(checkEntryPseudoPassword(pseudo,password)){

          if(checkMember(pseudo, password, condition)){

            // on récupère le membre qui note
            membre=m.get(i);
          }
        }

        // on cherche le membre noté qui a ce pseudo
        if (m.get(i).getPseudo().trim().equalsIgnoreCase(reviewPseudo)) {   
          // on récupère le membre noté
          reviewMembre=m.get(i);
       

      }

      // si le membre qui note ou qui est noté n'a pas été trouvé
      if (membre == null) throw new NotMember(pseudo);
      if (reviewMembre == null) throw new NotMember(reviewPseudo);


      // On cherche maintenant le film ou le livre qui correspond à l'avis que l'on veut noter dans ces variables

      Film film = null;

      LinkedList <Film>  f = new LinkedList <Film> ();
      for(int j=0;j<_listItems.size();j++){
        if(_listItems.get(j) instanceof Film){
          f.add((Film) _listItems.get(j));
        }
      }

      // on parcours les films
      for (int i=0;i<f.size();i++) {

        // on cherche le film qui correspond dans la liste
        if (f.get(i).getTitre().equals(titre)) {
          film=f.get(i)
        }

      }

      // On renvoi une exception si aucun item a été trouvé
      if (film == null) throw new NotItem(titre);

      // on va maintenant déterminer quel avis correspond à cet item :
      LinkedList <Review>  a = film.getReview();

      // on parcours la liste d'avis
      for (int i=0;i<a.size();i++) {

        // si le membre à noter a déjà donné un avis on récupère l'avis
        if (a.get(i).getPseudo().equalsIgnoreCase(reviewPseudo))
          avi = a.get(i);     
      }

      if (avi == null) throw new NotAvis("l'avis n'existe pas");

      // on récupère la liste des ReviewAvis
      LinkedList <ReviewOpinion>  r = avi.getAvisDavis();
      // variable qui va contenir l'ancien ReviewAvis s'il existe
      ReviewOpinion oldReviewAvis = null;


      // on parcours la liste de ReviewAvis
      for (int i=0;i<_listReviewsOfReviews .size();i++) {

        // si le membre a déjà donné un ReviewAvis on récupère ce ReviewAvis
        if (_listReviewsOfReviews.get(i).getMember().getPseudo().equalsIgnoreCase(pseudo))
          oldReviewAvis = _listReviewsOfReviews.get(i);

      }

      // si le membre n'a jamais donné de ReviewAvis, on instancie un ReviewAvis
      if (oldReviewAvis == null) {

        // On instancie un nouveau commentaire et on l'ajoute à la liste
        ReviewOpinion reviewAvis = new ReviewOpinion(membre,note,commentaire);
        avi.getAvisDavis().add(reviewAvis);

      }
      else {
        // sinon on le met à jour
        oldReviewAvis.setNote(note);
        oldReviewAvis.setCommentaire(commentaire);
     

      // on met à jour le karma
      updateKarma(reviewMembre);

    }
    // renvoi la moyenne de l'avis d'avis
    return avi.getNote();

  }
  /**
   * Donner son opinion sur un Avis de livre.
   * Ajoute l'opinion de ce membre sur cet Avis au <i>SocialNetwork</i>
   * Si une opinion de ce membre sur ce livre  préexiste, elle est mise à jour avec ces nouvelles valeurs.
   * Le Karma du membre que l'on note est automatiquement mis à jour
   *
   * @param pseudo pseudo du membre émettant l'opinion
   * @param password son mot de passe
   * @param titre titre du livre concerné
   * @param reviewPseudo pseudo du membre émettant l'opinion
   * @param note la note qu'il donne à l'opinion
   * @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 le reviewPseudo 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 NotMember : si le reviewPseudo n'est pas celui d'un membre.
   * @throws NotItem : si le titre n'est pas le titre d'un film.
   * @throws NotAvis : si reviewPseudo n'a pas donné d'avis sur ce film.
   *
   * @return la moyenne des opinions de ce livre
   * @throws MemberAlreadyExists
   */
  public float reviewOpinionBook(String pseudo, String password, String titre, String reviewPseudo, float note, String commentaire) throws BadEntry, NotMember, NotItem, NotAvis, MemberAlreadyExists {
    // variable qui va contenir l'avis
    Review avi = null;
    String condition = "other";

    //test saisie pseudo password
    if(checkEntryPseudoPassword(pseudo,password)){ // true
      //doit retourner le membre
      //verification si le membre est bien present
      if(checkMember(pseudo, password, condition)) // si true : membre présent, on continu ...
        //verification des entree pour le reviews d'avis
        if(checkEntryAvisDavis(titre, reviewPseudo, note, commentaire)){
          //si pas d'exception
         
         
          // On récupère le membre qui note et qui est noté

          // On récupère la liste des membres
          LinkedList<Member>  m = (LinkedList<Member>) getMembers();

          // variable qui stock le membre qui note
          Member membre = null;
          //variable qui stock le membre qui est noté
          Member reviewMembre = null;

          // parcours de la liste
          for (int i=0;i<m.size();i++) {

            if(checkEntryPseudoPassword(pseudo,password)){

              if(checkMember(pseudo, password, condition)){

                // on récupère le membre qui note
                membre=m.get(i);
              }
            }


            // on cherche le membre noté qui a ce pseudo
            if (m.get(i).getPseudo().trim().equalsIgnoreCase(reviewPseudo)) {   
              // on récupère le membre noté
              reviewMembre=m.get(i);
           

          }

          // si le membre qui note ou qui est noté n'a pas été trouvé
          if (membre == null) throw new NotMember(pseudo);
          if (reviewMembre == null) throw new NotMember(reviewPseudo);


          // On cherche maintenant le film ou le livre qui correspond à l'avis que l'on veut noter dans ces variables

          Book book = null;

          // on récupère les films dans f
          LinkedList <Book>  b = new LinkedList <Book> ();
          for(int j=0;j<_listItems.size();j++){
            if(_listItems.get(j) instanceof Film){
              b.add((Book) _listItems.get(j));
            }
          }

          // on parcours les films
          for (int i=0;i<b.size();i++) {

            // on cherche le film qui correspond dans la liste
            if (b.get(i).getTitre().equals(titre)) {
              book=b.get(i)
            }

          }

          // On renvoi une exception si aucun item a été trouvé
          if (book == null) throw new NotItem(titre);

          // on va maintenant déterminer quel avis correspond à cet item :

          // on récupère la liste des avis des livres
          LinkedList <Review>  a = book.getReview();



          // on parcours la liste d'avis
          for (int i=0;i<a.size();i++) {

            // si le membre à noter a déjà donné un avis on récupère l'avis
            if (a.get(i).getPseudo().equalsIgnoreCase(reviewPseudo))
              avi = a.get(i);

          }

          // si l'avis n'a pas été donné
          if (avi == null) throw new NotAvis("l'avis n'existe pas");

          // on va regarder si on a pas déjà un avis similaire existant :

          // on récupère la liste des ReviewAvis
          LinkedList <ReviewOpinion> lesAvisDavis = avi.getAvisDavis();
          // variable qui va contenir l'ancien ReviewAvis s'il existe
          ReviewOpinion oldReviewAvis = null;

          // on parcours la liste de ReviewAvis
          for (int i=0;i<lesAvisDavis .size();i++) {

            // si le membre a déjà donné un ReviewAvis on récupère ce ReviewAvis
            if (lesAvisDavis.get(i).getMember().getPseudo().equalsIgnoreCase(pseudo))
              oldReviewAvis = lesAvisDavis.get(i);

          }

          // si le membre n'a jamais donné de ReviewAvis, on instancie un ReviewAvis
          if (oldReviewAvis == null) {

            // On instancie un nouveau commentaire et on l'ajoute à la liste
            ReviewOpinion reviewAvis = new ReviewOpinion(membre,note,commentaire);
            avi.getAvisDavis().add(reviewAvis);

          }
          else {
            // sinon on le met à jour
            oldReviewAvis.setNote(note);
            oldReviewAvis.setCommentaire(commentaire);
          }


          // on met à jour le karma
          updateKarma(reviewMembre);


          // renvoi la moyenne de l'avis d'avis
       

    }
    return avi.getNote();
  }

  /**
   * Mettre à jour le karma d'un membre
   *
   * @param membre le karma du membre que l'on veut mettre à jour
   *
   */

  public void updateKarma(Member membre) {


    LinkedList <Film>  f = new LinkedList <Film> ();
    for(int j=0;j<_listItems.size();j++){
      if(_listItems.get(j) instanceof Film){
        f.add((Film) _listItems.get(j));
      }
    }
    LinkedList <Book>  b = new LinkedList <Book> ();
    for(int j=0;j<_listItems.size();j++){
      if(_listItems.get(j) instanceof Film){
        b.add((Book) _listItems.get(j));
      }
    }

    LinkedList <Review>  review;
    LinkedList<ReviewOpinion> lesAvisDavis;
    float somme = 0;
    int compteur =0;

    // on parcours les films
    for (int i=0;i<f.size();i++) {

      // on prend la liste de l'avis du nième film
      review=f.get(i).getReview()

      // on parcours l'avis
      for (int j=0;j<review.size();j++) {

        // si l'avis a été fait par le pseudo
        if (review.get(j).getPseudo().equals(membre.getPseudo())) {

          // on prend la liste des avis d'avis
          lesAvisDavis= review.get(j).getAvisDavis();

          // on en fait la somme des notes
          for (int k=0;k<lesAvisDavis.size();k++) {
            somme=somme+(lesAvisDavis.get(k)).getNote();
            compteur++;     
          }
        }
      } 
    }


    // on parcours les livres
    for (int i=0;i<b.size();i++) {

      // on prend la liste de l'avis du nième livre
      review=b.get(i).getReview()

      // on parcours l'avis
      for (int j=0;j<review.size();j++) {

        // si l'avis a été fait par le pseudo
        if (review.get(i).getPseudo().equals(membre.getPseudo())) {

          // on prend la liste des avis d'avis
          lesAvisDavis=review.get(i).getAvisDavis();

          // on en fait la somme des notes
          for (int k=0;k<lesAvisDavis.size();k++) {
            somme=somme+lesAvisDavis.get(i).getNote();
            compteur++;     
          }
        }
      } 
    }

    // on met à jour le karma du membre
    membre.setKarma(somme/compteur);

  }

}
TOP

Related Classes of avis.SocialNetwork

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.