/* * 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 javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; import javax.ws.rs.core.StreamingOutput; import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @Path("/customers") public class CustomerResource { private Map<Integer, Customer> customerDB = Collections.synchronizedMap(new LinkedHashMap<Integer, Customer>()); public CustomerResource() { Customer customer; int id = 1; customer = new Customer(); customer.setId(id); customer.setFirstName("Bill"); customer.setLastName("Burke"); customer.setStreet("263 Clarendon Street"); customer.setCity("Boston"); customer.setState("MA"); customer.setZip("02115"); customer.setCountry("USA"); customerDB.put(id++, customer); customer = new Customer(); customer.setId(id); customer.setFirstName("Joe"); customer.setLastName("Burke"); customer.setStreet("263 Clarendon Street"); customer.setCity("Boston"); customer.setState("MA"); customer.setZip("02115"); customer.setCountry("USA"); customerDB.put(id++, customer); customer = new Customer(); customer.setId(id); customer.setFirstName("Monica"); customer.setLastName("Burke"); customer.setStreet("263 Clarendon Street"); customer.setCity("Boston"); customer.setState("MA"); customer.setZip("02115"); customer.setCountry("USA"); customerDB.put(id++, customer); customer = new Customer(); customer.setId(id); customer.setFirstName("Steve"); customer.setLastName("Burke"); customer.setStreet("263 Clarendon Street"); customer.setCity("Boston"); customer.setState("MA"); customer.setZip("02115"); customer.setCountry("USA"); customerDB.put(id++, customer); } @GET @Produces("application/xml") public StreamingOutput getCustomers(final @QueryParam("start") int start, final @QueryParam("size") @DefaultValue("2") int size) { return new StreamingOutput() { public void write(OutputStream outputStream) throws IOException, WebApplicationException { PrintStream writer = new PrintStream(outputStream); writer.println("<customers>"); synchronized (customerDB) { int i = 0; for (Customer customer : customerDB.values()) { if (i >= start && i < start + size) outputCustomer(" ", writer, customer); i++; } } writer.println("</customers>"); } }; } @GET @Produces("application/xml") @Path("uriinfo") public StreamingOutput getCustomers(@Context UriInfo info) { int start = 0; int size = 2; if (info.getQueryParameters().containsKey("start")) { start = Integer.valueOf(info.getQueryParameters().getFirst("start")); } if (info.getQueryParameters().containsKey("size")) { size = Integer.valueOf(info.getQueryParameters().getFirst("size")); } return getCustomers(start, size); } protected void outputCustomer(String indent, PrintStream writer, Customer cust) throws IOException { writer.println(indent + "<customer id=\"" + cust.getId() + "\">"); writer.println(indent + " <first-name>" + cust.getFirstName() + "</first-name>"); writer.println(indent + " <last-name>" + cust.getLastName() + "</last-name>"); writer.println(indent + " <street>" + cust.getStreet() + "</street>"); writer.println(indent + " <city>" + cust.getCity() + "</city>"); writer.println(indent + " <state>" + cust.getState() + "</state>"); writer.println(indent + " <zip>" + cust.getZip() + "</zip>"); writer.println(indent + " <country>" + cust.getCountry() + "</country>"); writer.println(indent + "</customer>"); } }