/** * Copyright (C) 2010 Talend Inc. - www.talend.com */ package service.advanced; import java.net.URI; import java.util.List; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import common.advanced.Person; import common.advanced.PersonCollection; import common.advanced.PersonService; /** * JAX-RS PersonService root resource */ public class PersonServiceImpl implements PersonService { private PersonInfoStorage storage; /** * Thread-safe JAX-RS UriInfo proxy providing information about the current request URI, etc */ @Context private UriInfo uriInfo; public PersonServiceImpl() { } public void setStorage(PersonInfoStorage storage) { this.storage = storage; } @Override public String patch() { return "Patch is good"; } @Override public Person getPersonSubresource(Long id) { return storage.getPerson(id); } @Override public Response getPersons(Integer start, Integer size) { List<Person> collPer = getPersonsList(start, size); PersonCollection perColl = new PersonCollection(); perColl.setList(collPer); ResponseBuilder rb; if (collPer.size() == 0) { rb = Response.noContent(); } else { rb = Response.ok(perColl); } return rb.build(); } @Override public PersonCollection findPersons(List<String> names) { PersonCollection collection = new PersonCollection(); for (String name : names) { for (Person p : storage.getAll()) { if (p.getName().equalsIgnoreCase(name)) { collection.addPerson(p); } } } return collection; } @Override public Response addChild(Long parentId, Person child) { Person parent = storage.getPerson(parentId); if (parent == null) { return Response.status(Response.Status.NOT_FOUND).build(); } parent.addChild(child); Long childId = storage.addPerson(child); UriBuilder locationBuilder = uriInfo.getBaseUriBuilder(); locationBuilder.path(PersonService.class); URI childLocation = locationBuilder.path("{id}").build(childId); return Response.status(Response.Status.CREATED).location(childLocation).build(); } private List<Person> getPersonsList(int start, int count) { List<Person> pList = storage.getAll(); if (start < 0 || count < -1) { // illegal parameters, bad client request throw new WebApplicationException(Response.Status.BAD_REQUEST); } if (count == 0 || start > pList.size()) { // returning null will result in the client getting HTTP 204 // if needed, an empty collection can be returned instead return null; } else if (count == -1 || pList.size() < start + count) { count = pList.size() - start; } return pList.subList(start, start + count); } }