CargoServiceImpl.java 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package se.citerus.dddsample.service;
  2. import org.springframework.transaction.annotation.Transactional;
  3. import se.citerus.dddsample.domain.Cargo;
  4. import se.citerus.dddsample.domain.CarrierMovement;
  5. import se.citerus.dddsample.domain.HandlingEvent;
  6. import se.citerus.dddsample.domain.TrackingId;
  7. import se.citerus.dddsample.repository.CargoRepository;
  8. import se.citerus.dddsample.service.dto.CargoWithHistoryDTO;
  9. import se.citerus.dddsample.service.dto.HandlingEventDTO;
  10. import java.util.List;
  11. public class CargoServiceImpl implements CargoService {
  12. private CargoRepository cargoRepository;
  13. @Transactional(readOnly = true)
  14. public CargoWithHistoryDTO find(String trackingId) {
  15. final TrackingId tid = new TrackingId(trackingId);
  16. final Cargo cargo = cargoRepository.find(tid);
  17. if (cargo == null) {
  18. return null;
  19. }
  20. HandlingEvent lastEvent = cargo.deliveryHistory().lastEvent();
  21. String currentLocation;
  22. if (lastEvent != null) {
  23. currentLocation = lastEvent.location().unlocode();
  24. } else {
  25. currentLocation = "";
  26. }
  27. final CargoWithHistoryDTO dto = new CargoWithHistoryDTO(
  28. cargo.trackingId().idString(),
  29. cargo.origin().unlocode(),
  30. cargo.finalDestination().unlocode(),
  31. currentLocation
  32. );
  33. final List<HandlingEvent> events = cargo.deliveryHistory().eventsOrderedByCompletionTime();
  34. for (HandlingEvent event : events) {
  35. CarrierMovement cm = event.carrierMovement();
  36. String carrierIdString = (cm == null) ? "" : cm.carrierId().idString();
  37. dto.addEvent(new HandlingEventDTO(
  38. event.location().unlocode(),
  39. event.type().toString(),
  40. carrierIdString,
  41. event.completionTime()
  42. ));
  43. }
  44. return dto;
  45. }
  46. public void setCargoRepository(CargoRepository cargoRepository) {
  47. this.cargoRepository = cargoRepository;
  48. }
  49. }