Просмотр исходного кода

Compacted DTO assembly a little. Removed mutability from a DTO.

peter_backlund 17 лет назад
Родитель
Сommit
d68a3c224a
21 измененных файлов: 307 добавлений и 378 удалений
  1. 1
    5
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/BookingServiceFacade.java
  2. 5
    7
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/CargoRoutingDTO.java
  3. 1
    1
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/LegDTO.java
  4. 1
    1
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/LocationDTO.java
  5. 1
    1
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/RouteCandidateDTO.java
  6. 0
    0
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/package.html
  7. 1
    5
      dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/CargoAdminController.java
  8. 4
    3
      dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/RouteAssignmentCommand.java
  9. 1
    1
      dddsample/tracking/bookingui/src/main/resources/context-backend.xml
  10. 1
    1
      dddsample/tracking/bookingui/src/test/java/se/citerus/dddsample/tracking/bookingui/CargoAdminControllerTest.java
  11. 24
    37
      dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/BookingServiceFacadeImpl.java
  12. 111
    64
      dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/DTOAssembler.java
  13. 0
    35
      dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/CargoRoutingDTOAssembler.java
  14. 0
    22
      dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/LocationDTOAssembler.java
  15. 0
    7
      dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/package.html
  16. 0
    7
      dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/package.html
  17. 6
    6
      dddsample/tracking/core/src/main/resources/context-interfaces.xml
  18. 150
    0
      dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/DTOAssemblerTest.java
  19. 0
    58
      dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/CargoRoutingDTOAssemblerTest.java
  20. 0
    86
      dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/ItineraryCandidateDTOAssemblerTest.java
  21. 0
    31
      dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/LocationDTOAssemblerTest.java

dddsample/tracking/booking-api/src/main/java/se.citerus.dddsample.tracking.booking.api/BookingServiceFacade.java → dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/BookingServiceFacade.java Просмотреть файл

@@ -1,8 +1,4 @@
1
-package se.citerus.dddsample.tracking.booking.api;
2
-
3
-import se.citerus.dddsample.tracking.booking.api.dto.CargoRoutingDTO;
4
-import se.citerus.dddsample.tracking.booking.api.dto.LocationDTO;
5
-import se.citerus.dddsample.tracking.booking.api.dto.RouteCandidateDTO;
1
+package se.citerus.dddsample.temp;
6 2
 
7 3
 import java.rmi.Remote;
8 4
 import java.rmi.RemoteException;

dddsample/tracking/booking-api/src/main/java/se.citerus.dddsample.tracking.booking.api/dto/CargoRoutingDTO.java → dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/CargoRoutingDTO.java Просмотреть файл

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.tracking.booking.api.dto;
1
+package se.citerus.dddsample.temp;
2 2
 
3 3
 import java.io.Serializable;
4 4
 import java.util.ArrayList;
@@ -26,14 +26,16 @@ public final class CargoRoutingDTO implements Serializable {
26 26
    * @param finalDestination
27 27
    * @param arrivalDeadline
28 28
    * @param misrouted
29
+   * @param legs
29 30
    */
30
-  public CargoRoutingDTO(String trackingId, String origin, String finalDestination, Date arrivalDeadline, boolean misrouted) {
31
+  public CargoRoutingDTO(final String trackingId, final String origin, final String finalDestination,
32
+                         final Date arrivalDeadline, final boolean misrouted, final List<LegDTO> legs) {
31 33
     this.trackingId = trackingId;
32 34
     this.origin = origin;
33 35
     this.finalDestination = finalDestination;
34 36
     this.arrivalDeadline = arrivalDeadline;
35 37
     this.misrouted = misrouted;
36
-    this.legs = new ArrayList<LegDTO>();
38
+    this.legs = legs;
37 39
   }
38 40
 
39 41
   public String getTrackingId() {
@@ -48,10 +50,6 @@ public final class CargoRoutingDTO implements Serializable {
48 50
     return finalDestination;
49 51
   }
50 52
 
51
-  public void addLeg(String voyageNumber, String from, String to, Date loadTime, Date unloadTime) {
52
-    legs.add(new LegDTO(voyageNumber, from, to, loadTime, unloadTime));
53
-  }
54
-
55 53
   /**
56 54
    * @return An unmodifiable list DTOs.
57 55
    */

dddsample/tracking/booking-api/src/main/java/se.citerus.dddsample.tracking.booking.api/dto/LegDTO.java → dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/LegDTO.java Просмотреть файл

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.tracking.booking.api.dto;
1
+package se.citerus.dddsample.temp;
2 2
 
3 3
 import java.io.Serializable;
4 4
 import java.util.Date;

dddsample/tracking/booking-api/src/main/java/se.citerus.dddsample.tracking.booking.api/dto/LocationDTO.java → dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/LocationDTO.java Просмотреть файл

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.tracking.booking.api.dto;
1
+package se.citerus.dddsample.temp;
2 2
 
3 3
 import java.io.Serializable;
4 4
 

dddsample/tracking/booking-api/src/main/java/se.citerus.dddsample.tracking.booking.api/dto/RouteCandidateDTO.java → dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/RouteCandidateDTO.java Просмотреть файл

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.tracking.booking.api.dto;
1
+package se.citerus.dddsample.temp;
2 2
 
3 3
 import java.io.Serializable;
4 4
 import java.util.Collections;

dddsample/tracking/booking-api/src/main/java/se.citerus.dddsample.tracking.booking.api/dto/package.html → dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/temp/package.html Просмотреть файл


+ 1
- 5
dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/CargoAdminController.java Просмотреть файл

@@ -3,11 +3,7 @@ package se.citerus.dddsample.tracking.bookingui.web;
3 3
 import org.springframework.beans.propertyeditors.CustomDateEditor;
4 4
 import org.springframework.web.bind.ServletRequestDataBinder;
5 5
 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
6
-import se.citerus.dddsample.tracking.booking.api.BookingServiceFacade;
7
-import se.citerus.dddsample.tracking.booking.api.dto.CargoRoutingDTO;
8
-import se.citerus.dddsample.tracking.booking.api.dto.LegDTO;
9
-import se.citerus.dddsample.tracking.booking.api.dto.LocationDTO;
10
-import se.citerus.dddsample.tracking.booking.api.dto.RouteCandidateDTO;
6
+import se.citerus.dddsample.temp.*;
11 7
 
12 8
 import javax.servlet.http.HttpServletRequest;
13 9
 import javax.servlet.http.HttpServletResponse;

+ 4
- 3
dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/RouteAssignmentCommand.java Просмотреть файл

@@ -2,6 +2,7 @@ package se.citerus.dddsample.tracking.bookingui.web;
2 2
 
3 3
 import org.apache.commons.collections.Factory;
4 4
 import org.apache.commons.collections.ListUtils;
5
+import static org.apache.commons.collections.ListUtils.*;
5 6
 
6 7
 import java.util.ArrayList;
7 8
 import java.util.Date;
@@ -10,9 +11,9 @@ import java.util.List;
10 11
 public class RouteAssignmentCommand {
11 12
 
12 13
   private String trackingId;
13
-  private List<LegCommand> legs = ListUtils.lazyList(
14
-    new ArrayList(), LegCommand.factory()
15
-  );
14
+
15
+  @SuppressWarnings("unchecked")
16
+  private List<LegCommand> legs = lazyList(new ArrayList<LegCommand>(), LegCommand.factory());
16 17
 
17 18
   public String getTrackingId() {
18 19
     return trackingId;

+ 1
- 1
dddsample/tracking/bookingui/src/main/resources/context-backend.xml Просмотреть файл

@@ -5,7 +5,7 @@
5 5
 
6 6
   <bean id="remoteBookingService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
7 7
     <property name="serviceUrl" value="rmi://localhost:1099/BookingService"/>
8
-    <property name="serviceInterface" value="se.citerus.dddsample.tracking.booking.api.BookingServiceFacade"/>
8
+    <property name="serviceInterface" value="se.citerus.dddsample.temp.BookingServiceFacade"/>
9 9
   </bean>
10 10
 
11 11
 </beans>

+ 1
- 1
dddsample/tracking/bookingui/src/test/java/se/citerus/dddsample/tracking/bookingui/CargoAdminControllerTest.java Просмотреть файл

@@ -4,7 +4,7 @@ import junit.framework.TestCase;
4 4
 import org.easymock.EasyMock;
5 5
 import org.springframework.mock.web.MockHttpServletRequest;
6 6
 import org.springframework.mock.web.MockHttpServletResponse;
7
-import se.citerus.dddsample.tracking.booking.api.BookingServiceFacade;
7
+import se.citerus.dddsample.temp.BookingServiceFacade;
8 8
 import se.citerus.dddsample.tracking.bookingui.web.CargoAdminController;
9 9
 
10 10
 public class CargoAdminControllerTest extends TestCase {

dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/BookingServiceFacadeImpl.java → dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/BookingServiceFacadeImpl.java Просмотреть файл

@@ -1,9 +1,5 @@
1
-package se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal;
1
+package se.citerus.dddsample.tracking.core.interfaces.booking.facade;
2 2
 
3
-import se.citerus.dddsample.tracking.booking.api.BookingServiceFacade;
4
-import se.citerus.dddsample.tracking.booking.api.dto.CargoRoutingDTO;
5
-import se.citerus.dddsample.tracking.booking.api.dto.LocationDTO;
6
-import se.citerus.dddsample.tracking.booking.api.dto.RouteCandidateDTO;
7 3
 import se.citerus.dddsample.tracking.core.application.booking.BookingService;
8 4
 import se.citerus.dddsample.tracking.core.domain.model.cargo.Cargo;
9 5
 import se.citerus.dddsample.tracking.core.domain.model.cargo.CargoRepository;
@@ -13,14 +9,16 @@ import se.citerus.dddsample.tracking.core.domain.model.location.Location;
13 9
 import se.citerus.dddsample.tracking.core.domain.model.location.LocationRepository;
14 10
 import se.citerus.dddsample.tracking.core.domain.model.location.UnLocode;
15 11
 import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageRepository;
16
-import se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler.CargoRoutingDTOAssembler;
17
-import se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler.ItineraryCandidateDTOAssembler;
18
-import se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler.LocationDTOAssembler;
12
+import static se.citerus.dddsample.tracking.core.interfaces.booking.facade.DTOAssembler.*;
13
+import se.citerus.dddsample.temp.BookingServiceFacade;
14
+import se.citerus.dddsample.temp.LocationDTO;
15
+import se.citerus.dddsample.temp.CargoRoutingDTO;
16
+import se.citerus.dddsample.temp.RouteCandidateDTO;
19 17
 
20 18
 import java.rmi.RemoteException;
21
-import java.util.ArrayList;
22 19
 import java.util.Date;
23 20
 import java.util.List;
21
+import java.util.ArrayList;
24 22
 
25 23
 
26 24
 /**
@@ -30,16 +28,23 @@ import java.util.List;
30 28
  */
31 29
 public class BookingServiceFacadeImpl implements BookingServiceFacade {
32 30
 
33
-  private BookingService bookingService;
34
-  private LocationRepository locationRepository;
35
-  private CargoRepository cargoRepository;
36
-  private VoyageRepository voyageRepository;
31
+  private final BookingService bookingService;
32
+  private final LocationRepository locationRepository;
33
+  private final CargoRepository cargoRepository;
34
+  private final VoyageRepository voyageRepository;
35
+
36
+  public BookingServiceFacadeImpl(final BookingService bookingService, final LocationRepository locationRepository,
37
+                                  final CargoRepository cargoRepository, final VoyageRepository voyageRepository) {
38
+    this.bookingService = bookingService;
39
+    this.locationRepository = locationRepository;
40
+    this.cargoRepository = cargoRepository;
41
+    this.voyageRepository = voyageRepository;
42
+  }
37 43
 
38 44
   @Override
39 45
   public List<LocationDTO> listShippingLocations() {
40 46
     final List<Location> allLocations = locationRepository.findAll();
41
-    final LocationDTOAssembler assembler = new LocationDTOAssembler();
42
-    return assembler.toDTOList(allLocations);
47
+    return toDTOList(allLocations);
43 48
   }
44 49
 
45 50
   @Override
@@ -55,13 +60,12 @@ public class BookingServiceFacadeImpl implements BookingServiceFacade {
55 60
   @Override
56 61
   public CargoRoutingDTO loadCargoForRouting(String trackingId) {
57 62
     final Cargo cargo = bookingService.loadCargoForRouting(new TrackingId(trackingId));
58
-    final CargoRoutingDTOAssembler assembler = new CargoRoutingDTOAssembler();
59
-    return assembler.toDTO(cargo);
63
+    return toDTO(cargo);
60 64
   }
61 65
 
62 66
   @Override
63 67
   public void assignCargoToRoute(String trackingIdStr, RouteCandidateDTO routeCandidateDTO) {
64
-    final Itinerary itinerary = new ItineraryCandidateDTOAssembler().fromDTO(routeCandidateDTO, voyageRepository, locationRepository);
68
+    final Itinerary itinerary = fromDTO(routeCandidateDTO, voyageRepository, locationRepository);
65 69
     final TrackingId trackingId = new TrackingId(trackingIdStr);
66 70
 
67 71
     bookingService.assignCargoToRoute(itinerary, trackingId);
@@ -76,9 +80,8 @@ public class BookingServiceFacadeImpl implements BookingServiceFacade {
76 80
   public List<CargoRoutingDTO> listAllCargos() {
77 81
     final List<Cargo> cargoList = cargoRepository.findAll();
78 82
     final List<CargoRoutingDTO> dtoList = new ArrayList<CargoRoutingDTO>(cargoList.size());
79
-    final CargoRoutingDTOAssembler assembler = new CargoRoutingDTOAssembler();
80 83
     for (Cargo cargo : cargoList) {
81
-      dtoList.add(assembler.toDTO(cargo));
84
+      dtoList.add(toDTO(cargo));
82 85
     }
83 86
     return dtoList;
84 87
   }
@@ -88,27 +91,11 @@ public class BookingServiceFacadeImpl implements BookingServiceFacade {
88 91
     final List<Itinerary> itineraries = bookingService.requestPossibleRoutesForCargo(new TrackingId(trackingId));
89 92
 
90 93
     final List<RouteCandidateDTO> routeCandidates = new ArrayList<RouteCandidateDTO>(itineraries.size());
91
-    final ItineraryCandidateDTOAssembler dtoAssembler = new ItineraryCandidateDTOAssembler();
92 94
     for (Itinerary itinerary : itineraries) {
93
-      routeCandidates.add(dtoAssembler.toDTO(itinerary));
95
+      routeCandidates.add(toDTO(itinerary));
94 96
     }
95 97
 
96 98
     return routeCandidates;
97 99
   }
98 100
 
99
-  public void setBookingService(BookingService bookingService) {
100
-    this.bookingService = bookingService;
101
-  }
102
-
103
-  public void setLocationRepository(LocationRepository locationRepository) {
104
-    this.locationRepository = locationRepository;
105
-  }
106
-
107
-  public void setCargoRepository(CargoRepository cargoRepository) {
108
-    this.cargoRepository = cargoRepository;
109
-  }
110
-
111
-  public void setVoyageRepository(VoyageRepository voyageRepository) {
112
-    this.voyageRepository = voyageRepository;
113
-  }
114 101
 }

dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/ItineraryCandidateDTOAssembler.java → dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/DTOAssembler.java Просмотреть файл

@@ -1,64 +1,111 @@
1
-package se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler;
2
-
3
-import se.citerus.dddsample.tracking.booking.api.dto.LegDTO;
4
-import se.citerus.dddsample.tracking.booking.api.dto.RouteCandidateDTO;
5
-import se.citerus.dddsample.tracking.core.domain.model.cargo.Itinerary;
6
-import se.citerus.dddsample.tracking.core.domain.model.cargo.Leg;
7
-import se.citerus.dddsample.tracking.core.domain.model.location.Location;
8
-import se.citerus.dddsample.tracking.core.domain.model.location.LocationRepository;
9
-import se.citerus.dddsample.tracking.core.domain.model.location.UnLocode;
10
-import se.citerus.dddsample.tracking.core.domain.model.voyage.Voyage;
11
-import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageNumber;
12
-import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageRepository;
13
-
14
-import java.util.ArrayList;
15
-import java.util.List;
16
-
17
-/**
18
- * Assembler class for the ItineraryCandidateDTO.
19
- */
20
-public class ItineraryCandidateDTOAssembler {
21
-
22
-  /**
23
-   * @param itinerary itinerary
24
-   * @return A route candidate DTO
25
-   */
26
-  public RouteCandidateDTO toDTO(final Itinerary itinerary) {
27
-    final List<LegDTO> legDTOs = new ArrayList<LegDTO>(itinerary.legs().size());
28
-    for (Leg leg : itinerary.legs()) {
29
-      legDTOs.add(toLegDTO(leg));
30
-    }
31
-    return new RouteCandidateDTO(legDTOs);
32
-  }
33
-
34
-  /**
35
-   * @param leg leg
36
-   * @return A leg DTO
37
-   */
38
-  protected LegDTO toLegDTO(final Leg leg) {
39
-    final VoyageNumber voyageNumber = leg.voyage().voyageNumber();
40
-    final UnLocode from = leg.loadLocation().unLocode();
41
-    final UnLocode to = leg.unloadLocation().unLocode();
42
-    return new LegDTO(voyageNumber.stringValue(), from.stringValue(), to.stringValue(), leg.loadTime(), leg.unloadTime());
43
-  }
44
-
45
-  /**
46
-   * @param routeCandidateDTO  route candidate DTO
47
-   * @param voyageRepository   voyage repository
48
-   * @param locationRepository location repository
49
-   * @return An itinerary
50
-   */
51
-  public Itinerary fromDTO(final RouteCandidateDTO routeCandidateDTO,
52
-                           final VoyageRepository voyageRepository,
53
-                           final LocationRepository locationRepository) {
54
-    final List<Leg> legs = new ArrayList<Leg>(routeCandidateDTO.getLegs().size());
55
-    for (LegDTO legDTO : routeCandidateDTO.getLegs()) {
56
-      final VoyageNumber voyageNumber = new VoyageNumber(legDTO.getVoyageNumber());
57
-      final Voyage voyage = voyageRepository.find(voyageNumber);
58
-      final Location from = locationRepository.find(new UnLocode(legDTO.getFrom()));
59
-      final Location to = locationRepository.find(new UnLocode(legDTO.getTo()));
60
-      legs.add(new Leg(voyage, from, to, legDTO.getLoadTime(), legDTO.getUnloadTime()));
61
-    }
62
-    return new Itinerary(legs);
63
-  }
64
-}
1
+package se.citerus.dddsample.tracking.core.interfaces.booking.facade;
2
+
3
+import se.citerus.dddsample.tracking.core.domain.model.cargo.Cargo;
4
+import se.citerus.dddsample.tracking.core.domain.model.cargo.Leg;
5
+import se.citerus.dddsample.tracking.core.domain.model.cargo.RoutingStatus;
6
+import se.citerus.dddsample.tracking.core.domain.model.cargo.Itinerary;
7
+import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageNumber;
8
+import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageRepository;
9
+import se.citerus.dddsample.tracking.core.domain.model.voyage.Voyage;
10
+import se.citerus.dddsample.tracking.core.domain.model.location.UnLocode;
11
+import se.citerus.dddsample.tracking.core.domain.model.location.LocationRepository;
12
+import se.citerus.dddsample.tracking.core.domain.model.location.Location;
13
+import se.citerus.dddsample.temp.CargoRoutingDTO;
14
+import se.citerus.dddsample.temp.LegDTO;
15
+import se.citerus.dddsample.temp.RouteCandidateDTO;
16
+import se.citerus.dddsample.temp.LocationDTO;
17
+
18
+import java.util.List;
19
+import java.util.ArrayList;
20
+
21
+final class DTOAssembler {
22
+
23
+  /**
24
+   * @param cargo cargo
25
+   * @return A cargo routing DTO
26
+   */
27
+  static CargoRoutingDTO toDTO(final Cargo cargo) {
28
+    final List<Leg> legs = cargo.itinerary().legs();
29
+
30
+    final List<LegDTO> legDTOList = new ArrayList<LegDTO>(legs.size());
31
+    for (Leg leg : legs) {
32
+      final LegDTO legDTO = new LegDTO(
33
+        leg.voyage().voyageNumber().stringValue(),
34
+        leg.loadLocation().unLocode().stringValue(),
35
+        leg.unloadLocation().unLocode().stringValue(),
36
+        leg.loadTime(),
37
+        leg.unloadTime());
38
+      legDTOList.add(legDTO);
39
+    }
40
+
41
+    return new CargoRoutingDTO(
42
+      cargo.trackingId().stringValue(),
43
+      cargo.routeSpecification().origin().unLocode().stringValue(),
44
+      cargo.routeSpecification().destination().unLocode().stringValue(),
45
+      cargo.routeSpecification().arrivalDeadline(),
46
+      cargo.routingStatus().sameValueAs(RoutingStatus.MISROUTED),
47
+      legDTOList
48
+    );
49
+  }
50
+
51
+  /**
52
+   * @param itinerary itinerary
53
+   * @return A route candidate DTO
54
+   */
55
+  static RouteCandidateDTO toDTO(final Itinerary itinerary) {
56
+    final List<LegDTO> legDTOs = new ArrayList<LegDTO>(itinerary.legs().size());
57
+    for (Leg leg : itinerary.legs()) {
58
+      legDTOs.add(toLegDTO(leg));
59
+    }
60
+    return new RouteCandidateDTO(legDTOs);
61
+  }
62
+
63
+  /**
64
+   * @param leg leg
65
+   * @return A leg DTO
66
+   */
67
+  static LegDTO toLegDTO(final Leg leg) {
68
+    final VoyageNumber voyageNumber = leg.voyage().voyageNumber();
69
+    final UnLocode from = leg.loadLocation().unLocode();
70
+    final UnLocode to = leg.unloadLocation().unLocode();
71
+    return new LegDTO(voyageNumber.stringValue(), from.stringValue(), to.stringValue(), leg.loadTime(), leg.unloadTime());
72
+  }
73
+
74
+  /**
75
+   * @param routeCandidateDTO  route candidate DTO
76
+   * @param voyageRepository   voyage repository
77
+   * @param locationRepository location repository
78
+   * @return An itinerary
79
+   */
80
+  static Itinerary fromDTO(final RouteCandidateDTO routeCandidateDTO,
81
+                           final VoyageRepository voyageRepository,
82
+                           final LocationRepository locationRepository) {
83
+    final List<Leg> legs = new ArrayList<Leg>(routeCandidateDTO.getLegs().size());
84
+    for (LegDTO legDTO : routeCandidateDTO.getLegs()) {
85
+      final VoyageNumber voyageNumber = new VoyageNumber(legDTO.getVoyageNumber());
86
+      final Voyage voyage = voyageRepository.find(voyageNumber);
87
+      final Location from = locationRepository.find(new UnLocode(legDTO.getFrom()));
88
+      final Location to = locationRepository.find(new UnLocode(legDTO.getTo()));
89
+      legs.add(new Leg(voyage, from, to, legDTO.getLoadTime(), legDTO.getUnloadTime()));
90
+    }
91
+    return new Itinerary(legs);
92
+  }
93
+
94
+  static LocationDTO toDTO(final Location location) {
95
+    return new LocationDTO(location.unLocode().stringValue(), location.name());
96
+  }
97
+
98
+  static List<LocationDTO> toDTOList(final List<Location> allLocations) {
99
+    final List<LocationDTO> dtoList = new ArrayList<LocationDTO>(allLocations.size());
100
+    for (Location location : allLocations) {
101
+      dtoList.add(toDTO(location));
102
+    }
103
+
104
+    return dtoList;
105
+  }
106
+
107
+  private DTOAssembler() {
108
+    // Prevent instantiation
109
+  }
110
+
111
+}

+ 0
- 35
dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/CargoRoutingDTOAssembler.java Просмотреть файл

@@ -1,35 +0,0 @@
1
-package se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler;
2
-
3
-import se.citerus.dddsample.tracking.booking.api.dto.CargoRoutingDTO;
4
-import se.citerus.dddsample.tracking.core.domain.model.cargo.Cargo;
5
-import se.citerus.dddsample.tracking.core.domain.model.cargo.Leg;
6
-import se.citerus.dddsample.tracking.core.domain.model.cargo.RoutingStatus;
7
-
8
-/**
9
- * Assembler class for the CargoRoutingDTO.
10
- */
11
-public class CargoRoutingDTOAssembler {
12
-
13
-  /**
14
-   * @param cargo cargo
15
-   * @return A cargo routing DTO
16
-   */
17
-  public CargoRoutingDTO toDTO(final Cargo cargo) {
18
-    final CargoRoutingDTO dto = new CargoRoutingDTO(
19
-      cargo.trackingId().stringValue(),
20
-      cargo.routeSpecification().origin().unLocode().stringValue(),
21
-      cargo.routeSpecification().destination().unLocode().stringValue(),
22
-      cargo.routeSpecification().arrivalDeadline(),
23
-      cargo.routingStatus().sameValueAs(RoutingStatus.MISROUTED));
24
-    for (Leg leg : cargo.itinerary().legs()) {
25
-      dto.addLeg(
26
-        leg.voyage().voyageNumber().stringValue(),
27
-        leg.loadLocation().unLocode().stringValue(),
28
-        leg.unloadLocation().unLocode().stringValue(),
29
-        leg.loadTime(),
30
-        leg.unloadTime());
31
-    }
32
-    return dto;
33
-  }
34
-
35
-}

+ 0
- 22
dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/LocationDTOAssembler.java Просмотреть файл

@@ -1,22 +0,0 @@
1
-package se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler;
2
-
3
-import se.citerus.dddsample.tracking.booking.api.dto.LocationDTO;
4
-import se.citerus.dddsample.tracking.core.domain.model.location.Location;
5
-
6
-import java.util.ArrayList;
7
-import java.util.List;
8
-
9
-public class LocationDTOAssembler {
10
-
11
-  public LocationDTO toDTO(Location location) {
12
-    return new LocationDTO(location.unLocode().stringValue(), location.name());
13
-  }
14
-
15
-  public List<LocationDTO> toDTOList(List<Location> allLocations) {
16
-    final List<LocationDTO> dtoList = new ArrayList<LocationDTO>(allLocations.size());
17
-    for (Location location : allLocations) {
18
-      dtoList.add(toDTO(location));
19
-    }
20
-    return dtoList;
21
-  }
22
-}

+ 0
- 7
dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/package.html Просмотреть файл

@@ -1,7 +0,0 @@
1
-<html>
2
-<body>
3
-<p>
4
-	DTO assemblers.
5
-</p>
6
-</body>
7
-</html>

+ 0
- 7
dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/package.html Просмотреть файл

@@ -1,7 +0,0 @@
1
-<html>
2
-<body>
3
-<p>
4
-	Internal parts of the remote facade API.
5
-</p>
6
-</body>
7
-</html>

+ 6
- 6
dddsample/tracking/core/src/main/resources/context-interfaces.xml Просмотреть файл

@@ -64,15 +64,15 @@
64 64
     </property>
65 65
   </bean>
66 66
 
67
-  <bean id="bookingServiceFacadeTarget" class="se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.BookingServiceFacadeImpl">
68
-    <property name="bookingService" ref="bookingService"/>
69
-    <property name="cargoRepository" ref="cargoRepository"/>
70
-    <property name="locationRepository" ref="locationRepository"/>
71
-    <property name="voyageRepository" ref="voyageRepository"/>
67
+  <bean id="bookingServiceFacadeTarget" class="se.citerus.dddsample.tracking.core.interfaces.booking.facade.BookingServiceFacadeImpl">
68
+    <constructor-arg ref="bookingService"/>
69
+    <constructor-arg ref="locationRepository"/>
70
+    <constructor-arg ref="cargoRepository"/>
71
+    <constructor-arg ref="voyageRepository"/>
72 72
   </bean>
73 73
   
74 74
   <bean class="org.springframework.remoting.rmi.RmiServiceExporter">
75
-    <property name="serviceInterface" value="se.citerus.dddsample.tracking.booking.api.BookingServiceFacade"/>
75
+    <property name="serviceInterface" value="se.citerus.dddsample.temp.BookingServiceFacade"/>
76 76
     <property name="service" ref="bookingServiceFacade"/>
77 77
     <property name="serviceName" value="BookingService"/>
78 78
   </bean>

+ 150
- 0
dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/DTOAssemblerTest.java Просмотреть файл

@@ -0,0 +1,150 @@
1
+package se.citerus.dddsample.tracking.core.interfaces.booking.facade;
2
+
3
+import se.citerus.dddsample.tracking.core.domain.model.location.Location;
4
+import se.citerus.dddsample.tracking.core.domain.model.location.LocationRepository;
5
+import se.citerus.dddsample.tracking.core.domain.model.location.UnLocode;
6
+import static se.citerus.dddsample.tracking.core.domain.model.location.SampleLocations.*;
7
+import static se.citerus.dddsample.tracking.core.domain.model.location.SampleLocations.STOCKHOLM;
8
+import static se.citerus.dddsample.tracking.core.domain.model.location.SampleLocations.MELBOURNE;
9
+import se.citerus.dddsample.tracking.core.domain.model.cargo.*;
10
+import static se.citerus.dddsample.tracking.core.domain.model.voyage.SampleVoyages.CM001;
11
+import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageRepository;
12
+import se.citerus.dddsample.tracking.core.infrastructure.persistence.inmemory.VoyageRepositoryInMem;
13
+import se.citerus.dddsample.temp.LegDTO;
14
+import se.citerus.dddsample.temp.CargoRoutingDTO;
15
+import se.citerus.dddsample.temp.RouteCandidateDTO;
16
+import se.citerus.dddsample.temp.LocationDTO;
17
+
18
+import java.util.Date;
19
+import java.util.Arrays;
20
+import java.util.List;
21
+import java.util.ArrayList;
22
+
23
+import static org.junit.Assert.*;
24
+import org.junit.Test;
25
+import static org.easymock.EasyMock.createMock;
26
+import static org.easymock.EasyMock.expect;
27
+import static org.easymock.EasyMock.replay;
28
+
29
+public class DTOAssemblerTest {
30
+
31
+  @Test
32
+  public void toCargoRoutingDTO() throws Exception {
33
+    final Location origin = STOCKHOLM;
34
+    final Location destination = MELBOURNE;
35
+    final Cargo cargo = new Cargo(new TrackingId("XYZ"), new RouteSpecification(origin, destination, new Date()));
36
+
37
+    final Itinerary itinerary = new Itinerary(
38
+      Arrays.asList(
39
+        new Leg(CM001, origin, SHANGHAI, new Date(), new Date()),
40
+        new Leg(CM001, ROTTERDAM, destination, new Date(), new Date())
41
+      )
42
+    );
43
+
44
+    cargo.assignToRoute(itinerary);
45
+
46
+    final CargoRoutingDTO dto = DTOAssembler.toDTO(cargo);
47
+
48
+    assertEquals(2, dto.getLegs().size());
49
+
50
+    LegDTO legDTO = dto.getLegs().get(0);
51
+    assertEquals("CM001", legDTO.getVoyageNumber());
52
+    assertEquals("SESTO", legDTO.getFrom());
53
+    assertEquals("CNSHA", legDTO.getTo());
54
+
55
+    legDTO = dto.getLegs().get(1);
56
+    assertEquals("CM001", legDTO.getVoyageNumber());
57
+    assertEquals("NLRTM", legDTO.getFrom());
58
+    assertEquals("AUMEL", legDTO.getTo());
59
+  }
60
+
61
+  @Test
62
+  public void toCargoDTONoItinerary() throws Exception {
63
+    final Cargo cargo = new Cargo(new TrackingId("XYZ"), new RouteSpecification(STOCKHOLM, MELBOURNE, new Date()));
64
+    final CargoRoutingDTO dto = DTOAssembler.toDTO(cargo);
65
+
66
+    assertEquals("XYZ", dto.getTrackingId());
67
+    assertEquals("SESTO", dto.getOrigin());
68
+    assertEquals("AUMEL", dto.getFinalDestination());
69
+    assertTrue(dto.getLegs().isEmpty());
70
+  }
71
+
72
+  @Test
73
+  public void toRouteCandidateDTO() throws Exception {
74
+    final Location origin = STOCKHOLM;
75
+    final Location destination = MELBOURNE;
76
+
77
+    final Itinerary itinerary = new Itinerary(
78
+      Arrays.asList(
79
+        new Leg(CM001, origin, SHANGHAI, new Date(), new Date()),
80
+        new Leg(CM001, ROTTERDAM, destination, new Date(), new Date())
81
+      )
82
+    );
83
+
84
+    final RouteCandidateDTO dto = DTOAssembler.toDTO(itinerary);
85
+
86
+    assertEquals(2, dto.getLegs().size());
87
+    LegDTO legDTO = dto.getLegs().get(0);
88
+    assertEquals("CM001", legDTO.getVoyageNumber());
89
+    assertEquals("SESTO", legDTO.getFrom());
90
+    assertEquals("CNSHA", legDTO.getTo());
91
+
92
+    legDTO = dto.getLegs().get(1);
93
+    assertEquals("CM001", legDTO.getVoyageNumber());
94
+    assertEquals("NLRTM", legDTO.getFrom());
95
+    assertEquals("AUMEL", legDTO.getTo());
96
+  }
97
+
98
+  @Test
99
+  public void formRouteCandidateDTO() throws Exception {
100
+    final List<LegDTO> legs = new ArrayList<LegDTO>();
101
+    legs.add(new LegDTO("CM001", "AAAAA", "BBBBB", new Date(), new Date()));
102
+    legs.add(new LegDTO("CM001", "BBBBB", "CCCCC", new Date(), new Date()));
103
+
104
+    final LocationRepository locationRepository = createMock(LocationRepository.class);
105
+    expect(locationRepository.find(new UnLocode("AAAAA"))).andReturn(HONGKONG);
106
+    expect(locationRepository.find(new UnLocode("BBBBB"))).andReturn(TOKYO).times(2);
107
+    expect(locationRepository.find(new UnLocode("CCCCC"))).andReturn(CHICAGO);
108
+
109
+    final VoyageRepository voyageRepository = new VoyageRepositoryInMem();
110
+
111
+    replay(locationRepository);
112
+
113
+
114
+    // Tested call
115
+    final Itinerary itinerary = DTOAssembler.fromDTO(new RouteCandidateDTO(legs), voyageRepository, locationRepository);
116
+
117
+
118
+    assertNotNull(itinerary);
119
+    assertNotNull(itinerary.legs());
120
+    assertEquals(2, itinerary.legs().size());
121
+
122
+    final Leg leg1 = itinerary.legs().get(0);
123
+    assertNotNull(leg1);
124
+    assertEquals(HONGKONG, leg1.loadLocation());
125
+    assertEquals(TOKYO, leg1.unloadLocation());
126
+
127
+    final Leg leg2 = itinerary.legs().get(1);
128
+    assertNotNull(leg2);
129
+    assertEquals(TOKYO, leg2.loadLocation());
130
+    assertEquals(CHICAGO, leg2.unloadLocation());
131
+  }
132
+
133
+  @Test
134
+  public void toDTOList() {
135
+    final List<Location> locationList = Arrays.asList(STOCKHOLM, HAMBURG);
136
+
137
+    final List<LocationDTO> dtos = DTOAssembler.toDTOList(locationList);
138
+
139
+    assertEquals(2, dtos.size());
140
+
141
+    LocationDTO dto = dtos.get(0);
142
+    assertEquals("SESTO", dto.getUnLocode());
143
+    assertEquals("Stockholm", dto.getName());
144
+
145
+    dto = dtos.get(1);
146
+    assertEquals("DEHAM", dto.getUnLocode());
147
+    assertEquals("Hamburg", dto.getName());
148
+  }
149
+
150
+}

+ 0
- 58
dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/CargoRoutingDTOAssemblerTest.java Просмотреть файл

@@ -1,58 +0,0 @@
1
-package se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler;
2
-
3
-import junit.framework.TestCase;
4
-import se.citerus.dddsample.tracking.booking.api.dto.CargoRoutingDTO;
5
-import se.citerus.dddsample.tracking.booking.api.dto.LegDTO;
6
-import se.citerus.dddsample.tracking.core.domain.model.cargo.*;
7
-import se.citerus.dddsample.tracking.core.domain.model.location.Location;
8
-import static se.citerus.dddsample.tracking.core.domain.model.location.SampleLocations.*;
9
-import static se.citerus.dddsample.tracking.core.domain.model.voyage.SampleVoyages.CM001;
10
-
11
-import java.util.Arrays;
12
-import java.util.Date;
13
-
14
-public class CargoRoutingDTOAssemblerTest extends TestCase {
15
-
16
-  public void testToDTO() throws Exception {
17
-    final CargoRoutingDTOAssembler assembler = new CargoRoutingDTOAssembler();
18
-
19
-    final Location origin = STOCKHOLM;
20
-    final Location destination = MELBOURNE;
21
-    final Cargo cargo = new Cargo(new TrackingId("XYZ"), new RouteSpecification(origin, destination, new Date()));
22
-
23
-    final Itinerary itinerary = new Itinerary(
24
-      Arrays.asList(
25
-        new Leg(CM001, origin, SHANGHAI, new Date(), new Date()),
26
-        new Leg(CM001, ROTTERDAM, destination, new Date(), new Date())
27
-      )
28
-    );
29
-
30
-    cargo.assignToRoute(itinerary);
31
-
32
-    final CargoRoutingDTO dto = assembler.toDTO(cargo);
33
-
34
-    assertEquals(2, dto.getLegs().size());
35
-
36
-    LegDTO legDTO = dto.getLegs().get(0);
37
-    assertEquals("CM001", legDTO.getVoyageNumber());
38
-    assertEquals("SESTO", legDTO.getFrom());
39
-    assertEquals("CNSHA", legDTO.getTo());
40
-
41
-    legDTO = dto.getLegs().get(1);
42
-    assertEquals("CM001", legDTO.getVoyageNumber());
43
-    assertEquals("NLRTM", legDTO.getFrom());
44
-    assertEquals("AUMEL", legDTO.getTo());
45
-  }
46
-
47
-  public void testToDTO_NoItinerary() throws Exception {
48
-    final CargoRoutingDTOAssembler assembler = new CargoRoutingDTOAssembler();
49
-
50
-    final Cargo cargo = new Cargo(new TrackingId("XYZ"), new RouteSpecification(STOCKHOLM, MELBOURNE, new Date()));
51
-    final CargoRoutingDTO dto = assembler.toDTO(cargo);
52
-
53
-    assertEquals("XYZ", dto.getTrackingId());
54
-    assertEquals("SESTO", dto.getOrigin());
55
-    assertEquals("AUMEL", dto.getFinalDestination());
56
-    assertTrue(dto.getLegs().isEmpty());
57
-  }
58
-}

+ 0
- 86
dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/ItineraryCandidateDTOAssemblerTest.java Просмотреть файл

@@ -1,86 +0,0 @@
1
-package se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler;
2
-
3
-import junit.framework.TestCase;
4
-import static org.easymock.EasyMock.*;
5
-import se.citerus.dddsample.tracking.booking.api.dto.LegDTO;
6
-import se.citerus.dddsample.tracking.booking.api.dto.RouteCandidateDTO;
7
-import se.citerus.dddsample.tracking.core.domain.model.cargo.Itinerary;
8
-import se.citerus.dddsample.tracking.core.domain.model.cargo.Leg;
9
-import se.citerus.dddsample.tracking.core.domain.model.location.Location;
10
-import se.citerus.dddsample.tracking.core.domain.model.location.LocationRepository;
11
-import static se.citerus.dddsample.tracking.core.domain.model.location.SampleLocations.*;
12
-import se.citerus.dddsample.tracking.core.domain.model.location.UnLocode;
13
-import static se.citerus.dddsample.tracking.core.domain.model.voyage.SampleVoyages.CM001;
14
-import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageRepository;
15
-import se.citerus.dddsample.tracking.core.infrastructure.persistence.inmemory.VoyageRepositoryInMem;
16
-
17
-import java.util.ArrayList;
18
-import java.util.Arrays;
19
-import java.util.Date;
20
-import java.util.List;
21
-
22
-public class ItineraryCandidateDTOAssemblerTest extends TestCase {
23
-
24
-  public void testToDTO() throws Exception {
25
-    final ItineraryCandidateDTOAssembler assembler = new ItineraryCandidateDTOAssembler();
26
-
27
-    final Location origin = STOCKHOLM;
28
-    final Location destination = MELBOURNE;
29
-
30
-    final Itinerary itinerary = new Itinerary(
31
-      Arrays.asList(
32
-        new Leg(CM001, origin, SHANGHAI, new Date(), new Date()),
33
-        new Leg(CM001, ROTTERDAM, destination, new Date(), new Date())
34
-      )
35
-    );
36
-
37
-    final RouteCandidateDTO dto = assembler.toDTO(itinerary);
38
-
39
-    assertEquals(2, dto.getLegs().size());
40
-    LegDTO legDTO = dto.getLegs().get(0);
41
-    assertEquals("CM001", legDTO.getVoyageNumber());
42
-    assertEquals("SESTO", legDTO.getFrom());
43
-    assertEquals("CNSHA", legDTO.getTo());
44
-
45
-    legDTO = dto.getLegs().get(1);
46
-    assertEquals("CM001", legDTO.getVoyageNumber());
47
-    assertEquals("NLRTM", legDTO.getFrom());
48
-    assertEquals("AUMEL", legDTO.getTo());
49
-  }
50
-
51
-  public void testFromDTO() throws Exception {
52
-    final ItineraryCandidateDTOAssembler assembler = new ItineraryCandidateDTOAssembler();
53
-
54
-    final List<LegDTO> legs = new ArrayList<LegDTO>();
55
-    legs.add(new LegDTO("CM001", "AAAAA", "BBBBB", new Date(), new Date()));
56
-    legs.add(new LegDTO("CM001", "BBBBB", "CCCCC", new Date(), new Date()));
57
-
58
-    final LocationRepository locationRepository = createMock(LocationRepository.class);
59
-    expect(locationRepository.find(new UnLocode("AAAAA"))).andReturn(HONGKONG);
60
-    expect(locationRepository.find(new UnLocode("BBBBB"))).andReturn(TOKYO).times(2);
61
-    expect(locationRepository.find(new UnLocode("CCCCC"))).andReturn(CHICAGO);
62
-
63
-    final VoyageRepository voyageRepository = new VoyageRepositoryInMem();
64
-
65
-    replay(locationRepository);
66
-
67
-
68
-    // Tested call
69
-    final Itinerary itinerary = assembler.fromDTO(new RouteCandidateDTO(legs), voyageRepository, locationRepository);
70
-
71
-
72
-    assertNotNull(itinerary);
73
-    assertNotNull(itinerary.legs());
74
-    assertEquals(2, itinerary.legs().size());
75
-
76
-    final Leg leg1 = itinerary.legs().get(0);
77
-    assertNotNull(leg1);
78
-    assertEquals(HONGKONG, leg1.loadLocation());
79
-    assertEquals(TOKYO, leg1.unloadLocation());
80
-
81
-    final Leg leg2 = itinerary.legs().get(1);
82
-    assertNotNull(leg2);
83
-    assertEquals(TOKYO, leg2.loadLocation());
84
-    assertEquals(CHICAGO, leg2.unloadLocation());
85
-  }
86
-}

+ 0
- 31
dddsample/tracking/core/src/test/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/internal/assembler/LocationDTOAssemblerTest.java Просмотреть файл

@@ -1,31 +0,0 @@
1
-package se.citerus.dddsample.tracking.core.interfaces.booking.facade.internal.assembler;
2
-
3
-import junit.framework.TestCase;
4
-import se.citerus.dddsample.tracking.booking.api.dto.LocationDTO;
5
-import se.citerus.dddsample.tracking.core.domain.model.location.Location;
6
-import static se.citerus.dddsample.tracking.core.domain.model.location.SampleLocations.HAMBURG;
7
-import static se.citerus.dddsample.tracking.core.domain.model.location.SampleLocations.STOCKHOLM;
8
-
9
-import java.util.Arrays;
10
-import java.util.List;
11
-
12
-public class LocationDTOAssemblerTest extends TestCase {
13
-
14
-  public void testToDTOList() {
15
-    final LocationDTOAssembler assembler = new LocationDTOAssembler();
16
-    final List<Location> locationList = Arrays.asList(STOCKHOLM, HAMBURG);
17
-
18
-    final List<LocationDTO> dtos = assembler.toDTOList(locationList);
19
-
20
-    assertEquals(2, dtos.size());
21
-
22
-    LocationDTO dto = dtos.get(0);
23
-    assertEquals("SESTO", dto.getUnLocode());
24
-    assertEquals("Stockholm", dto.getName());
25
-
26
-    dto = dtos.get(1);
27
-    assertEquals("DEHAM", dto.getUnLocode());
28
-    assertEquals("Hamburg", dto.getName());
29
-  }
30
-
31
-}