package org.hibernate.ogm.hiking.rest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
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("/admin")
@Stateless
public class AdminResource {
@Inject
private HikeRepository hikeRepository;
@Inject
private TripRepository tripRepository;
@PersistenceContext(unitName="hike-PU-JTA")
private EntityManager hikeEm;
@PersistenceContext(unitName="business")
private EntityManager businessEm;
public AdminResource() {
}
@GET
@Path("/populate")
public void populate() throws Exception {
clearDatabase(businessEm);
clearHikeAndTrips(hikeEm);
Trip corsica = new Trip();
corsica.name = "Corsica from north to south";
corsica.price = 254.9;
corsica.organizer = new Person( "Emmanuel" );
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
corsica.startDate = dateFormat.parse( "2015-04-10" );
corsica.endDate = dateFormat.parse( "2015-04-17" );
hikeEm.persist( corsica );
Hike gr20North = new Hike("Calenzana", "Vizzavona");
gr20North.recommendedTrip = corsica;
gr20North.sections.add( new Section( "Calenzana", "Carozzu" ) );
gr20North.sections.add( new Section( "Carozzu", "Vizzavona" ) );
Hike gr20South = new Hike("Vizzavona", "Conza");
gr20South.recommendedTrip = corsica;
gr20South.sections.add( new Section( "Vizzavona", "Usciulu" ) );
gr20South.sections.add( new Section( "Usciulu", "Conza" ) );
hikeEm.persist( gr20North );
hikeEm.persist( gr20South );
Trip briceCanyon = new Trip();
briceCanyon.name = "Brice canyon";
briceCanyon.price = 254.9;
briceCanyon.organizer = new Person( "Emmanuel" );
briceCanyon.startDate = dateFormat.parse( "2015-06-13" );
briceCanyon.endDate = dateFormat.parse( "2015-06-20" );
hikeEm.persist( briceCanyon );
Hike fairyLandTrail = new Hike("Fairyland Point", "Fairyland Point");
fairyLandTrail.recommendedTrip = briceCanyon;
fairyLandTrail.sections.add( new Section( "Fairyland Point", "Boat Mesa" ) );
fairyLandTrail.sections.add( new Section( "Boat Mesa", "Tower Bridge" ) );
fairyLandTrail.sections.add( new Section( "Tower Bridge", "Fairyland Point" ) );
Hike riggsSpringTrail = new Hike("Rainbow Point", "Yovimpa Pass");
riggsSpringTrail.recommendedTrip = briceCanyon;
riggsSpringTrail.sections.add( new Section( "Yovimpa Pass", "The Promontory" ) );
riggsSpringTrail.sections.add( new Section( "The Promontory", "Yovimpa Pass" ) );
hikeEm.persist( fairyLandTrail );
hikeEm.persist( riggsSpringTrail );
Trip semiMarathon = new Trip();
semiMarathon.name = "Semi-Marathon Paris Versailles";
semiMarathon.startDate = dateFormat.parse( "2015-09-27" );
semiMarathon.endDate = dateFormat.parse( "2015-09-27" );
semiMarathon.organizer = new Person( "Association Paris Versailles" );
semiMarathon.price = 5;
hikeEm.persist( semiMarathon );
}
private void clearHikeAndTrips(EntityManager em) {
List<?> all = em.createQuery( "from Hike" ).getResultList();
for ( Hike object : (List<Hike>) all ) {
object.recommendedTrip = null;
em.remove( object );
}
all = em.createQuery( "from Trip" ).getResultList();
for ( Object object : all ) {
em.remove( object );
}
}
private void clearDatabase(EntityManager em) {
List<Object> all = em.createQuery( "from java.lang.Object" ).getResultList();
for ( Object object : all ) {
em.remove( object );
}
}
}