PortableRoutingPlanFactory { static PortableRoutingPlan fromRoutingPlan(RoutingPlan routingPlan) { PortableDistance distance = PortableDistance.fromDistance(routingPlan.distance()); List<PortableVehicle> vehicles = portableVehicles(routingPlan.vehicles()); PortableLocation depot = routingPlan.depot().map(PortableLocation::fromLocation).orElse(null); List<PortableLocation> visits = portableVisits(routingPlan.visits()); List<PortableRoute> routes = routingPlan.routes().stream() .map(routeWithTrack -> new PortableRoute( PortableVehicle.fromVehicle(routeWithTrack.vehicle()), depot, portableVisits(routeWithTrack.visits()), portableTrack(routeWithTrack.track()))) .collect(toList()); return new PortableRoutingPlan(distance, vehicles, depot, visits, routes); } private  PortableRoutingPlanFactory();   }
@Test void portable_routing_plan_empty() { PortableRoutingPlan portablePlan = PortableRoutingPlanFactory.fromRoutingPlan(RoutingPlan.empty()); assertThat(portablePlan.getDistance()).isEqualTo(PortableDistance.fromDistance(Distance.ZERO)); assertThat(portablePlan.getVehicles()).isEmpty(); assertThat(portablePlan.getDepot()).isNull(); assertThat(portablePlan.getRoutes()).isEmpty(); }
@Test void portable_routing_plan_with_two_routes() { final Coordinates coordinates1 = Coordinates.valueOf(0.0, 0.1); final Coordinates coordinates2 = Coordinates.valueOf(2.0, -0.2); final Coordinates coordinates3 = Coordinates.valueOf(3.3, -3.3); final Coordinates checkpoint12 = Coordinates.valueOf(12, 12); final Coordinates checkpoint21 = Coordinates.valueOf(21, 21); final Coordinates checkpoint13 = Coordinates.valueOf(13, 13); final Coordinates checkpoint31 = Coordinates.valueOf(31, 31); List<Coordinates> segment12 = asList(coordinates1, checkpoint12, coordinates2); List<Coordinates> segment21 = asList(coordinates2, checkpoint21, coordinates1); List<Coordinates> segment13 = asList(coordinates1, checkpoint13, coordinates3); List<Coordinates> segment31 = asList(coordinates3, checkpoint31, coordinates1); final Location location1 = new Location(1, coordinates1); final Location location2 = new Location(2, coordinates2); final Location location3 = new Location(3, coordinates3); final Distance distance = Distance.ofMillis(5); final Vehicle vehicle1 = VehicleFactory.createVehicle(1, "Vehicle 1", 100); final Vehicle vehicle2 = VehicleFactory.createVehicle(2, "Vehicle 2", 200); RouteWithTrack route1 = new RouteWithTrack( new Route(vehicle1, location1, singletonList(location2)), asList(segment12, segment21)); RouteWithTrack route2 = new RouteWithTrack( new Route(vehicle2, location1, singletonList(location3)), asList(segment13, segment31)); RoutingPlan routingPlan = new RoutingPlan( distance, asList(vehicle1, vehicle2), location1, asList(location2, location3), asList(route1, route2)); PortableRoutingPlan portableRoutingPlan = PortableRoutingPlanFactory.fromRoutingPlan(routingPlan); assertThat(portableRoutingPlan.getDistance()).isEqualTo(PortableDistance.fromDistance(distance)); assertThat(portableRoutingPlan.getDepot()).isEqualTo(PortableLocation.fromLocation(location1)); assertThat(portableRoutingPlan.getVisits()).containsExactlyInAnyOrder( PortableLocation.fromLocation(location2), PortableLocation.fromLocation(location3)); assertThat(portableRoutingPlan.getRoutes()).hasSize(2); assertThat(portableRoutingPlan.getVehicles()).containsExactlyInAnyOrder( PortableVehicle.fromVehicle(vehicle1), PortableVehicle.fromVehicle(vehicle2)); PortableRoute portableRoute1 = portableRoutingPlan.getRoutes().get(0); assertThat(portableRoute1.getVehicle()).isEqualTo(PortableVehicle.fromVehicle(vehicle1)); assertThat(portableRoute1.getDepot()).isEqualTo(PortableLocation.fromLocation(location1)); assertThat(portableRoute1.getVisits()).containsExactly( PortableLocation.fromLocation(location2)); assertThat(portableRoute1.getTrack()).hasSize(2); assertThat(portableRoute1.getTrack().get(0)).containsExactly( PortableCoordinates.fromCoordinates(location1.coordinates()), PortableCoordinates.fromCoordinates(checkpoint12), PortableCoordinates.fromCoordinates(location2.coordinates())); assertThat(portableRoute1.getTrack().get(1)).containsExactly( PortableCoordinates.fromCoordinates(location2.coordinates()), PortableCoordinates.fromCoordinates(checkpoint21), PortableCoordinates.fromCoordinates(location1.coordinates())); PortableRoute portableRoute2 = portableRoutingPlan.getRoutes().get(1); assertThat(portableRoute2.getVehicle()).isEqualTo(PortableVehicle.fromVehicle(vehicle2)); assertThat(portableRoute2.getDepot()).isEqualTo(PortableLocation.fromLocation(location1)); assertThat(portableRoute2.getVisits()).containsExactly( PortableLocation.fromLocation(location3)); assertThat(portableRoute2.getTrack()).hasSize(2); assertThat(portableRoute2.getTrack().get(0)).containsExactly( PortableCoordinates.fromCoordinates(location1.coordinates()), PortableCoordinates.fromCoordinates(checkpoint13), PortableCoordinates.fromCoordinates(location3.coordinates())); assertThat(portableRoute2.getTrack().get(1)).containsExactly( PortableCoordinates.fromCoordinates(location3.coordinates()), PortableCoordinates.fromCoordinates(checkpoint31), PortableCoordinates.fromCoordinates(location1.coordinates())); }