/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.demos.ogm101.part3.rest.resource;
import java.util.List;
import javax.ejb.Stateless;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import org.hibernate.ogm.demos.ogm101.part3.model.Person;
import org.hibernate.ogm.demos.ogm101.part3.repo.PersonRepository;
import org.hibernate.ogm.demos.ogm101.part3.rest.mapper.ResourceMapper;
import org.hibernate.ogm.demos.ogm101.part3.rest.mapper.UriMapper;
import org.hibernate.ogm.demos.ogm101.part3.rest.model.PersonDocument;
/**
* REST resource for managing {@link Person}s.
*
* @author Gunnar Morling
*/
@Path("/persons")
@Produces("application/json")
@Consumes("application/json")
@Stateless
public class Persons {
@Inject
private PersonRepository personRepository;
@Inject
private ResourceMapper mapper;
@Inject
private UriMapper uris;
@Context
private UriInfo uriInfo;
@GET
@Path("/")
public Response listPersons() {
List<Person> persons = personRepository.getAll();
List<PersonDocument> personDocuments = mapper.toPersonDocuments( persons );
return Response.ok( personDocuments ).build();
}
@POST
@Path("/")
public Response createPerson(PersonDocument request) {
Person person = personRepository.create( mapper.toPerson( request ) );
return Response.created( uris.toUri( person ) ).build();
}
@GET
@Path("/{id}")
public Response getPerson(@PathParam("id") String id) {
Person person = personRepository.get( id );
if ( person == null ) {
return Response.status( Status.NOT_FOUND ).build();
}
else {
return Response.ok( mapper.toPersonDocument( person ) ).build();
}
}
@PUT
@Path("/{id}")
public Response updatePerson(PersonDocument request, @PathParam("id") String id) {
Person person = personRepository.get( id );
if ( person == null ) {
return Response.status( Status.NOT_FOUND ).build();
}
mapper.updatePerson( request, person );
return Response.ok().build();
}
@DELETE
@Path("/{id}")
public Response deletePerson(@PathParam("id") String id) {
personRepository.remove( new Person( id ) );
return Response.ok().build();
}
// Consumed by ResourceMapper
@RequestScoped
@javax.enterprise.inject.Produces
public UriInfo produceUriInfo() {
return uriInfo;
}
}