peter_backlund 18 лет назад
Родитель
Сommit
40f8b79c55

+ 0
- 20
dddsample/src/main/java/se/citerus/dddsample/application/RoutingService.java Просмотреть файл

@@ -1,20 +0,0 @@
1
-package se.citerus.dddsample.application;
2
-
3
-import se.citerus.dddsample.domain.model.cargo.Itinerary;
4
-import se.citerus.dddsample.domain.model.cargo.RouteSpecification;
5
-
6
-import java.util.List;
7
-
8
-/**
9
- * Routing service.
10
- *
11
- */
12
-public interface RoutingService {
13
-
14
-  /**
15
-   * @param routeSpecification route specification
16
-   * @return A list of itineraries that satisfy the specification. May be an empty list if no route is found.
17
-   */
18
-  List<Itinerary> fetchRoutesForSpecification(RouteSpecification routeSpecification);
19
-
20
-}

+ 0
- 84
dddsample/src/main/java/se/citerus/dddsample/application/impl/RoutingServiceImpl.java Просмотреть файл

@@ -1,84 +0,0 @@
1
-package se.citerus.dddsample.application.impl;
2
-
3
-import org.springframework.transaction.annotation.Transactional;
4
-import se.citerus.dddsample.application.RoutingService;
5
-import se.citerus.dddsample.domain.model.cargo.Itinerary;
6
-import se.citerus.dddsample.domain.model.cargo.Leg;
7
-import se.citerus.dddsample.domain.model.cargo.RouteSpecification;
8
-import se.citerus.dddsample.domain.model.carrier.VoyageNumber;
9
-import se.citerus.dddsample.domain.model.carrier.VoyageRepository;
10
-import se.citerus.dddsample.domain.model.location.Location;
11
-import se.citerus.dddsample.domain.model.location.LocationRepository;
12
-import se.citerus.dddsample.domain.model.location.UnLocode;
13
-import se.citerus.routingteam.GraphTraversalService;
14
-import se.citerus.routingteam.TransitEdge;
15
-import se.citerus.routingteam.TransitPath;
16
-
17
-import java.util.ArrayList;
18
-import java.util.Date;
19
-import java.util.List;
20
-
21
-/**
22
- * Our end of the routing service. This is basically a data model
23
- * translation layer between our domain model and the API put forward
24
- * by the routing team, which operates in a different context from us.
25
- *
26
- */
27
-public class RoutingServiceImpl implements RoutingService {
28
-
29
-  private GraphTraversalService graphTraversalService;
30
-  private LocationRepository locationRepository;
31
-  private VoyageRepository voyageRepository;
32
-
33
-  @Transactional(readOnly = true)
34
-  public List<Itinerary> fetchRoutesForSpecification(RouteSpecification routeSpecification) {
35
-    final Location origin = routeSpecification.origin();
36
-    final Location destination = routeSpecification.destination();
37
-
38
-    final List<TransitPath> transitPaths = graphTraversalService.findShortestPath(
39
-      origin.unLocode().idString(),
40
-      destination.unLocode().idString()
41
-    );
42
-    
43
-    final List<Itinerary> itineraries = new ArrayList<Itinerary>();
44
-
45
-    for (TransitPath transitPath : transitPaths) {
46
-      final Itinerary itinerary = toItinerary(transitPath);
47
-      // Use the specification to safe-guard against invalid itineraries
48
-      if (routeSpecification.isSatisfiedBy(itinerary)) {
49
-        itineraries.add(itinerary);
50
-      }
51
-    }
52
-
53
-    return itineraries;
54
-  }
55
-
56
-  private Itinerary toItinerary(TransitPath transitPath) {
57
-    List<Leg> legs = new ArrayList(transitPath.getTransitEdges().size());
58
-    for (TransitEdge edge : transitPath.getTransitEdges()) {
59
-      legs.add(toLeg(edge));
60
-    }
61
-    return new Itinerary(legs);
62
-  }
63
-
64
-  private Leg toLeg(TransitEdge edge) {
65
-    return new Leg(
66
-      voyageRepository.find(new VoyageNumber(edge.getCarrierMovementId())),
67
-      locationRepository.find(new UnLocode(edge.getFromUnLocode())),
68
-      locationRepository.find(new UnLocode(edge.getToUnLocode())),
69
-      new Date(), new Date()  // TODO better dates
70
-    );
71
-  }
72
-
73
-  public void setGraphTraversalService(GraphTraversalService graphTraversalService) {
74
-    this.graphTraversalService = graphTraversalService;
75
-  }
76
-
77
-  public void setLocationRepository(LocationRepository locationRepository) {
78
-    this.locationRepository = locationRepository;
79
-  }
80
-
81
-  public void setVoyageRepository(VoyageRepository voyageRepository) {
82
-    this.voyageRepository = voyageRepository;
83
-  }
84
-}

+ 0
- 79
dddsample/src/test/java/se/citerus/dddsample/application/impl/ExternalRoutingServiceTest.java Просмотреть файл

@@ -1,79 +0,0 @@
1
-package se.citerus.dddsample.application.impl;
2
-
3
-import junit.framework.TestCase;
4
-import static org.easymock.EasyMock.*;
5
-import se.citerus.dddsample.domain.model.cargo.*;
6
-import se.citerus.dddsample.domain.model.carrier.SampleVoyages;
7
-import se.citerus.dddsample.domain.model.carrier.VoyageNumber;
8
-import se.citerus.dddsample.domain.model.carrier.VoyageRepository;
9
-import se.citerus.dddsample.domain.model.location.Location;
10
-import se.citerus.dddsample.domain.model.location.LocationRepository;
11
-import static se.citerus.dddsample.domain.model.location.SampleLocations.*;
12
-import se.citerus.dddsample.infrastructure.persistence.inmemory.LocationRepositoryInMem;
13
-import se.citerus.routingteam.GraphTraversalService;
14
-import se.citerus.routingteam.internal.GraphDAO;
15
-import se.citerus.routingteam.internal.GraphTraversalServiceImpl;
16
-
17
-import javax.sql.DataSource;
18
-import java.util.Arrays;
19
-import java.util.Date;
20
-import java.util.List;
21
-
22
-public class ExternalRoutingServiceTest extends TestCase {
23
-
24
-  private RoutingServiceImpl routingServiceImpl;
25
-  private VoyageRepository voyageRepository;
26
-
27
-  protected void setUp() throws Exception {
28
-    routingServiceImpl = new RoutingServiceImpl();
29
-    LocationRepository locationRepository = new LocationRepositoryInMem();
30
-    routingServiceImpl.setLocationRepository(locationRepository);
31
-
32
-    voyageRepository = createMock(VoyageRepository.class);
33
-    routingServiceImpl.setVoyageRepository(voyageRepository);
34
-
35
-    GraphTraversalService graphTraversalService = new GraphTraversalServiceImpl(new GraphDAO(createMock(DataSource.class)) {
36
-      public List<String> listLocations() {
37
-        return Arrays.asList(TOKYO.unLocode().idString(), STOCKHOLM.unLocode().idString(), GOTHENBURG.unLocode().idString());
38
-      }
39
-
40
-      public void storeCarrierMovementId(String cmId, String from, String to) {
41
-      }
42
-    });
43
-    routingServiceImpl.setGraphTraversalService(graphTraversalService);
44
-  }
45
-
46
-  public void testCalculatePossibleRoutes() {
47
-    TrackingId trackingId = new TrackingId("ABC");
48
-    Cargo cargo = new Cargo(trackingId, HONGKONG, HELSINKI);
49
-    RouteSpecification routeSpecification = new RouteSpecification(cargo.origin(), cargo.destination(), new Date());
50
-
51
-    expect(voyageRepository.find(isA(VoyageNumber.class))).andStubReturn(SampleVoyages.CM002);
52
-    
53
-    replay(voyageRepository);
54
-
55
-    List<Itinerary> candidates = routingServiceImpl.fetchRoutesForSpecification(routeSpecification);
56
-    assertNotNull(candidates);
57
-    
58
-    for (Itinerary itinerary : candidates) {
59
-      List<Leg> legs = itinerary.legs();
60
-      assertNotNull(legs);
61
-      assertFalse(legs.isEmpty());
62
-
63
-      // Cargo origin and start of first leg should match
64
-      assertEquals(cargo.origin(), legs.get(0).loadLocation());
65
-
66
-      // Cargo final destination and last leg stop should match
67
-      Location lastLegStop = legs.get(legs.size() - 1).unloadLocation();
68
-      assertEquals(cargo.destination(), lastLegStop);
69
-
70
-      for (int i = 0; i < legs.size() - 1; i++) {
71
-        // Assert that all legs are connected
72
-        assertEquals(legs.get(i).unloadLocation(), legs.get(i + 1).loadLocation());
73
-      }
74
-    }
75
-
76
-    verify(voyageRepository);
77
-  }
78
-
79
-}