/* * 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.Customer; import com.restfully.shop.domain.Customers; import com.restfully.shop.domain.Link; import com.restfully.shop.persistence.CustomerEntity; import org.springframework.transaction.annotation.Transactional; 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; @Transactional public class CustomerResourceBean implements CustomerResource { private EntityManager em; @PersistenceContext public void setEntityManager(EntityManager em) { this.em = em; } public Response createCustomer(Customer customer, UriInfo uriInfo) { CustomerEntity entity = new CustomerEntity(); domain2entity(entity, customer); em.persist(entity); em.flush(); System.out.println("Created customer " + entity.getId()); UriBuilder builder = uriInfo.getAbsolutePathBuilder(); builder.path(Integer.toString(entity.getId())); return Response.created(builder.build()).build(); } public static void domain2entity(CustomerEntity entity, Customer customer) { entity.setId(customer.getId()); entity.setFirstName(customer.getFirstName()); entity.setLastName(customer.getLastName()); entity.setStreet(customer.getStreet()); entity.setCity(customer.getCity()); entity.setState(customer.getState()); entity.setZip(customer.getZip()); entity.setCountry(customer.getCountry()); } public static Customer entity2domain(CustomerEntity entity) { Customer cust = new Customer(); cust.setId(entity.getId()); cust.setFirstName(entity.getFirstName()); cust.setLastName(entity.getLastName()); cust.setStreet(entity.getStreet()); cust.setCity(entity.getCity()); cust.setState(entity.getState()); cust.setZip(entity.getZip()); cust.setCountry(entity.getCountry()); return cust; } public Customers getCustomers(int start, int size, String firstName, String lastName, UriInfo uriInfo) { UriBuilder builder = uriInfo.getAbsolutePathBuilder(); builder.queryParam("start", "{start}"); builder.queryParam("size", "{size}"); ArrayList<Customer> list = new ArrayList<Customer>(); ArrayList<Link> links = new ArrayList<Link>(); Query query = null; if (firstName != null && lastName != null) { query = em.createQuery("select c from Customer c where c.firstName=:first and c.lastName=:last"); query.setParameter("first", firstName); query.setParameter("last", lastName); } else if (lastName != null) { query = em.createQuery("select c from Customer c where c.lastName=:last"); query.setParameter("last", lastName); } else { query = em.createQuery("select c from Customer c"); } List customerEntities = query.setFirstResult(start) .setMaxResults(size) .getResultList(); for (Object obj : customerEntities) { CustomerEntity entity = (CustomerEntity) obj; list.add(entity2domain(entity)); } // next link // If the size returned is equal then assume there is a next if (customerEntities.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); } Customers customers = new Customers(); customers.setCustomers(list); customers.setLinks(links); return customers; } public Customer getCustomer(int id) { CustomerEntity customer = em.getReference(CustomerEntity.class, id); return entity2domain(customer); } }