package org.talend.esb.examples.ebook.persistence; import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import javax.transaction.Transactional; import javax.transaction.Transactional.TxType; 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.core.Response; import javax.ws.rs.core.Response.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.talend.esb.examples.ebook.model.Book; import org.talend.esb.examples.ebook.model.BookRepository; import org.talend.esb.examples.ebook.model.Format; @Produces({"application/json", "test/xml"}) @Singleton @Transactional(value=TxType.SUPPORTS) public class BookService { Logger LOG = LoggerFactory.getLogger(BookService.class); @Inject private BookRepository bookRepo; @GET @Path("{id}") public Response getBook(@PathParam("id") String id) { System.out.println(id); Book book = bookRepo.getBook(id); return book == null ? Response.status(Status.NOT_FOUND).build() : Response.ok(book).build(); } @GET public Collection<Book> getBooks() { List<Book> outBooks = new ArrayList<>(); for (Book book : bookRepo.getBooks()) { Book outBook = new Book(); outBook.setId(book.getId()); outBook.setTitle(book.getTitle()); outBook.setCreator(book.getCreator()); outBooks.add(outBook); } return outBooks; } @POST @Path("{id}") public Response sendBook(@PathParam("id") String id) { String recipient = "root@localhost"; LOG.info("Sending book {} to {}.", id, recipient ); Book book = bookRepo.getBook(id); Format format = getMobiFormat(book); if (format == null) { return Response.status(Status.NOT_FOUND).build(); } URI uri = format.getFile(); new MailSender().send(recipient, uri); LOG.info("Mail sent successfully"); return Response.ok().build(); } private Format getMobiFormat(Book book) { for (Format format : book.getFormats()) { if ("application/x-mobipocket-ebook".equals(format.getMediaType())) { return format; } } return null; } }