package org.hibernate.ogm.hiking.rest; import java.util.ArrayList; import java.util.List; import javax.ejb.Stateless; 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.QueryParam; import org.hibernate.ogm.hiking.model.Hike; import org.hibernate.ogm.hiking.model.Person; import org.hibernate.ogm.hiking.model.Section; import org.hibernate.ogm.hiking.model.Trip; import org.hibernate.ogm.hiking.repository.HikeRepository; import org.hibernate.ogm.hiking.repository.TripRepository; import org.hibernate.ogm.hiking.rest.model.ExternalHike; @Path("/hikes") @Stateless public class HikeResource { @Inject private HikeRepository hikeRepository; @Inject private TripRepository tripRepository; public HikeResource() { } @GET @Path("/{id}") @Produces("application/json") public ExternalHike getHikeById(@PathParam("id") String hikeId) { return new ExternalHike( hikeRepository.getHikeById( hikeId ) ); } @GET @Path("/") @Produces("application/json") public List<ExternalHike> findHikes(@QueryParam("q") String searchTerm) { List<Hike> hikes = searchTerm != null ? hikeRepository.getHikesByFromOrTo(searchTerm) : hikeRepository.getAllHikes(); List<ExternalHike> descriptions = new ArrayList<>( hikes.size() ); for ( Hike hike : hikes ) { descriptions.add( new ExternalHike( hike ) ); } return descriptions; } @POST @Path("/") @Consumes("application/json") @Produces("application/json") public ExternalHike createHike(ExternalHike externalHike) { Hike hike = new Hike( externalHike.getFrom(), externalHike.getTo() ); Trip trip = null; if ( externalHike.getRecommendedTrip() != null ) { trip = tripRepository.getTripById( externalHike.getRecommendedTrip().getId() ); } for (Section section : externalHike.getSections() ) { hike.sections.add( section ); } hikeRepository.createHike( hike, trip ); return externalHike; } @PUT @Path("/{id}") @Consumes("application/json") @Produces("application/json") public ExternalHike updateHike(ExternalHike externalHike) { Hike hike = hikeRepository.getHikeById( externalHike.getId() ); hike.start = externalHike.getFrom(); hike.destination = externalHike.getTo(); if ( externalHike.getRecommendedTrip() != null ) { Trip recommendedTrip = tripRepository.getTripById( externalHike.getRecommendedTrip().getId() ); hike.recommendedTrip = recommendedTrip; recommendedTrip.availableHikes.add( hike ); } hike.sections.clear(); hike.sections.addAll( externalHike.getSections() ); return externalHike; } @DELETE @Path("/{id}") public void deleteHike(@PathParam("id") String id) { hikeRepository.deleteHike( id ); } }