package net.java.cargotracker.application;
import java.util.Date;
import java.util.List;
import net.java.cargotracker.domain.model.cargo.Itinerary;
import net.java.cargotracker.domain.model.cargo.TrackingId;
import net.java.cargotracker.domain.model.location.UnLocode;
/**
* Cargo booking service.
*/
public interface BookingService {
/**
* Registers a new cargo in the tracking system, not yet routed.
*/
TrackingId bookNewCargo(UnLocode origin, UnLocode destination, Date arrivalDeadline);
/**
* Requests a list of itineraries describing possible routes for this cargo.
*
* @param trackingId cargo tracking id
* @return A list of possible itineraries for this cargo
*/
List<Itinerary> requestPossibleRoutesForCargo(TrackingId trackingId);
void assignCargoToRoute(Itinerary itinerary, TrackingId trackingId);
void changeDestination(TrackingId trackingId, UnLocode unLocode);
}