package net.java.cargotracker.interfaces.booking.facade.internal.assembler; import java.util.ArrayList; import java.util.List; import net.java.cargotracker.domain.model.cargo.Itinerary; import net.java.cargotracker.domain.model.cargo.Leg; import net.java.cargotracker.domain.model.location.Location; import net.java.cargotracker.domain.model.location.LocationRepository; import net.java.cargotracker.domain.model.location.UnLocode; import net.java.cargotracker.domain.model.voyage.Voyage; import net.java.cargotracker.domain.model.voyage.VoyageNumber; import net.java.cargotracker.domain.model.voyage.VoyageRepository; import net.java.cargotracker.interfaces.booking.facade.dto.RouteCandidate; public class ItineraryCandidateDtoAssembler { public RouteCandidate toDTO(Itinerary itinerary) { List<net.java.cargotracker.interfaces.booking.facade.dto.Leg> legDTOs = new ArrayList<>( itinerary.getLegs().size()); for (Leg leg : itinerary.getLegs()) { legDTOs.add(toLegDTO(leg)); } return new RouteCandidate(legDTOs); } protected net.java.cargotracker.interfaces.booking.facade.dto.Leg toLegDTO( Leg leg) { VoyageNumber voyageNumber = leg.getVoyage().getVoyageNumber(); UnLocode from = leg.getLoadLocation().getUnLocode(); UnLocode to = leg.getUnloadLocation().getUnLocode(); return new net.java.cargotracker.interfaces.booking.facade.dto.Leg( voyageNumber.getIdString(), from.getIdString(), to.getIdString(), leg.getLoadTime(), leg.getUnloadTime()); } public Itinerary fromDTO(RouteCandidate routeCandidateDTO, VoyageRepository voyageRepository, LocationRepository locationRepository) { List<Leg> legs = new ArrayList<>(routeCandidateDTO.getLegs().size()); for (net.java.cargotracker.interfaces.booking.facade.dto.Leg legDTO : routeCandidateDTO .getLegs()) { VoyageNumber voyageNumber = new VoyageNumber( legDTO.getVoyageNumber()); Voyage voyage = voyageRepository.find(voyageNumber); Location from = locationRepository.find(new UnLocode(legDTO .getFrom())); Location to = locationRepository.find(new UnLocode(legDTO.getTo())); legs.add(new Leg(voyage, from, to, legDTO.getLoadTime(), legDTO .getUnloadTime())); } return new Itinerary(legs); } }