CargoAdminController.java 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package se.citerus.dddsample.ui;
  2. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
  3. import se.citerus.dddsample.application.remoting.BookingServiceFacade;
  4. import se.citerus.dddsample.application.remoting.dto.CargoRoutingDTO;
  5. import se.citerus.dddsample.application.remoting.dto.ItineraryCandidateDTO;
  6. import se.citerus.dddsample.application.remoting.dto.LegDTO;
  7. import se.citerus.dddsample.application.remoting.dto.LocationDTO;
  8. import se.citerus.dddsample.ui.command.RegistrationCommand;
  9. import se.citerus.dddsample.ui.command.RouteAssignmentCommand;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import java.util.ArrayList;
  13. import java.util.HashMap;
  14. import java.util.List;
  15. import java.util.Map;
  16. /**
  17. * Handles cargo booking and routing. Operates against a dedicated remoting service facade,
  18. * and could easily be rewritten as a thick Swing client. Completely separated from the domain layer,
  19. * unlike the tracking user interface.
  20. * <p/>
  21. * In order to successfully keep the domain model shielded from user interface considerations,
  22. * this approach is generally preferred to the one taken in the tracking controller. However,
  23. * there is never any one perfect solution for all situations, so we've chosen to demonstrate
  24. * two polarized ways to build user interfaces.
  25. *
  26. * @see CargoTrackingController
  27. */
  28. public final class CargoAdminController extends MultiActionController {
  29. private BookingServiceFacade bookingServiceFacade;
  30. public Map registrationForm(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
  31. final Map<String, Object> map = new HashMap<String, Object>();
  32. final List<LocationDTO> dtoList = bookingServiceFacade.listShippingLocations();
  33. final List<String> unLocodeStrings = new ArrayList<String>();
  34. for (LocationDTO dto : dtoList) {
  35. unLocodeStrings.add(dto.getUnLocode());
  36. }
  37. map.put("unlocodes", unLocodeStrings);
  38. return map;
  39. }
  40. public void register(final HttpServletRequest request, final HttpServletResponse response,
  41. final RegistrationCommand command) throws Exception {
  42. final String trackingId = bookingServiceFacade.registerNewCargo(
  43. command.getOriginUnlocode(), command.getDestinationUnlocode()
  44. );
  45. response.sendRedirect("show.html?trackingId=" + trackingId);
  46. }
  47. public Map list(HttpServletRequest request, HttpServletResponse response) throws Exception {
  48. final Map<String, Object> map = new HashMap<String, Object>();
  49. final List<CargoRoutingDTO> cargoList = bookingServiceFacade.listAllCargos();
  50. map.put("cargoList", cargoList);
  51. return map;
  52. }
  53. public Map show(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
  54. final Map<String, Object> map = new HashMap<String, Object>();
  55. final String trackingId = request.getParameter("trackingId");
  56. final CargoRoutingDTO dto = bookingServiceFacade.loadCargoForRouting(trackingId);
  57. map.put("cargo", dto);
  58. return map;
  59. }
  60. public Map selectItinerary(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
  61. final Map<String, Object> map = new HashMap<String, Object>();
  62. final String trackingId = request.getParameter("trackingId");
  63. final List<ItineraryCandidateDTO> itineraryCandidates = bookingServiceFacade.requestPossibleRoutesForCargo(trackingId);
  64. if (request.getParameter("spec") != null) {
  65. map.put("itineraryCandidates", itineraryCandidates);
  66. }
  67. final CargoRoutingDTO cargoDTO = bookingServiceFacade.loadCargoForRouting(trackingId);
  68. map.put("origin", cargoDTO.getOrigin());
  69. map.put("destination", cargoDTO.getFinalDestination());
  70. map.put("trackingId", trackingId);
  71. return map;
  72. }
  73. public void assignItinerary(final HttpServletRequest request, final HttpServletResponse response, RouteAssignmentCommand command) throws Exception {
  74. final List<LegDTO> legDTOs = new ArrayList<LegDTO>(command.getLegs().size());
  75. for (RouteAssignmentCommand.LegCommand leg : command.getLegs()) {
  76. legDTOs.add(new LegDTO(leg.getCarrierMovementId(), leg.getFromUnLocode(), leg.getToUnLocode()));
  77. }
  78. final ItineraryCandidateDTO selectedItinerary = new ItineraryCandidateDTO(legDTOs);
  79. bookingServiceFacade.assignCargoToRoute(command.getTrackingId(), selectedItinerary);
  80. response.sendRedirect("list.html");
  81. }
  82. public void setBookingServiceFacade(BookingServiceFacade bookingServiceFacade) {
  83. this.bookingServiceFacade = bookingServiceFacade;
  84. }
  85. }