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
HandlingEvent now has a HandlingActivity field internally. HaAct is moved to shared package, as it's being used persistently by both Cargo and HandlingEvent.
Also improved a few toString() methods and added a CargoFactoryTest.
Eric - Removed origin from Cargo. Now RouteSpecification is the only place with origin. Changed hibernate mappings to remove Cargo origin. Removed test that looked for case when Cargo origin was different from RouteSpecification origin. This rule isn't quite right. The rule should be that the origin cannot change after there is an event.
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.
Better date handling in route assigment.
Added voyage to handling activity, where applicable.
Next expected activity is now visible in the tracking interface.
Now possible to change destination of a cargo.
Minor touchups of the web pages.
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)