package com.library.bookmanangement_library.resource;
import java.net.URI;
import java.util.Date;
import javax.servlet.annotation.ServletSecurity;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.google.common.base.Optional;
import com.jayway.jaxrs.hateoas.core.HateoasResponse;
import com.library.bookmanangement_library.beans.Book;
import com.library.bookmanangement_library.dao.BookRepository;
@SuppressWarnings("deprecation")
@Path(value = "/library/books")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class BookResource {
/*
* Title (Required field)
Publication Date (Required field)
Language (Optional field)
Number of Pages (Optional field)
Status {available, checked-out, in-queue, or lost} # default to ‘available’
*/
@POST
public Response createBook(@QueryParam("title") String title,
@QueryParam("publication-date") String publicationDate,
@QueryParam("language") Optional<String> language,
@QueryParam("num-pages") Optional<String> numberOfPages,
@QueryParam("status") String status)
{
Book book = new Book();
book.setTitle(title);
book.setPublicationDate(new Date(publicationDate));
if(language.isPresent())
book.setLanguage(language.get());
if(numberOfPages.isPresent())
book.setNumberOfPages(Integer.parseInt(numberOfPages.get()));
book.setStatus("available");
//Adding book to repository and generating unique ISBN
String isbn=BookRepository.addBookToRepository(book);
return Response.created(URI.create(isbn)).build();
}
@GET
@Path(value = "/{isbn}")
public Response viewBook(@PathParam("isbn") String isbn){
Book book = BookRepository.getBookById(isbn);
return HateoasResponse.ok(book).link(book.getIsbn(),
book.getTitle(),
book.getPublicationDate(),
book.getNumberOfPages(),
book.getLanguage(),
book.getStatus())
.build();
}
}