/* * This library is free software; you can redistribute it and/or modify it under the terms of * the GNU Lesser General Public License as published by the Free Software Foundation; * either version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along with this * library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA */ package com.restfully.shop.services; import com.restfully.shop.domain.Link; import com.restfully.shop.domain.Product; import com.restfully.shop.domain.Products; import com.restfully.shop.persistence.ProductEntity; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import java.net.URI; import java.util.ArrayList; import java.util.List; @Stateless public class ProductResourceBean implements ProductResource { @PersistenceContext private EntityManager em; @Override public Response createProduct(Product product, UriInfo uriInfo) { ProductEntity entity = new ProductEntity(); domain2entity(entity, product); em.persist(entity); em.flush(); System.out.println("Created product " + entity.getId()); UriBuilder builder = uriInfo.getAbsolutePathBuilder(); builder.path(Integer.toString(entity.getId())); return Response.created(builder.build()).build(); } public static void domain2entity(ProductEntity entity, Product product) { entity.setId(product.getId()); entity.setCost(product.getCost()); entity.setName(product.getName()); } public static Product entity2domain(ProductEntity entity) { Product product = new Product(); product.setId(entity.getId()); product.setCost(entity.getCost()); product.setName(entity.getName()); return product; } @Override public Products getProducts(int start, int size, String name, UriInfo uriInfo) { UriBuilder builder = uriInfo.getAbsolutePathBuilder(); builder.queryParam("start", "{start}"); builder.queryParam("size", "{size}"); ArrayList<Product> list = new ArrayList<Product>(); ArrayList<Link> links = new ArrayList<Link>(); Query query = null; if (name != null) { query = em.createQuery("select p from Product p where p.name=:name"); query.setParameter("name", name); } else { query = em.createQuery("select p from Product p"); } List productEntities = query.setFirstResult(start) .setMaxResults(size) .getResultList(); for (Object obj : productEntities) { ProductEntity entity = (ProductEntity) obj; list.add(entity2domain(entity)); } // next link // If the size returned is equal then assume there is a next if (productEntities.size() == size) { int next = start + size; URI nextUri = builder.clone().build(next, size); Link nextLink = new Link("next", nextUri.toString(), "application/xml"); links.add(nextLink); } // previous link if (start > 0) { int previous = start - size; if (previous < 0) previous = 0; URI previousUri = builder.clone().build(previous, size); Link previousLink = new Link("previous", previousUri.toString(), "application/xml"); links.add(previousLink); } Products products = new Products(); products.setProducts(list); products.setLinks(links); return products; } @Override public Product getProduct(int id) { ProductEntity product = em.getReference(ProductEntity.class, id); return entity2domain(product); } }