1 package se.citerus.dddsample.interfaces.booking.facade.internal.assembler;
2
3 import se.citerus.dddsample.domain.model.cargo.Itinerary;
4 import se.citerus.dddsample.domain.model.cargo.Leg;
5 import se.citerus.dddsample.domain.model.location.Location;
6 import se.citerus.dddsample.domain.model.location.LocationRepository;
7 import se.citerus.dddsample.domain.model.location.UnLocode;
8 import se.citerus.dddsample.domain.model.voyage.Voyage;
9 import se.citerus.dddsample.domain.model.voyage.VoyageNumber;
10 import se.citerus.dddsample.domain.model.voyage.VoyageRepository;
11 import se.citerus.dddsample.interfaces.booking.facade.dto.LegDTO;
12 import se.citerus.dddsample.interfaces.booking.facade.dto.RouteCandidateDTO;
13
14 import java.util.ArrayList;
15 import java.util.List;
16
17
18
19
20 public class ItineraryCandidateDTOAssembler {
21
22
23
24
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
36
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.idString(), from.idString(), to.idString(), leg.loadTime(), leg.unloadTime());
43 }
44
45
46
47
48
49
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 }