Need to specify time zone for tests to avoid tz dependent tests. Using server JVM's tz is probably not reasonable for the actual view either, but we'll leave that as is for now.
Using "notifyOf..." naming convention in ApplicationEvents.
HandlingEvents now have a unique sequence number, and CargoUpdater looks events based on that to update the cargo in question.
First version of pessimistic locking of cargo during rerouting.
Cargo is now a facade for aggregate-internal classes Delivery and Projections.
Delivery calculates current voyage, last known location and transport status on the fly.
Introduced a tracking id generator domain service for getting next tracking id, instead of doing it in the cargo repository.
Extracted a Projections value object in the Cargo aggregate, which handles predictions about the future of the cargo (next expected activity, ETA).
Migrating to a much cleaner way to propagate handling updates to the cargo aggregate: Cargo.handled(HandlingActivity).
Moved some logic into *Status enums, making them richer.
Improvements to a number of toString()s
Eric- Changed behavior of Empty Itinerary to expect nothing. No event is appropriate for a Cargo with an empty itinerary, rather than any event being acceptable. Added tests for this into ItineraryTest. There was another test that depended on this behavior simply as a way to not have to populate the Itinerary the setup. That one is now a TODO.
Eric - Fixed bug in CargoTrackingViewAdapterTest.java, which worked only for Central Europe Time.
Changed TrackingViewAdapter to show time in the time zone of the location of the event.
To do this, we added a TimeZone to the Location, which is passed into the constructor.
Added assertions to HandlingHistory that ensures that it refers to a unique cargo, and that a Cargo can't derive its delivery progress from a handling history of another cargo. There are also two descriptive static factory methods for the different possibilities of creating a HandlingHistory.
HandlingEventRepository now looks up handling events from Cargo instead of TrackingId.
Fixed a problem with Hibernate lazy proxies not being initialised when reading a field.
Slight method name changes (deriveStatusFromHandling => deriveDeliveryProgress).
Fixed cloning of Date in a few places.
Explicitly roll back transaction if handling event registration fails.
Using single-parameter validation + message in more places (instead of arrays)
HandlingEventService.registerHandlingEvent() signature takes value objects instead of HandlingEventRegistrationAttempt, decoupling it from message queues.
Creating sample data using domain objects and storing with Hibernate, for simplicity.
Estimated time of arrival is now a property of the Cargo aggregate.
Tracking web interface has new look for 1.1.
Admin interface shows more time related information.
Serverside now handles change of destination (no UI yet though)
Moved web interfaces, web service and RMI remoting facade to iface package (temporarily renamed due to refactoring problems in IntelliJ when a package is named as a reserved word)
Added RoutingStatus.
Renamed StatusCode to TransportStatus.
Voyage is persisted.
Implemented equals, hashCode for VoyageNumber.
Itinerary is now embedded into Cargo table, simplified relation Between Cargo and Itinerary.
Persistent classes are not final anymore (unnecessary obstruction for Hibernate)
Introduced Voyage, Schedule and VoyageNumber. CarrierMovement is now a value object, CarrierMovementId is dropped.
Leg now has load/unload location and time, and a reference to a Voyage.
HandlingEvent references a Voyage instead of a CarrierMovement.
DeliveryHistory is renamed to Delivery.
(Yes, it's very broken right now, but it compiles)