BookingServiceFacadeImpl.java 4.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package se.citerus.dddsample.application.remoting;
  2. import se.citerus.dddsample.application.remoting.dto.CargoRoutingDTO;
  3. import se.citerus.dddsample.application.remoting.dto.ItineraryCandidateDTO;
  4. import se.citerus.dddsample.application.remoting.dto.LocationDTO;
  5. import se.citerus.dddsample.application.remoting.dto.assembler.CargoRoutingDTOAssembler;
  6. import se.citerus.dddsample.application.remoting.dto.assembler.ItineraryCandidateDTOAssembler;
  7. import se.citerus.dddsample.application.remoting.dto.assembler.LocationDTOAssembler;
  8. import se.citerus.dddsample.domain.model.cargo.Cargo;
  9. import se.citerus.dddsample.domain.model.cargo.CargoRepository;
  10. import se.citerus.dddsample.domain.model.cargo.Itinerary;
  11. import se.citerus.dddsample.domain.model.cargo.TrackingId;
  12. import se.citerus.dddsample.domain.model.carrier.CarrierMovementRepository;
  13. import se.citerus.dddsample.domain.model.location.Location;
  14. import se.citerus.dddsample.domain.model.location.LocationRepository;
  15. import se.citerus.dddsample.domain.model.location.UnLocode;
  16. import se.citerus.dddsample.domain.service.BookingService;
  17. import java.rmi.RemoteException;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. /**
  21. * This implementation has additional support from the infrastructure, for exposing as an RMI
  22. * service and for keeping the OR-mapper unit-of-work open during DTO assembly,
  23. * analogous to the view rendering for web interfaces.
  24. *
  25. * See context-remote.xml.
  26. */
  27. public class BookingServiceFacadeImpl implements BookingServiceFacade {
  28. private BookingService bookingService;
  29. private LocationRepository locationRepository;
  30. private CargoRepository cargoRepository;
  31. private CarrierMovementRepository carrierMovementRepository;
  32. public List<LocationDTO> listShippingLocations() {
  33. final List<Location> allLocations = locationRepository.findAll();
  34. final LocationDTOAssembler assembler = new LocationDTOAssembler();
  35. return assembler.toDTOList(allLocations);
  36. }
  37. public String registerNewCargo(String origin, String destination) {
  38. TrackingId trackingId = bookingService.bookNewCargo(new UnLocode(origin), new UnLocode(destination));
  39. return trackingId.idString();
  40. }
  41. public CargoRoutingDTO loadCargoForRouting(String trackingId) {
  42. final Cargo cargo = cargoRepository.find(new TrackingId(trackingId));
  43. final CargoRoutingDTOAssembler assembler = new CargoRoutingDTOAssembler();
  44. return assembler.toDTO(cargo);
  45. }
  46. public void assignCargoToRoute(String trackingId, ItineraryCandidateDTO itineraryCandidateDTO) {
  47. final Itinerary itinerary = new ItineraryCandidateDTOAssembler().fromDTO(itineraryCandidateDTO, carrierMovementRepository, locationRepository);
  48. bookingService.assignCargoToRoute(new TrackingId(trackingId), itinerary);
  49. }
  50. public List<CargoRoutingDTO> listAllCargos() {
  51. final List<Cargo> cargoList = cargoRepository.findAll();
  52. final List<CargoRoutingDTO> dtoList = new ArrayList<CargoRoutingDTO>(cargoList.size());
  53. final CargoRoutingDTOAssembler assembler = new CargoRoutingDTOAssembler();
  54. for (Cargo cargo : cargoList) {
  55. dtoList.add(assembler.toDTO(cargo));
  56. }
  57. return dtoList;
  58. }
  59. public List<ItineraryCandidateDTO> requestPossibleRoutesForCargo(String trackingId) throws RemoteException {
  60. final List<Itinerary> itineraries = bookingService.requestPossibleRoutesForCargo(new TrackingId(trackingId));
  61. final List<ItineraryCandidateDTO> itineraryCandidates = new ArrayList<ItineraryCandidateDTO>(itineraries.size());
  62. final ItineraryCandidateDTOAssembler dtoAssembler = new ItineraryCandidateDTOAssembler();
  63. for (Itinerary itinerary : itineraries) {
  64. itineraryCandidates.add(dtoAssembler.toDTO(itinerary));
  65. }
  66. return itineraryCandidates;
  67. }
  68. public void setBookingService(BookingService bookingService) {
  69. this.bookingService = bookingService;
  70. }
  71. public void setLocationRepository(LocationRepository locationRepository) {
  72. this.locationRepository = locationRepository;
  73. }
  74. public void setCargoRepository(CargoRepository cargoRepository) {
  75. this.cargoRepository = cargoRepository;
  76. }
  77. public void setCarrierMovementRepository(CarrierMovementRepository carrierMovementRepository) {
  78. this.carrierMovementRepository = carrierMovementRepository;
  79. }
  80. }