package net.java.cargotracker.application;
import java.util.List;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import net.java.cargotracker.domain.model.cargo.Cargo;
import net.java.cargotracker.domain.model.location.SampleLocations;
import net.java.cargotracker.domain.model.voyage.SampleVoyages;
/**
* Loads sample data for demo.
*/
@Singleton
@Startup
public class BookingServiceTestDataGenerator {
// TODO See if the logger can be injected.
private static final Logger logger = Logger
.getLogger(BookingServiceTestDataGenerator.class.getName());
@PersistenceContext
private EntityManager entityManager;
// @Inject
// private HandlingEventFactory handlingEventFactory;
// @Inject
// private HandlingEventRepository handlingEventRepository;
// @Inject
// private BookingService bookingService;
@PostConstruct
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void loadSampleData() {
logger.info("Loading sample data.");
unLoadAll(); // Fail-safe in case of application restart that does not
// trigger a JPA schema drop.
loadSampleLocations();
loadSampleVoyages();
// loadSampleCargos();
}
private void unLoadAll() {
logger.info("Unloading all existing data.");
// In order to remove handling events, must remove references in cargo.
// Dropping cargo first won't work since handling events have references
// to it.
// TODO See if there is a better way to do this.
List<Cargo> cargos = entityManager.createQuery("Select c from Cargo c",
Cargo.class).getResultList();
for (Cargo cargo : cargos) {
cargo.getDelivery().setLastEvent(null);
entityManager.merge(cargo);
}
// Delete all entities
// TODO See why cascade delete is not working.
entityManager.createQuery("Delete from HandlingEvent").executeUpdate();
entityManager.createQuery("Delete from Leg").executeUpdate();
entityManager.createQuery("Delete from Cargo").executeUpdate();
entityManager.createQuery("Delete from CarrierMovement")
.executeUpdate();
entityManager.createQuery("Delete from Voyage").executeUpdate();
entityManager.createQuery("Delete from Location").executeUpdate();
}
private void loadSampleLocations() {
logger.info("Loading sample locations.");
entityManager.persist(SampleLocations.HONGKONG);
entityManager.persist(SampleLocations.MELBOURNE);
entityManager.persist(SampleLocations.STOCKHOLM);
entityManager.persist(SampleLocations.HELSINKI);
entityManager.persist(SampleLocations.CHICAGO);
entityManager.persist(SampleLocations.TOKYO);
entityManager.persist(SampleLocations.HAMBURG);
entityManager.persist(SampleLocations.SHANGHAI);
entityManager.persist(SampleLocations.ROTTERDAM);
entityManager.persist(SampleLocations.GOTHENBURG);
entityManager.persist(SampleLocations.HANGZOU);
entityManager.persist(SampleLocations.NEWYORK);
entityManager.persist(SampleLocations.DALLAS);
}
private void loadSampleVoyages() {
logger.info("Loading sample voyages.");
entityManager.persist(SampleVoyages.HONGKONG_TO_NEW_YORK);
entityManager.persist(SampleVoyages.NEW_YORK_TO_DALLAS);
entityManager.persist(SampleVoyages.DALLAS_TO_HELSINKI);
entityManager.persist(SampleVoyages.HELSINKI_TO_HONGKONG);
entityManager.persist(SampleVoyages.DALLAS_TO_HELSINKI_ALT);
}
// private void loadSampleCargos() {
// logger.info("Loading sample cargo data.");
//
// // Cargo ABC123
// TrackingId trackingId1 = new TrackingId("ABC123");
//
// RouteSpecification routeSpecification1 = new RouteSpecification(
// SampleLocations.HONGKONG, SampleLocations.HELSINKI,
// DateUtil.toDate("2009-03-15"));
// Cargo abc123 = new Cargo(trackingId1, routeSpecification1);
//
// Itinerary itinerary1 = new Itinerary(Arrays.asList(
// new Leg(SampleVoyages.HONGKONG_TO_NEW_YORK,
// SampleLocations.HONGKONG, SampleLocations.NEWYORK,
// DateUtil.toDate("2009-03-02"),
// DateUtil.toDate("2009-03-05")),
// new Leg(SampleVoyages.NEW_YORK_TO_DALLAS,
// SampleLocations.NEWYORK,
// SampleLocations.DALLAS,
// DateUtil.toDate("2009-03-06"),
// DateUtil.toDate("2009-03-08")),
// new Leg(SampleVoyages.DALLAS_TO_HELSINKI,
// SampleLocations.DALLAS,
// SampleLocations.HELSINKI,
// DateUtil.toDate("2009-03-09"),
// DateUtil.toDate("2009-03-12"))));
// abc123.assignToRoute(itinerary1);
//
// entityManager.persist(abc123);
//
// try {
// HandlingEvent event1 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2009-03-01"), trackingId1, null,
// SampleLocations.HONGKONG.getUnLocode(),
// HandlingEvent.Type.RECEIVE);
// entityManager.persist(event1);
//
// HandlingEvent event2 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2009-03-02"), trackingId1,
// SampleVoyages.HONGKONG_TO_NEW_YORK.getVoyageNumber(),
// SampleLocations.HONGKONG.getUnLocode(),
// HandlingEvent.Type.LOAD);
// entityManager.persist(event2);
//
// HandlingEvent event3 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2009-03-05"), trackingId1,
// SampleVoyages.HONGKONG_TO_NEW_YORK.getVoyageNumber(),
// SampleLocations.NEWYORK.getUnLocode(),
// HandlingEvent.Type.UNLOAD);
// entityManager.persist(event3);
// } catch (CannotCreateHandlingEventException e) {
// throw new RuntimeException(e);
// }
//
// HandlingHistory handlingHistory1
// = handlingEventRepository.lookupHandlingHistoryOfCargo(trackingId1);
// abc123.deriveDeliveryProgress(handlingHistory1);
//
// entityManager.persist(abc123);
//
// // Cargo JKL567
// TrackingId trackingId2 = new TrackingId("JKL567");
//
// RouteSpecification routeSpecification2 = new RouteSpecification(
// SampleLocations.HANGZOU, SampleLocations.STOCKHOLM,
// DateUtil.toDate("2009-03-18"));
// Cargo jkl567 = new Cargo(trackingId2, routeSpecification2);
//
// Itinerary itinerary2 = new Itinerary(Arrays.asList(
// new Leg(SampleVoyages.HONGKONG_TO_NEW_YORK,
// SampleLocations.HANGZOU, SampleLocations.NEWYORK,
// DateUtil.toDate("2009-03-03"),
// DateUtil.toDate("2009-03-05")),
// new Leg(SampleVoyages.NEW_YORK_TO_DALLAS,
// SampleLocations.NEWYORK, SampleLocations.DALLAS,
// DateUtil.toDate("2009-03-06"),
// DateUtil.toDate("2009-03-08")),
// new Leg(SampleVoyages.DALLAS_TO_HELSINKI, SampleLocations.DALLAS,
// SampleLocations.STOCKHOLM, DateUtil.toDate("2009-03-09"),
// DateUtil.toDate("2009-03-11"))));
// jkl567.assignToRoute(itinerary2);
//
// entityManager.persist(jkl567);
//
// try {
// HandlingEvent event1 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2009-03-01"), trackingId2, null,
// SampleLocations.HANGZOU.getUnLocode(),
// HandlingEvent.Type.RECEIVE);
// entityManager.persist(event1);
//
// HandlingEvent event2 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2009-03-03"), trackingId2,
// SampleVoyages.HONGKONG_TO_NEW_YORK.getVoyageNumber(),
// SampleLocations.HANGZOU.getUnLocode(),
// HandlingEvent.Type.LOAD);
// entityManager.persist(event2);
//
// HandlingEvent event3 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2009-03-05"), trackingId2,
// SampleVoyages.HONGKONG_TO_NEW_YORK.getVoyageNumber(),
// SampleLocations.NEWYORK.getUnLocode(),
// HandlingEvent.Type.UNLOAD);
// entityManager.persist(event3);
//
// HandlingEvent event4 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2009-03-06"), trackingId2,
// SampleVoyages.HONGKONG_TO_NEW_YORK.getVoyageNumber(),
// SampleLocations.NEWYORK.getUnLocode(),
// HandlingEvent.Type.LOAD);
// entityManager.persist(event4);
// } catch (CannotCreateHandlingEventException e) {
// throw new RuntimeException(e);
// }
//
// HandlingHistory handlingHistory2
// = handlingEventRepository.lookupHandlingHistoryOfCargo(trackingId2);
// jkl567.deriveDeliveryProgress(handlingHistory2);
//
// entityManager.persist(jkl567);
//
// //Cargo definition DEF789. Added to display information on the dashboard
// TrackingId trackingId3 = new TrackingId("DEF789");
//
// RouteSpecification routeSpecification3 = new RouteSpecification(
// SampleLocations.HONGKONG, SampleLocations.MELBOURNE,
// DateUtil.toDate("2013-12-28"));
//
// Cargo def789 = new Cargo(trackingId3, routeSpecification3);
// entityManager.persist(def789);
//
// //Cargo definition MNO456
// TrackingId trackingId4 = new TrackingId("MNO456");
// RouteSpecification routeSpecification4 = new RouteSpecification(
// SampleLocations.NEWYORK, SampleLocations.DALLAS,
// DateUtil.toDate("2008-10-27"));
//
// Cargo mno456 = new Cargo(trackingId4, routeSpecification4);
//
// Itinerary itinerary4 = new Itinerary(
// Arrays.asList(
// new Leg(SampleVoyages.NEW_YORK_TO_DALLAS,
// SampleLocations.NEWYORK,
// SampleLocations.DALLAS,
// DateUtil.toDate("2008-10-24"),
// DateUtil.toDate("2008-10-25"))
// ));
//
// mno456.assignToRoute(itinerary4);
// entityManager.persist(mno456);
//
// try {
// HandlingEvent event1 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2008-10-18"), trackingId4,
// null, SampleLocations.NEWYORK.getUnLocode(), HandlingEvent.Type.RECEIVE);
//
// entityManager.persist(event1);
//
// HandlingEvent event2 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2008-10-24"), trackingId4,
// SampleVoyages.NEW_YORK_TO_DALLAS.getVoyageNumber(),
// SampleLocations.NEWYORK.getUnLocode(), HandlingEvent.Type.LOAD);
//
// entityManager.persist(event2);
//
// HandlingEvent event3 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2008-10-25"), trackingId4,
// SampleVoyages.NEW_YORK_TO_DALLAS.getVoyageNumber(),
// SampleLocations.DALLAS.getUnLocode(), HandlingEvent.Type.UNLOAD);
//
// entityManager.persist(event3);
//
// HandlingEvent event4 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2008-10-26"), trackingId4,
// null, SampleLocations.DALLAS.getUnLocode(), HandlingEvent.Type.CUSTOMS);
//
// entityManager.persist(event4);
//
// HandlingEvent event5 = handlingEventFactory.createHandlingEvent(
// new Date(), DateUtil.toDate("2008-10-27"), trackingId4,
// null, SampleLocations.DALLAS.getUnLocode(), HandlingEvent.Type.CLAIM);
//
// entityManager.persist(event5);
//
// HandlingHistory handlingHistory3
// = handlingEventRepository.lookupHandlingHistoryOfCargo(trackingId4);
//
// mno456.deriveDeliveryProgress(handlingHistory3);
//
// entityManager.persist(mno456);
//
// } catch (CannotCreateHandlingEventException e) {
// throw new RuntimeException(e);
// }
//
// }
}