@Override
 // @Transactional
 public Integer update(BookView bookView)
     throws ValidationException, IllegalDatabaseStateException, ForbiddenException,
         NoSuchEntityException, AuthRequiredException {
   BookEntity bookEntity = bookCreationService.updateFields(bookView);
   return bookEntity.getId();
 }
 @Override
 @Transactional(propagation = Propagation.REQUIRED)
 public Boolean deleteBook(int bookId) throws NoSuchEntityException, ForbiddenException {
   BookEntity book = bookDao.getNotNull(bookId);
   bookAvailabilityService.isBookAvailable(book);
   book.setStatus(BookStatusesEnum.DELETED);
   return bookDao.update(book).getStatus().equals(BookStatusesEnum.DELETED);
 }
 @Override
 @Transactional(propagation = Propagation.REQUIRED)
 public Integer update(BookEntity book)
     throws ValidationException, IllegalDatabaseStateException, ForbiddenException,
         NoSuchEntityException, AuthRequiredException {
   bookAvailabilityService.isCurrentUsersBook(book);
   BookEntity bookEntity = bookDao.update(book);
   return bookEntity.getId();
 }
 private Boolean setStatusAndUpdate(Collection<BookEntity> to, BookStatusesEnum statuses)
     throws ForbiddenException {
   for (BookEntity bookEntity : to) {
     bookAvailabilityService.isStatusChangeAvailable(bookEntity, statuses);
     bookEntity.setStatus(statuses);
     if (!bookDao.update(bookEntity).getStatus().equals(statuses)) {
       return false;
     }
   }
   return true;
 }
 @Override
 @Transactional
 public boolean changeStatus(int id, BookStatusesEnum status)
     throws NoSuchEntityException, ForbiddenException, WrongStatusException {
   if (status == null) throw new WrongStatusException();
   BookEntity book = bookDao.getNotNull(id);
   bookAvailabilityService.isStatusChangeAvailable(book, status);
   book.setStatus(status);
   if (status == BookStatusesEnum.ACTIVE) book.setDateChanged(new Date());
   book = bookDao.update(book);
   return book != null;
 }
  @Override
  @Transactional
  public List<AuthorEntity> getBookAuthors(int id) throws NoSuchEntityException {
    BookEntity book = bookDao.getNotNull(id);
    List<AuthorEntity> list = Lists.newArrayList();

    if (book.getBookToAuthor() != null) {
      for (BookAuthorEntity b2a : book.getBookToAuthor()) list.add(b2a.getAuthor());
    }

    return list;
  }
 @Override
 @Transactional
 public List<KeywordEntity> getBookKeywords(int bookId) throws NoSuchEntityException {
   BookEntity bookEntity = bookDao.getNotNull(bookId);
   List<KeywordEntity> res = null;
   if ((bookEntity != null)
       && (bookEntity.getBookToKeywords() != null)
       && (bookEntity.getBookToKeywords().size() > 0)) {
     res = new ArrayList<KeywordEntity>();
     for (BookKeywordEntity key : bookEntity.getBookToKeywords()) res.add(key.getKeyword());
   }
   return res;
 }
 @Override
 @Transactional(propagation = Propagation.REQUIRED)
 public Set<BookOnPortalEntity> getBookPortals(int bookId) throws NoSuchEntityException {
   BookEntity book = bookDao.getNotNull(bookId);
   try {
     bookAvailabilityService.isCurrentUsersBook(book);
     return book.getBookPortals();
   } catch (ForbiddenException e) {
     if (book.getBookPortals() == null || book.getBookPortals().size() == 0) return null;
     Set<BookOnPortalEntity> list = new HashSet<BookOnPortalEntity>();
     for (BookOnPortalEntity portal : book.getBookPortals())
       if (BookPortalStatusEnum.ACTIVE.equals(portal.getStatus())) list.add(portal);
     return list;
   }
 }
 @Override
 @Transactional(propagation = Propagation.REQUIRED)
 public Integer get(String isbn) throws NoSuchEntityException, IllegalDatabaseStateException {
   BookEntity book = bookDao.getByIsbnNotNull(isbn);
   return book.getId();
 }