Пример #1
0
  /**
   * Metoda dodająca ocenę
   *
   * @param id_ksiazka id książki wskazanej przez użytkownika
   * @param wartosc wartość oceny jaką wskazał użytkownia (1-5)
   * @param login login użytkownika który ocenia książkę.
   * @throws UzytkownikException jeśli użytkownik nie istnieje
   * @throws OcenaException jeśli ocena JUŻ istnieje
   * @throws KsiazkaException jeśli książka została zmodyfikowana podczas oceny (OptimistickLock).
   */
  @RolesAllowed("DodanieOceny")
  @Override
  public void ocenKsiazke(long id_ksiazka, int wartosc, String login)
      throws UzytkownikException, OcenaException, KsiazkaException, AutorException {
    Ocena ocena = new Ocena();
    ocena.setIdKsiazka(ksiazkaFacade.find(id_ksiazka));
    ocena.setIdUzytkownik(uzytkownikFacade.findByLogin(login));
    ocena.setOcena(wartosc);
    ocena.setUlubiona(false);
    ocenaFacade.create(ocena);

    long suma = 0;

    for (Ocena o : ocena.getIdKsiazka().getOcenaList()) {
      suma = suma + o.getOcena();
    }
    ocena
        .getIdKsiazka()
        .setSredniaOcen(new BigDecimal((double) suma / ocena.getIdKsiazka().getOcenaList().size()));
    ksiazkaFacade.edit(ocena.getIdKsiazka());
    for (Autor a : ocena.getIdKsiazka().getAutorList()) {
      BigDecimal licznik = BigDecimal.ZERO;
      BigDecimal mianownik = BigDecimal.ZERO;
      for (Ksiazka k : a.getKsiazkaList()) {
        if (k.getSredniaOcen() != null) {
          mianownik = mianownik.add(BigDecimal.valueOf(1.0 / (k.getIloscAutorow())));
          licznik =
              licznik.add(
                  k.getSredniaOcen().multiply(BigDecimal.valueOf(1.0 / k.getIloscAutorow())));
        }
      }
      a.setSrOcena(licznik.divide(mianownik, new MathContext(10)));
      autorFacade.edit(a);
    }
  }
Пример #2
0
 /**
  * Metoda zmieniająca ocenę dla danej ksiązki
  *
  * @param id_ksiazka id ksiązki wskazanej przez użytkownika
  * @param ocena wartośc oceny jaką wskazał użytkownik (1-5)
  * @param login login użytkownika który dokonuje zmiany oceny
  * @throws OcenaException wyjątek przy jednoczesnej modyfikacji, bądź w przypadku braku oceny.
  * @throws KsiazkaException wyjątek w przypadku modyfikacji książki
  * @throws UzytkownikException wyjątek rzucany w przypaku braku użytkownika
  * @throws pl.lodz.ssbd.exceptions.AutorException w przypadku modyfikacji autora
  */
 @Override
 @RolesAllowed("ZmianaOceny")
 public void zmienOcene(long id_ksiazka, int ocena, String login)
     throws OcenaException, KsiazkaException, UzytkownikException, AutorException {
   Ocena newOcena =
       ocenaFacade.findByKsiazkaAndLogin(
           ksiazkaFacade.find(id_ksiazka), uzytkownikFacade.findByLogin(login));
   if (newOcena == null) {
     throw new OcenaException("exceptions.ocenanieistnieje");
   }
   newOcena.setOcena(ocena);
   ocenaFacade.edit(newOcena);
   long suma = 0;
   for (Ocena o : newOcena.getIdKsiazka().getOcenaList()) {
     suma = suma + o.getOcena();
   }
   newOcena
       .getIdKsiazka()
       .setSredniaOcen(
           new BigDecimal((double) suma / newOcena.getIdKsiazka().getOcenaList().size()));
   ksiazkaFacade.edit(newOcena.getIdKsiazka());
   for (Autor a : newOcena.getIdKsiazka().getAutorList()) {
     BigDecimal licznik = BigDecimal.ZERO;
     BigDecimal mianownik = BigDecimal.ZERO;
     for (Ksiazka k : a.getKsiazkaList()) {
       if (k.getSredniaOcen() != null) {
         mianownik = mianownik.add(BigDecimal.valueOf(1.0 / (k.getIloscAutorow())));
         licznik =
             licznik.add(
                 k.getSredniaOcen().multiply(BigDecimal.valueOf(1.0 / k.getIloscAutorow())));
       }
     }
     a.setSrOcena(licznik.divide(mianownik, new MathContext(10)));
     autorFacade.edit(a);
   }
 }