private String toBibtex(Book book) throws IllegalArgumentException, IllegalAccessException {
   String result = "@Book {";
   String tabs;
   Class<? extends Object> obj = book.getClass();
   Field[] fields = obj.getDeclaredFields();
   for (Field field : fields) {
     field.setAccessible(true);
     if (field.getName().equals("tags")) {
       continue;
     }
     boolean ehto = (field.get(book) != null && !field.get(book).toString().isEmpty());
     if (ehto && field.getName().equals("citation")) {
       result += book.getCitation() + "\n";
       continue;
     }
     if (ehto) {
       if (field.getName().length() < 8) {
         tabs = "\t\t\t";
       } else {
         tabs = "\t\t";
       }
       result += String.format("%s%s=\t\t\"%s\",\n", field.getName(), tabs, field.get(book));
     }
   }
   int ind = result.lastIndexOf(",");
   result = new StringBuilder(result).replace(ind, ind + 1, "").toString();
   result += "}";
   result = aakkosetBibtexMuotoon(result);
   return result;
 }
 public void addTag(Long bookId, Tag tag) {
   Book book = getBook(bookId);
   book.getTags().add(tag);
   addBook(book);
 }