Package service.advanced

Source Code of service.advanced.PersonServiceImpl

/**
* 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 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);
    }

}
TOP

Related Classes of service.advanced.PersonServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.