Reworked the Cargo-Itinerary relationship OR-mapping to make it possible to move the full responsibility for purging orphaned itineraries to the implementation of the Cargo repository, making it a concern of the infrastructure layer.
Also added explicit names for foreign key constraints to mapping files.
Purged last DTO from domain service layer, in preparation for a combination of dedicated remote facade with DTO assembly (booking application) and working directly against the domain service layer (tracking web interface).
Split routing service into two parts: "our" part with model translation, and remote service part for graph calculations. Still a bit sketchy though.
More flesh on RouteSpecification, with some ideas around factory methods for specifications.
Renamed a few service methods to match ubiquotous language more closely.
Pushed DTO assembly outside of service layer and into MVC controllers, pending creation of dedicated remoting layer. Service layer now uses pure domain model classes.
CarrierMovementId implements ValueObject.
Final destination is now just "destination" everywhere.
Persistence annotations removed from domain model classes.
DeliveryHistory is now immutable.
Domain model implements the new pettern interfaces (entity/value object/domain event)
Orphaned old itinerary is now deleted when attaching a new itinerary to a Cargo.
Reorganized the context files so that the persistence layer can be selected as either Hibernate or in-memory, and the messagning layer either JMS-based or thread-based.
Added Checkstyle configuration file that checks the sun coding conventions.
Misc CheckStyle fixes.
Removed magic numbers from HashCodeBuilder.
Created a separate sub package for DTO assemblers.
Minor refactorings to increase readability.
Big slew of changes (too big) leading up to draft presentation:
Removed unneeded constructors in Cargo and UnLocode.
Fixed spelling error in StatusCode - "e before i except after c", or whatever that was :-)
Cascade Itinerary/Leg on Cargo persist.
Cargo registration and routing web administration interface.
Better randomization in RoutingServiceImpl.
Replaced more test locations with the SampleLocations instances.
Persisted Itinerary and Leg, with sample data and mapping.
Introduced Itinerary.EMPTY_ITINERARY to represent an emtpy itinerary (null object pattern)
Added capability to display expected/misdirected status of cargo and events to web tracking interface (jsp, DTOs, etc)
Location constructor now only has package-level visibility, and test code uses static location instances.
Rewrote UN Locode import to use straight JDBC access.
Added asynchronous event emission whenever a handling event is registered, so that interested parties can be notified if a cargo is misdirected (is unloaded, is late, has arrived, or whatever).
Two different implementations a available: JMS and a simple thread-based one.
Also, the cargo service track method now uses TrackingId in the signature, for consistency.
Entities have the method sameValueAs(otherEntity)
Value Objects have the method sameIdentiyAs(otherValueObject)
Events have the method sameEventAs(otherEvent)