@POST
 @Produces(MediaType.APPLICATION_JSON)
 @Timed(name = "create-book")
 public Response createBook(BookLink bookRequest) {
   ArrayList<LinkDto> authorArray = new ArrayList();
   Book newBook =
       new Book(
           bookRequest.getBookTitle(),
           bookRequest.getBookAuthors(),
           bookRequest.getBookLanguage(),
           bookRequest.getNoOfPages(),
           bookRequest.getPublication_date(),
           bookRequest.getBookStatus(),
           bookRequest.getBookReviews()); // newbook created
   Long new_isbn = newBook.getNewIsbn();
   Map<Long, Author> authorMap = new HashMap<Long, Author>();
   book_map.put(new_isbn, newBook);
   for (Author author : bookRequest.getBookAuthors()) {
     Long author_id = author.createAuthorID();
     authorMap.put(author_id, author);
     authorArray.add(
         new LinkDto("view-author", "/books/" + new_isbn + "/authors/" + author_id, "GET"));
   }
   newBook.setBookAuthors(authorArray);
   AuthorHashMap.put(new_isbn, authorMap);
   LinksDto linkResponse = new LinksDto();
   linkResponse.addLink(new LinkDto("view-book", "/books/" + new_isbn, "GET"));
   linkResponse.addLink(new LinkDto("update-book", "/books/" + new_isbn, "PUT"));
   linkResponse.addLink(new LinkDto("delete-book", "/books/" + new_isbn, "PUT"));
   linkResponse.addLink(new LinkDto("create-review", "/books/" + new_isbn + "/reviews", "POST"));
   return Response.created(null).entity(linkResponse).build();
 }
  @GET
  @Path("/{reviewId}")
  @Timed(name = "view-book-by-reviewId")
  public Response viewBookReview(
      @PathParam("isbn") LongParam isbn, @PathParam("reviewId") IntParam reviewId) {

    Book book = bookRepository.getBookByISBN(isbn.get());

    ReviewDto reviewResponse = null;
    List<Review> reviewList = book.getReview();

    List<Review> tempList = new ArrayList<Review>();
    for (Review reviewObj : reviewList) {

      if (reviewObj.getId() == reviewId.get()) tempList.add(reviewObj);
    }
    reviewResponse = new ReviewDto(tempList);
    String location = "/books/" + book.getIsbn() + "/reviews/";

    HashMap<String, Object> map = new HashMap<String, Object>();

    Review review = reviewResponse.getReviewList().get(0);
    map.put("review", review);
    reviewResponse.addLink(new LinkDto("view-review", location + reviewId.get(), "GET"));
    map.put("links", reviewResponse.getLinks());
    return Response.status(200).entity(map).build();
  }
 // ****VIEWING A BOOK****
 @GET
 @Path("/{isbn}")
 @Timed(name = "view-book")
 public BookDto getBookByIsbn(@PathParam("isbn") LongParam isbn) {
   Book book = bookRepository.getBookByISBN(isbn.get());
   BookDto bookResponse = new BookDto(book);
   bookResponse.addLink(new LinkDto("view-book", "/books/" + book.getIsbn(), "GET"));
   bookResponse.addLink(new LinkDto("update-book", "/books/" + book.getIsbn(), "POST"));
   return bookResponse;
 }
  // ****DISAPLAYING ALL REVIEWS****
  @GET
  @Path("/{isbn}/reviews")
  @Timed(name = "view-all-reviews")
  public ReviewsDto displayReviews(@PathParam("isbn") long isbn) {

    Book book = bookRepository.getBookByISBN(isbn);
    ReviewsDto response = new ReviewsDto(book.getReviews());

    return response;
  }
  @GET
  @Timed(name = "view-book-review")
  public Response viewAllBookReview(@PathParam("isbn") LongParam isbn, Review request) {

    Book book = bookRepository.getBookByISBN(isbn.get());

    ReviewDto reviewResponse = new ReviewDto(book.getReview());

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("reviews", reviewResponse.getReviewList());
    map.put("links", new ArrayList<String>());
    return Response.status(200).entity(map).build();
  }
 // ****DISPLAYING A REVIEWS****
 @GET
 @Path("/{isbn}/reviews/{id}")
 @Timed(name = "view-review")
 public Response displayReview(@PathParam("isbn") long isbn, @PathParam("id") long id) {
   int i = 0;
   Book book = bookRepository.getBookByISBN(isbn);
   ReviewDto response = new ReviewDto(book.getoneReview(i));
   LinksDto links = new LinksDto();
   links.addLink(
       new LinkDto(
           "view-review",
           "/books/" + book.getIsbn() + "/reviews/" + book.getoneReview(i).getId(),
           "GET"));
   return Response.ok(links).build();
 }
  // ****CREATING A BOOK****
  @POST
  @Timed(name = "create-book")
  public Response createBook(Book request) {
    // Store the new book in the BookRepository so that we can retrieve it.
    Book savedBook = bookRepository.saveBook(request);

    String location = "/books/" + savedBook.getIsbn();
    BookDto bookResponse = new BookDto(savedBook);

    ArrayList<LinkDto> links = new ArrayList<LinkDto>();
    links.add(new LinkDto("view-book", location, "GET"));
    links.add(new LinkDto("update-book", location, "PUT"));
    links.add(new LinkDto("add-book", location, "POST"));
    links.add(new LinkDto("delete-book", location, "DELETE"));
    return Response.status(201).entity(links).build();
  }
  @PUT
  @Path("/{isbn}")
  @Timed(name = "update-book")
  public Response updateBookStatus(
      @PathParam("isbn") LongParam isbn, @QueryParam("status") String status) {

    Book book = (Book) book_map.get(isbn.get());
    book.setNewStatus(status);
    LinksDto response = new LinksDto();
    response.addLink(new LinkDto("view-book", "/books/" + isbn, "GET"));
    response.addLink(new LinkDto("update-book", "/books/" + isbn, "PUT"));
    response.addLink(new LinkDto("delete-book", "/books/" + isbn, "DELETE"));
    response.addLink(new LinkDto("create-review", "/books/" + isbn + "/reviews", "POST"));
    if (reviewsArray.size() > 0)
      response.addLink(new LinkDto("view-all-reviews", "/books/" + isbn + "/reviews", "GET"));
    return Response.ok(response).build();
  }
  // ****UPDATING THE BOOK****
  @PUT
  @Path("/{isbn}")
  @Timed(name = "update-book")
  public Response updateBook(
      @PathParam("isbn") long isbn, @QueryParam("status") String status, Book request) {
    Book book = bookRepository.getBookByISBN(isbn);
    Book book1 = new Book();
    if (book.getIsbn() == isbn) book1 = bookRepository.updateBook(isbn, status);

    String location = "/books/" + book1.getIsbn();
    BookDto bookResponse = new BookDto(book1);

    ArrayList<LinkDto> links = new ArrayList<LinkDto>();
    links.add(new LinkDto("view-book", location, "GET"));
    links.add(new LinkDto("update-book", location, "PUT"));
    links.add(new LinkDto("add-book", location, "POST"));
    links.add(new LinkDto("delete-book", location, "DELETE"));

    return Response.status(201).entity(links).build();
  }
  // ****CREATING REVIEWS****
  @POST
  @Path("/{isbn}/reviews")
  @Timed(name = "create-review")
  public Response createReview(@Valid Review reviews, @PathParam("isbn") long isbn) {

    Book retrieveBook = bookRepository.getBookByISBN(isbn);

    reviews.setId((int) reviewID);
    retrieveBook.getReviews().add(reviews);
    reviewID++;

    ReviewDto reviewResponse = new ReviewDto();
    reviewResponse.addLink(
        new LinkDto(
            "view-review",
            "/books/" + retrieveBook.getIsbn() + "/reviews/" + reviews.getId(),
            "GET"));

    return Response.status(201).entity(reviewResponse.getLinks()).build();
  }
  @POST
  @Timed(name = "create-review")
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  public Response createReview(@PathParam("isbn") LongParam isbn, Review request) {

    // int rating = request.getRating();

    if (request.getComment() == null) {
      return Response.status(400).type("text/plain").entity(" Comment is a required field").build();
    }

    if (request.getRating() == 0) {
      return Response.status(400)
          .type("text/plain")
          .entity(" Rating is a required field !!!!")
          .build();
    }
    final List<Integer> ratingList = Arrays.asList(1, 2, 3, 4, 5);

    if (!(ratingList.contains(request.getRating()))) {
      return Response.status(400)
          .type("text/plain")
          .entity("Invalid value for Rating. Ratings can be between 1 - 5 stars")
          .build();
    }

    Review reviewObject = bookRepository.createReview(isbn.get(), request);

    Book book = bookRepository.getBookByISBN(isbn.get());

    String location = "/books/" + book.getIsbn() + "/reviews/" + reviewObject.getId();
    BookDto bookResponse = new BookDto(book);
    bookResponse.addLink(new LinkDto("view-review", location, "GET"));

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("links", bookResponse.getLinks());
    return Response.status(201).entity(map).build();
  }
  /** This will auto-generate unique ISBN for new books. */
  @Override
  public Book saveBook(Book newBook) {
    checkNotNull(newBook, "newBook instance must not be null");
    // Generate new ISBN
    Long isbn = generateISBNKey();
    newBook.setIsbn(isbn);
    // TODO: create and associate other fields such as author

    // Finally, save the new book into the map
    bookInMemoryMap.putIfAbsent(isbn, newBook);

    return newBook;
  }
  private ConcurrentHashMap<Long, Book> seedData() {
    ConcurrentHashMap<Long, Book> bookMap = new ConcurrentHashMap<Long, Book>();
    Book book = new Book();
    book.setIsbn(1);
    book.setCategory("computer");
    book.setTitle("Java Concurrency in Practice");
    try {
      book.setCoverimage(new URL("http://goo.gl/N96GJN"));
    } catch (MalformedURLException e) {
      // eat the exception
    }
    bookMap.put(book.getIsbn(), book);

    book = new Book();
    book.setIsbn(2);
    book.setCategory("computer");
    book.setTitle("Restful Web Services");
    try {
      book.setCoverimage(new URL("http://goo.gl/ZGmzoJ"));
    } catch (MalformedURLException e) {
      // eat the exception
    }
    bookMap.put(book.getIsbn(), book);

    return bookMap;
  }
 @Override
 public void addNewBook(Book newBook) {
   // TODO Auto-generated method stub
   bookInMemoryMap.putIfAbsent(newBook.getIsbn(), newBook);
 }
예제 #15
0
  public Runnable listener() throws JMSException {
    long isbn;
    String bookTitle;
    String bookCategory;
    String webURL;
    Book tempBook = new Book();
    ArrayList<String> arrivals = new ArrayList<String>();
    StompJmsConnectionFactory factory = new StompJmsConnectionFactory();
    factory.setBrokerURI("tcp://" + apolloHost + ":" + apolloPort);
    System.currentTimeMillis();
    // System.out.println("Waiting for messages...");
    while (true) {
      Connection connection = factory.createConnection(apolloUser, apolloPassword);
      connection.start();
      Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
      Destination dest = new StompJmsDestination(stompTopic);
      MessageConsumer consumer = session.createConsumer(dest);
      while (true) {
        Message msg = consumer.receive(500);
        if (msg == null) break;
        if (msg instanceof TextMessage) {
          String body = ((TextMessage) msg).getText();
          arrivals.add(body);

        } else {
          System.out.println("Unexpected message type: " + msg.getClass());
        }
      }
      connection.close();
      if (!arrivals.isEmpty()) {
        for (String arrival : arrivals) {
          isbn = Long.parseLong(arrival.split(":")[0]);
          bookTitle = arrival.split(":")[1].replaceAll("^\"|\"$", "");
          bookCategory = arrival.split(":")[2].replaceAll("^\"|\"$", "");
          webURL = arrival.split(":\"")[3];
          webURL = webURL.substring(0, webURL.length() - 1);
          tempBook = bookRepository.getBookByISBN(isbn);
          // System.out.println("tempBook is "+tempBook);
          // System.out.println("dummyBook is "+dummyBook);

          if (tempBook.getIsbn() == 0) {
            // System.out.println("reachable");
            tempBook.setIsbn(isbn);
            tempBook.setCategory(bookCategory);
            tempBook.setTitle(bookTitle);
            try {
              tempBook.setCoverimage(new URL(webURL));
            } catch (MalformedURLException e) {
              e.printStackTrace();
            }
            bookRepository.addBook(tempBook);

          } else {
            // System.out.println("reachable, changing to available");
            tempBook.setStatus(Status.available);
          }
        }
        arrivals.clear();
      }
    }
  }