ソースを参照

Added fromDTO to ItineraryCandidateDTOAssembler, using that in CargoServiceImpl.

peter_backlund 18 年 前
コミット
4be34e0f89

+ 15
- 14
dddsample/src/main/java/se/citerus/dddsample/service/CargoServiceImpl.java ファイルの表示

@@ -8,9 +8,12 @@ import se.citerus.dddsample.domain.*;
8 8
 import se.citerus.dddsample.repository.CargoRepository;
9 9
 import se.citerus.dddsample.repository.CarrierMovementRepository;
10 10
 import se.citerus.dddsample.repository.LocationRepository;
11
-import se.citerus.dddsample.service.dto.*;
11
+import se.citerus.dddsample.service.dto.CargoRoutingDTO;
12
+import se.citerus.dddsample.service.dto.CargoTrackingDTO;
13
+import se.citerus.dddsample.service.dto.ItineraryCandidateDTO;
12 14
 import se.citerus.dddsample.service.dto.assembler.CargoRoutingDTOAssembler;
13 15
 import se.citerus.dddsample.service.dto.assembler.CargoTrackingDTOAssembler;
16
+import se.citerus.dddsample.service.dto.assembler.ItineraryCandidateDTOAssembler;
14 17
 
15 18
 import java.util.ArrayList;
16 19
 import java.util.List;
@@ -110,29 +113,27 @@ public final class CargoServiceImpl implements CargoService {
110 113
   }
111 114
 
112 115
   @Transactional(readOnly = false)
113
-  public void assignItinerary(final TrackingId trackingId, final ItineraryCandidateDTO itinerary) {
116
+  public void assignItinerary(final TrackingId trackingId, final ItineraryCandidateDTO dto) {
114 117
     Validate.notNull(trackingId);
115
-    Validate.notNull(itinerary);
118
+    Validate.notNull(dto);
116 119
 
117 120
     final Cargo cargo = cargoRepository.find(trackingId);
118 121
     if (cargo == null) {
119 122
       throw new IllegalArgumentException("Can't assign itinerary to non-existing cargo " + trackingId);
120 123
     }
121 124
 
122
-    final List<Leg> legs = new ArrayList<Leg>(itinerary.getLegs().size());
123
-    for (LegDTO legDTO : itinerary.getLegs()) {
124
-      final CarrierMovementId carrierMovementId = new CarrierMovementId(legDTO.getCarrierMovementId());
125
-      final CarrierMovement carrierMovement = carrierMovementRepository.find(carrierMovementId);
126
-      final Location from = locationRepository.find(new UnLocode(legDTO.getFrom()));
127
-      final Location to = locationRepository.find(new UnLocode(legDTO.getTo()));
128
-      legs.add(new Leg(carrierMovement, from, to));
129
-    }
130
-    // TODO: delete orphaned itineraries.
131
-    // Can't cascade delete-orphan for many-to-one using mapping directives.
132
-    cargo.setItinerary(new Itinerary(legs));
125
+    final ItineraryCandidateDTOAssembler itineraryCandidateDTOAssembler = new ItineraryCandidateDTOAssembler();
126
+    final Itinerary newItinerary = itineraryCandidateDTOAssembler.fromDTO(dto, carrierMovementRepository, locationRepository);
127
+
128
+    /* TODO: delete orphaned itinerary
129
+    final Itinerary oldItinerary = cargo.itinerary();
130
+    cargoRepository.deleteItinerary(oldItinerary);
131
+    */
132
+    cargo.setItinerary(newItinerary);
133 133
     cargoRepository.save(cargo);
134 134
   }
135 135
 
136
+
136 137
   public void setCargoRepository(final CargoRepository cargoRepository) {
137 138
     this.cargoRepository = cargoRepository;
138 139
   }

+ 15
- 5
dddsample/src/main/java/se/citerus/dddsample/service/dto/assembler/ItineraryCandidateDTOAssembler.java ファイルの表示

@@ -1,9 +1,8 @@
1 1
 package se.citerus.dddsample.service.dto.assembler;
2 2
 
3
-import se.citerus.dddsample.domain.CarrierMovementId;
4
-import se.citerus.dddsample.domain.Itinerary;
5
-import se.citerus.dddsample.domain.Leg;
6
-import se.citerus.dddsample.domain.UnLocode;
3
+import se.citerus.dddsample.domain.*;
4
+import se.citerus.dddsample.repository.CarrierMovementRepository;
5
+import se.citerus.dddsample.repository.LocationRepository;
7 6
 import se.citerus.dddsample.service.dto.ItineraryCandidateDTO;
8 7
 import se.citerus.dddsample.service.dto.LegDTO;
9 8
 
@@ -14,7 +13,7 @@ import java.util.List;
14 13
  * Assembler class for the ItineraryCandidateDTO.
15 14
  */
16 15
 public class ItineraryCandidateDTOAssembler {
17
-
16
+  
18 17
   public ItineraryCandidateDTO toDTO(final Itinerary itinerary) {
19 18
     final List<LegDTO> legDTOs = new ArrayList<LegDTO>(itinerary.legs().size());
20 19
     for (Leg leg : itinerary.legs()) {
@@ -30,4 +29,15 @@ public class ItineraryCandidateDTOAssembler {
30 29
     return new LegDTO(carrierMovementId.idString(), from.idString(), to.idString());
31 30
   }
32 31
 
32
+  public Itinerary fromDTO(ItineraryCandidateDTO itineraryCandidateDTO, CarrierMovementRepository carrierMovementRepository, LocationRepository locationRepository) {
33
+    final List<Leg> legs = new ArrayList<Leg>(itineraryCandidateDTO.getLegs().size());
34
+    for (LegDTO legDTO : itineraryCandidateDTO.getLegs()) {
35
+      final CarrierMovementId carrierMovementId = new CarrierMovementId(legDTO.getCarrierMovementId());
36
+      final CarrierMovement carrierMovement = carrierMovementRepository.find(carrierMovementId);
37
+      final Location from = locationRepository.find(new UnLocode(legDTO.getFrom()));
38
+      final Location to = locationRepository.find(new UnLocode(legDTO.getTo()));
39
+      legs.add(new Leg(carrierMovement, from, to));
40
+    }
41
+    return new Itinerary(legs);
42
+  }
33 43
 }

+ 51
- 0
dddsample/src/test/java/se/citerus/dddsample/service/dto/assembler/ItineraryCandidateDTOAssemblerTest.java ファイルの表示

@@ -1,11 +1,17 @@
1 1
 package se.citerus.dddsample.service.dto.assembler;
2 2
 
3 3
 import junit.framework.TestCase;
4
+import static org.easymock.EasyMock.*;
4 5
 import se.citerus.dddsample.domain.*;
5 6
 import static se.citerus.dddsample.domain.SampleLocations.*;
7
+import se.citerus.dddsample.repository.CarrierMovementRepository;
8
+import se.citerus.dddsample.repository.LocationRepository;
6 9
 import se.citerus.dddsample.service.dto.ItineraryCandidateDTO;
7 10
 import se.citerus.dddsample.service.dto.LegDTO;
8 11
 
12
+import java.util.ArrayList;
13
+import java.util.List;
14
+
9 15
 public class ItineraryCandidateDTOAssemblerTest extends TestCase {
10 16
 
11 17
   public void testToDTO() throws Exception {
@@ -35,4 +41,49 @@ public class ItineraryCandidateDTOAssemblerTest extends TestCase {
35 41
     assertEquals("NLRTM", legDTO.getFrom());
36 42
     assertEquals("AUMEL", legDTO.getTo());
37 43
   }
44
+
45
+  public void testFromDTO() throws Exception {
46
+    final ItineraryCandidateDTOAssembler assembler = new ItineraryCandidateDTOAssembler();
47
+
48
+    final List<LegDTO> legs = new ArrayList<LegDTO>();
49
+    legs.add(new LegDTO("CM1", "AAAAA", "BBBBB"));
50
+    legs.add(new LegDTO("CM2", "BBBBB", "CCCCC"));
51
+
52
+    final LocationRepository locationRepository = createMock(LocationRepository.class);
53
+    expect(locationRepository.find(new UnLocode("AAAAA"))).andReturn(HONGKONG);
54
+    expect(locationRepository.find(new UnLocode("BBBBB"))).andReturn(TOKYO).times(2);
55
+    expect(locationRepository.find(new UnLocode("CCCCC"))).andReturn(CHICAGO);
56
+
57
+    final CarrierMovementRepository carrierMovementRepository = createMock(CarrierMovementRepository.class);
58
+    final CarrierMovementId cmId1 = new CarrierMovementId("CM1");
59
+    final CarrierMovementId cmId2 = new CarrierMovementId("CM2");
60
+    final CarrierMovement cm1 = new CarrierMovement(cmId1, HONGKONG, TOKYO);
61
+    final CarrierMovement cm2 = new CarrierMovement(cmId2, TOKYO, CHICAGO);
62
+
63
+    expect(carrierMovementRepository.find(cmId1)).andReturn(cm1);
64
+    expect(carrierMovementRepository.find(cmId2)).andReturn(cm2);
65
+
66
+    replay(locationRepository, carrierMovementRepository);
67
+
68
+
69
+    // Tested call
70
+    final Itinerary itinerary = assembler.fromDTO(new ItineraryCandidateDTO(legs), carrierMovementRepository, locationRepository);
71
+
72
+    
73
+    assertNotNull(itinerary);
74
+    assertNotNull(itinerary.legs());
75
+    assertEquals(2, itinerary.legs().size());
76
+
77
+    final Leg leg1 = itinerary.legs().get(0);
78
+    assertNotNull(leg1);
79
+    assertEquals(HONGKONG, leg1.from());
80
+    assertEquals(TOKYO, leg1.to());
81
+    assertEquals(cm1, leg1.carrierMovement());
82
+
83
+    final Leg leg2 = itinerary.legs().get(1);
84
+    assertNotNull(leg2);
85
+    assertEquals(TOKYO, leg2.from());
86
+    assertEquals(CHICAGO, leg2.to());
87
+    assertEquals(cm2, leg2.carrierMovement());
88
+  }
38 89
 }