ソースを参照

Moved web interfaces, web service and RMI remoting facade to iface package (temporarily renamed due to refactoring problems in IntelliJ when a package is named as a reserved word)

peter_backlund 18 年 前
コミット
60a12420e1
共有39 個のファイルを変更した392 個の追加94 個の削除を含む
  1. 1
    1
      dddsample/pom.xml
  2. 0
    33
      dddsample/src/main/java/se/citerus/dddsample/domain/service/DomainEventNotifier.java
  3. 30
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/BookingServiceFacade.java
  4. 7
    7
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/BookingServiceFacadeImpl.java
  5. 59
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/CargoRoutingDTO.java
  6. 29
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/ItineraryCandidateDTO.java
  7. 39
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/LegDTO.java
  8. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/LocationDTO.java
  9. 2
    2
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/CargoRoutingDTOAssembler.java
  10. 3
    3
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/ItineraryCandidateDTOAssembler.java
  11. 2
    2
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/LocationDTOAssembler.java
  12. 0
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/package.html
  13. 0
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/package.html
  14. 0
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/package.html
  15. 7
    9
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/CargoAdminController.java
  16. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/RegistrationCommand.java
  17. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/RouteAssignmentCommand.java
  18. 0
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/package.html
  19. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/handling/HandlingEventServiceEndpoint.java
  20. 2
    2
      dddsample/src/main/java/se/citerus/dddsample/iface/handling/HandlingEventServiceEndpointImpl.java
  21. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/handling/RegistrationFailure.java
  22. 0
    0
      dddsample/src/main/java/se/citerus/dddsample/iface/handling/package.html
  23. 2
    3
      dddsample/src/main/java/se/citerus/dddsample/iface/tracking/CargoTrackingController.java
  24. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/tracking/CargoTrackingViewAdapter.java
  25. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/tracking/TrackCommand.java
  26. 1
    1
      dddsample/src/main/java/se/citerus/dddsample/iface/tracking/TrackCommandValidator.java
  27. 0
    7
      dddsample/src/main/java/se/citerus/dddsample/ui/command/package.html
  28. 2
    2
      dddsample/src/main/resources/context-remote.xml
  29. 1
    1
      dddsample/src/main/resources/context-service.xml
  30. 3
    3
      dddsample/src/main/webapp/WEB-INF/dispatch-servlet.xml
  31. 3
    3
      dddsample/src/test/java/se/citerus/dddsample/application/service/dto/assembler/CargoRoutingDTOAssemblerTest.java
  32. 3
    3
      dddsample/src/test/java/se/citerus/dddsample/application/service/dto/assembler/ItineraryCandidateDTOAssemblerTest.java
  33. 2
    2
      dddsample/src/test/java/se/citerus/dddsample/application/service/dto/assembler/LocationDTOAssemblerTest.java
  34. 29
    0
      dddsample/src/test/java/se/citerus/dddsample/iface/booking/web/CargoAdminControllerTest.java
  35. 1
    1
      dddsample/src/test/java/se/citerus/dddsample/iface/booking/web/ItinerarySelectionCommandTest.java
  36. 1
    1
      dddsample/src/test/java/se/citerus/dddsample/iface/handling/HandlinEventServiceEndpointTest.java
  37. 92
    0
      dddsample/src/test/java/se/citerus/dddsample/iface/tracking/CargoTrackingControllerTest.java
  38. 63
    0
      dddsample/src/test/java/se/citerus/dddsample/iface/tracking/CargoTrackingViewAdapterTest.java
  39. 1
    1
      dddsample/src/test/java/se/citerus/dddsample/iface/tracking/TrackCommandValidatorTest.java

+ 1
- 1
dddsample/pom.xml ファイルの表示

@@ -128,7 +128,7 @@
128 128
           </execution>
129 129
         </executions>
130 130
         <configuration>
131
-          <sei>se.citerus.dddsample.application.ws.HandlingEventServiceEndpointImpl</sei>
131
+          <sei>se.citerus.dddsample.iface.handling.HandlingEventServiceEndpointImpl</sei>
132 132
           <genWsdl>true</genWsdl>
133 133
         </configuration>
134 134
       </plugin>

+ 0
- 33
dddsample/src/main/java/se/citerus/dddsample/domain/service/DomainEventNotifier.java ファイルの表示

@@ -1,33 +0,0 @@
1
-package se.citerus.dddsample.domain.service;
2
-
3
-import se.citerus.dddsample.domain.model.cargo.Cargo;
4
-import se.citerus.dddsample.domain.model.handling.CannotCreateHandlingEventException;
5
-import se.citerus.dddsample.domain.model.handling.HandlingEvent;
6
-
7
-/**
8
- * This interface provides a way to let other parts
9
- * of the system know about domain events that have occurred.
10
- * <p/>
11
- * All method signatures are expressed in the ubiquitous language.    
12
- * <p/>
13
- * It may be implemented synchronously or asynchronously, using
14
- * for example JMS.
15
- */
16
-public interface DomainEventNotifier {
17
-
18
-  /**
19
-   * A cargo has been handled.
20
-   *
21
-   * @param event handling event
22
-   */
23
-  void cargoWasHandled(HandlingEvent event);
24
-
25
-  void cargoWasMisdirected(Cargo cargo);
26
-
27
-  void cargoHasArrived(Cargo cargo);
28
-
29
-  void rejectHandlingEventRegistrationAttempt(CannotCreateHandlingEventException e);
30
-
31
-  //void scheduleWasChanged(Voyage voyage);
32
-
33
-}

+ 30
- 0
dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/BookingServiceFacade.java ファイルの表示

@@ -0,0 +1,30 @@
1
+package se.citerus.dddsample.iface.booking.facade;
2
+
3
+import se.citerus.dddsample.iface.booking.facade.dto.CargoRoutingDTO;
4
+import se.citerus.dddsample.iface.booking.facade.dto.ItineraryCandidateDTO;
5
+import se.citerus.dddsample.iface.booking.facade.dto.LocationDTO;
6
+
7
+import java.rmi.Remote;
8
+import java.rmi.RemoteException;
9
+import java.util.List;
10
+
11
+/**
12
+ * This facade shields the domain layer - model, services, repositories -
13
+ * from concerns about such things as the user interface and remoting.
14
+ * It is an application service.
15
+ */
16
+public interface BookingServiceFacade extends Remote {
17
+
18
+  String registerNewCargo(String origin, String destination) throws RemoteException;
19
+
20
+  CargoRoutingDTO loadCargoForRouting(String trackingId) throws RemoteException;
21
+
22
+  void assignCargoToRoute(String trackingId, ItineraryCandidateDTO itinerary) throws RemoteException;
23
+
24
+  List<ItineraryCandidateDTO> requestPossibleRoutesForCargo(String trackingId) throws RemoteException;
25
+
26
+  List<LocationDTO> listShippingLocations() throws RemoteException;
27
+
28
+  List<CargoRoutingDTO> listAllCargos() throws RemoteException;
29
+
30
+}

dddsample/src/main/java/se/citerus/dddsample/application/remoting/BookingServiceFacadeImpl.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/BookingServiceFacadeImpl.java ファイルの表示

@@ -1,14 +1,8 @@
1
-package se.citerus.dddsample.application.remoting;
1
+package se.citerus.dddsample.iface.booking.facade;
2 2
 
3 3
 import org.apache.log4j.Logger;
4 4
 import org.springframework.transaction.annotation.Transactional;
5 5
 import se.citerus.dddsample.application.BookingService;
6
-import se.citerus.dddsample.application.remoting.dto.CargoRoutingDTO;
7
-import se.citerus.dddsample.application.remoting.dto.ItineraryCandidateDTO;
8
-import se.citerus.dddsample.application.remoting.dto.LocationDTO;
9
-import se.citerus.dddsample.application.remoting.dto.assembler.CargoRoutingDTOAssembler;
10
-import se.citerus.dddsample.application.remoting.dto.assembler.ItineraryCandidateDTOAssembler;
11
-import se.citerus.dddsample.application.remoting.dto.assembler.LocationDTOAssembler;
12 6
 import se.citerus.dddsample.domain.model.cargo.Cargo;
13 7
 import se.citerus.dddsample.domain.model.cargo.CargoRepository;
14 8
 import se.citerus.dddsample.domain.model.cargo.Itinerary;
@@ -17,6 +11,12 @@ import se.citerus.dddsample.domain.model.carrier.VoyageRepository;
17 11
 import se.citerus.dddsample.domain.model.location.Location;
18 12
 import se.citerus.dddsample.domain.model.location.LocationRepository;
19 13
 import se.citerus.dddsample.domain.model.location.UnLocode;
14
+import se.citerus.dddsample.iface.booking.facade.dto.CargoRoutingDTO;
15
+import se.citerus.dddsample.iface.booking.facade.dto.ItineraryCandidateDTO;
16
+import se.citerus.dddsample.iface.booking.facade.dto.LocationDTO;
17
+import se.citerus.dddsample.iface.booking.facade.dto.assembler.CargoRoutingDTOAssembler;
18
+import se.citerus.dddsample.iface.booking.facade.dto.assembler.ItineraryCandidateDTOAssembler;
19
+import se.citerus.dddsample.iface.booking.facade.dto.assembler.LocationDTOAssembler;
20 20
 
21 21
 import java.rmi.RemoteException;
22 22
 import java.util.ArrayList;

+ 59
- 0
dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/CargoRoutingDTO.java ファイルの表示

@@ -0,0 +1,59 @@
1
+package se.citerus.dddsample.iface.booking.facade.dto;
2
+
3
+import java.io.Serializable;
4
+import java.util.ArrayList;
5
+import java.util.Collections;
6
+import java.util.List;
7
+
8
+/**
9
+ * DTO for registering and routing a cargo.
10
+ */
11
+public final class CargoRoutingDTO implements Serializable {
12
+
13
+  private final String trackingId;
14
+  private final String origin;
15
+  private final String finalDestination;
16
+  private final List<LegDTO> legs;
17
+
18
+  /**
19
+   * Constructor.
20
+   *
21
+   * @param trackingId
22
+   * @param origin
23
+   * @param finalDestination
24
+   */
25
+  public CargoRoutingDTO(final String trackingId, final String origin, final String finalDestination) {
26
+    this.trackingId = trackingId;
27
+    this.origin = origin;
28
+    this.finalDestination = finalDestination;
29
+    this.legs = new ArrayList<LegDTO>();
30
+  }
31
+
32
+  public String getTrackingId() {
33
+    return trackingId;
34
+  }
35
+
36
+  public String getOrigin() {
37
+    return origin;
38
+  }
39
+
40
+  public String getFinalDestination() {
41
+    return finalDestination;
42
+  }
43
+
44
+  public void addLeg(final String carrierMovementId, final String from, final String to) {
45
+    legs.add(new LegDTO(carrierMovementId, from, to));
46
+  }
47
+
48
+  /**
49
+   * @return An unmodifiable list DTOs.
50
+   */
51
+  public List<LegDTO> getLegs() {
52
+    return Collections.unmodifiableList(legs);
53
+  }
54
+
55
+  public boolean isRouted() {
56
+    return !legs.isEmpty();
57
+  }
58
+
59
+}

+ 29
- 0
dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/ItineraryCandidateDTO.java ファイルの表示

@@ -0,0 +1,29 @@
1
+package se.citerus.dddsample.iface.booking.facade.dto;
2
+
3
+import java.io.Serializable;
4
+import java.util.Collections;
5
+import java.util.List;
6
+
7
+/**
8
+ * DTO for presenting and selecting an itinerary from a collection of candidates.
9
+ */
10
+public final class ItineraryCandidateDTO implements Serializable {
11
+
12
+  private final List<LegDTO> legs;
13
+
14
+  /**
15
+   * Constructor.
16
+   *
17
+   * @param legs The legs for this itinerary.
18
+   */
19
+  public ItineraryCandidateDTO(final List<LegDTO> legs) {
20
+    this.legs = legs;
21
+  }
22
+
23
+  /**
24
+   * @return An unmodifiable list DTOs.
25
+   */
26
+  public List<LegDTO> getLegs() {
27
+    return Collections.unmodifiableList(legs);
28
+  }
29
+}

+ 39
- 0
dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/LegDTO.java ファイルの表示

@@ -0,0 +1,39 @@
1
+package se.citerus.dddsample.iface.booking.facade.dto;
2
+
3
+import java.io.Serializable;
4
+
5
+/**
6
+ * DTO for a leg in an itinerary.
7
+ */
8
+public final class LegDTO implements Serializable {
9
+
10
+  private final String voyageNumber;
11
+  private final String from;
12
+  private final String to;
13
+
14
+  /**
15
+   * Constructor.
16
+   *
17
+   * @param voyageNumber
18
+   * @param from
19
+   * @param to
20
+   */
21
+  public LegDTO(final String voyageNumber, final String from, final String to) {
22
+    this.voyageNumber = voyageNumber;
23
+    this.from = from;
24
+    this.to = to;
25
+  }
26
+
27
+  public String getVoyageNumber() {
28
+    return voyageNumber;
29
+  }
30
+
31
+  public String getFrom() {
32
+    return from;
33
+  }
34
+
35
+  public String getTo() {
36
+    return to;
37
+  }
38
+
39
+}

dddsample/src/main/java/se/citerus/dddsample/application/remoting/dto/LocationDTO.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/LocationDTO.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.application.remoting.dto;
1
+package se.citerus.dddsample.iface.booking.facade.dto;
2 2
 
3 3
 import java.io.Serializable;
4 4
 

dddsample/src/main/java/se/citerus/dddsample/application/remoting/dto/assembler/CargoRoutingDTOAssembler.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/CargoRoutingDTOAssembler.java ファイルの表示

@@ -1,8 +1,8 @@
1
-package se.citerus.dddsample.application.remoting.dto.assembler;
1
+package se.citerus.dddsample.iface.booking.facade.dto.assembler;
2 2
 
3
-import se.citerus.dddsample.application.remoting.dto.CargoRoutingDTO;
4 3
 import se.citerus.dddsample.domain.model.cargo.Cargo;
5 4
 import se.citerus.dddsample.domain.model.cargo.Leg;
5
+import se.citerus.dddsample.iface.booking.facade.dto.CargoRoutingDTO;
6 6
 
7 7
 /**
8 8
  * Assembler class for the CargoRoutingDTO.

dddsample/src/main/java/se/citerus/dddsample/application/remoting/dto/assembler/ItineraryCandidateDTOAssembler.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/ItineraryCandidateDTOAssembler.java ファイルの表示

@@ -1,7 +1,5 @@
1
-package se.citerus.dddsample.application.remoting.dto.assembler;
1
+package se.citerus.dddsample.iface.booking.facade.dto.assembler;
2 2
 
3
-import se.citerus.dddsample.application.remoting.dto.ItineraryCandidateDTO;
4
-import se.citerus.dddsample.application.remoting.dto.LegDTO;
5 3
 import se.citerus.dddsample.domain.model.cargo.Itinerary;
6 4
 import se.citerus.dddsample.domain.model.cargo.Leg;
7 5
 import se.citerus.dddsample.domain.model.carrier.Voyage;
@@ -10,6 +8,8 @@ import se.citerus.dddsample.domain.model.carrier.VoyageRepository;
10 8
 import se.citerus.dddsample.domain.model.location.Location;
11 9
 import se.citerus.dddsample.domain.model.location.LocationRepository;
12 10
 import se.citerus.dddsample.domain.model.location.UnLocode;
11
+import se.citerus.dddsample.iface.booking.facade.dto.ItineraryCandidateDTO;
12
+import se.citerus.dddsample.iface.booking.facade.dto.LegDTO;
13 13
 
14 14
 import java.util.ArrayList;
15 15
 import java.util.Date;

dddsample/src/main/java/se/citerus/dddsample/application/remoting/dto/assembler/LocationDTOAssembler.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/LocationDTOAssembler.java ファイルの表示

@@ -1,7 +1,7 @@
1
-package se.citerus.dddsample.application.remoting.dto.assembler;
1
+package se.citerus.dddsample.iface.booking.facade.dto.assembler;
2 2
 
3
-import se.citerus.dddsample.application.remoting.dto.LocationDTO;
4 3
 import se.citerus.dddsample.domain.model.location.Location;
4
+import se.citerus.dddsample.iface.booking.facade.dto.LocationDTO;
5 5
 
6 6
 import java.util.ArrayList;
7 7
 import java.util.List;

dddsample/src/main/java/se/citerus/dddsample/application/remoting/dto/assembler/package.html → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/assembler/package.html ファイルの表示


dddsample/src/main/java/se/citerus/dddsample/application/remoting/dto/package.html → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/dto/package.html ファイルの表示


dddsample/src/main/java/se/citerus/dddsample/application/remoting/package.html → dddsample/src/main/java/se/citerus/dddsample/iface/booking/facade/package.html ファイルの表示


dddsample/src/main/java/se/citerus/dddsample/ui/CargoAdminController.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/CargoAdminController.java ファイルの表示

@@ -1,13 +1,11 @@
1
-package se.citerus.dddsample.ui;
1
+package se.citerus.dddsample.iface.booking.web;
2 2
 
3 3
 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
4
-import se.citerus.dddsample.application.remoting.BookingServiceFacade;
5
-import se.citerus.dddsample.application.remoting.dto.CargoRoutingDTO;
6
-import se.citerus.dddsample.application.remoting.dto.ItineraryCandidateDTO;
7
-import se.citerus.dddsample.application.remoting.dto.LegDTO;
8
-import se.citerus.dddsample.application.remoting.dto.LocationDTO;
9
-import se.citerus.dddsample.ui.command.RegistrationCommand;
10
-import se.citerus.dddsample.ui.command.RouteAssignmentCommand;
4
+import se.citerus.dddsample.iface.booking.facade.BookingServiceFacade;
5
+import se.citerus.dddsample.iface.booking.facade.dto.CargoRoutingDTO;
6
+import se.citerus.dddsample.iface.booking.facade.dto.ItineraryCandidateDTO;
7
+import se.citerus.dddsample.iface.booking.facade.dto.LegDTO;
8
+import se.citerus.dddsample.iface.booking.facade.dto.LocationDTO;
11 9
 
12 10
 import javax.servlet.http.HttpServletRequest;
13 11
 import javax.servlet.http.HttpServletResponse;
@@ -26,7 +24,7 @@ import java.util.Map;
26 24
  * there is never any one perfect solution for all situations, so we've chosen to demonstrate
27 25
  * two polarized ways to build user interfaces.   
28 26
  *
29
- * @see CargoTrackingController
27
+ * @see se.citerus.dddsample.iface.tracking.CargoTrackingController
30 28
  */
31 29
 public final class CargoAdminController extends MultiActionController {
32 30
 

dddsample/src/main/java/se/citerus/dddsample/ui/command/RegistrationCommand.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/RegistrationCommand.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui.command;
1
+package se.citerus.dddsample.iface.booking.web;
2 2
 
3 3
 /**
4 4
  *

dddsample/src/main/java/se/citerus/dddsample/ui/command/RouteAssignmentCommand.java → dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/RouteAssignmentCommand.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui.command;
1
+package se.citerus.dddsample.iface.booking.web;
2 2
 
3 3
 import org.apache.commons.collections.Factory;
4 4
 import org.apache.commons.collections.ListUtils;

dddsample/src/main/java/se/citerus/dddsample/ui/package.html → dddsample/src/main/java/se/citerus/dddsample/iface/booking/web/package.html ファイルの表示


dddsample/src/main/java/se/citerus/dddsample/application/ws/HandlingEventServiceEndpoint.java → dddsample/src/main/java/se/citerus/dddsample/iface/handling/HandlingEventServiceEndpoint.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.application.ws;
1
+package se.citerus.dddsample.iface.handling;
2 2
 
3 3
 import javax.jws.WebService;
4 4
 

dddsample/src/main/java/se/citerus/dddsample/application/ws/HandlingEventServiceEndpointImpl.java → dddsample/src/main/java/se/citerus/dddsample/iface/handling/HandlingEventServiceEndpointImpl.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.application.ws;
1
+package se.citerus.dddsample.iface.handling;
2 2
 
3 3
 import org.apache.commons.lang.StringUtils;
4 4
 import org.apache.commons.logging.Log;
@@ -24,7 +24,7 @@ import java.util.List;
24 24
  * with the informtion to the handling event registration system for proper registration.
25 25
  *  
26 26
  */
27
-@WebService(endpointInterface = "se.citerus.dddsample.application.ws.HandlingEventServiceEndpoint")
27
+@WebService(endpointInterface = "se.citerus.dddsample.iface.handling.HandlingEventServiceEndpoint")
28 28
 public class HandlingEventServiceEndpointImpl implements HandlingEventServiceEndpoint {
29 29
 
30 30
   private SystemEvents systemEvents;

dddsample/src/main/java/se/citerus/dddsample/application/ws/RegistrationFailure.java → dddsample/src/main/java/se/citerus/dddsample/iface/handling/RegistrationFailure.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.application.ws;
1
+package se.citerus.dddsample.iface.handling;
2 2
 
3 3
 import java.util.Arrays;
4 4
 import java.util.List;

dddsample/src/main/java/se/citerus/dddsample/application/ws/package.html → dddsample/src/main/java/se/citerus/dddsample/iface/handling/package.html ファイルの表示


dddsample/src/main/java/se/citerus/dddsample/ui/CargoTrackingController.java → dddsample/src/main/java/se/citerus/dddsample/iface/tracking/CargoTrackingController.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui;
1
+package se.citerus.dddsample.iface.tracking;
2 2
 
3 3
 import org.springframework.context.MessageSource;
4 4
 import org.springframework.validation.BindException;
@@ -8,7 +8,6 @@ import org.springframework.web.servlet.support.RequestContextUtils;
8 8
 import se.citerus.dddsample.domain.model.cargo.Cargo;
9 9
 import se.citerus.dddsample.domain.model.cargo.CargoRepository;
10 10
 import se.citerus.dddsample.domain.model.cargo.TrackingId;
11
-import se.citerus.dddsample.ui.command.TrackCommand;
12 11
 
13 12
 import javax.servlet.http.HttpServletRequest;
14 13
 import javax.servlet.http.HttpServletResponse;
@@ -28,7 +27,7 @@ import java.util.Map;
28 27
  * <p/>
29 28
  *
30 29
  * @eee se.citerus.dddsample.application.web.CargoTrackingViewAdapter
31
- * @see CargoAdminController
30
+ * @see se.citerus.dddsample.iface.booking.web.CargoAdminController
32 31
  *
33 32
  */
34 33
 public final class CargoTrackingController extends SimpleFormController {

dddsample/src/main/java/se/citerus/dddsample/ui/CargoTrackingViewAdapter.java → dddsample/src/main/java/se/citerus/dddsample/iface/tracking/CargoTrackingViewAdapter.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui;
1
+package se.citerus.dddsample.iface.tracking;
2 2
 
3 3
 import org.springframework.context.MessageSource;
4 4
 import se.citerus.dddsample.domain.model.cargo.Cargo;

dddsample/src/main/java/se/citerus/dddsample/ui/command/TrackCommand.java → dddsample/src/main/java/se/citerus/dddsample/iface/tracking/TrackCommand.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui.command;
1
+package se.citerus.dddsample.iface.tracking;
2 2
 
3 3
 import org.apache.commons.lang.builder.ToStringBuilder;
4 4
 import static org.apache.commons.lang.builder.ToStringStyle.MULTI_LINE_STYLE;

dddsample/src/main/java/se/citerus/dddsample/ui/command/TrackCommandValidator.java → dddsample/src/main/java/se/citerus/dddsample/iface/tracking/TrackCommandValidator.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui.command;
1
+package se.citerus.dddsample.iface.tracking;
2 2
 
3 3
 import org.springframework.validation.Errors;
4 4
 import org.springframework.validation.ValidationUtils;

+ 0
- 7
dddsample/src/main/java/se/citerus/dddsample/ui/command/package.html ファイルの表示

@@ -1,7 +0,0 @@
1
-<html>
2
-<body>
3
-<p>
4
-  Command classes for web data binding and form handling.
5
-</p>
6
-</body>
7
-</html>

+ 2
- 2
dddsample/src/main/resources/context-remote.xml ファイルの表示

@@ -21,14 +21,14 @@
21 21
     </wss:bindings>
22 22
   </wss:bindings>
23 23
 
24
-  <bean id="handlingEventServiceEndpoint" class="se.citerus.dddsample.application.ws.HandlingEventServiceEndpointImpl">
24
+  <bean id="handlingEventServiceEndpoint" class="se.citerus.dddsample.iface.handling.HandlingEventServiceEndpointImpl">
25 25
     <property name="systemEvents" ref="systemEvents"/>
26 26
   </bean>
27 27
 
28 28
   <!-- RMI exposed booking service facade -->
29 29
   
30 30
   <bean id="rmiBookingServiceFacade" class="org.springframework.remoting.rmi.RmiServiceExporter">
31
-    <property name="serviceInterface" value="se.citerus.dddsample.application.remoting.BookingServiceFacade"/>
31
+    <property name="serviceInterface" value="se.citerus.dddsample.iface.booking.facade.BookingServiceFacade"/>
32 32
     <property name="service" ref="bookingServiceFacade"/>
33 33
     <property name="serviceName" value="BookingService"/>
34 34
   </bean>

+ 1
- 1
dddsample/src/main/resources/context-service.xml ファイルの表示

@@ -38,7 +38,7 @@
38 38
     <property name="graphTraversalService" ref="graphTraversalService"/>
39 39
   </bean>
40 40
 
41
-  <bean id="bookingServiceFacade" class="se.citerus.dddsample.application.remoting.BookingServiceFacadeImpl">
41
+  <bean id="bookingServiceFacade" class="se.citerus.dddsample.iface.booking.facade.BookingServiceFacadeImpl">
42 42
     <property name="bookingService" ref="bookingService"/>
43 43
     <property name="cargoRepository" ref="cargoRepository"/>
44 44
     <property name="locationRepository" ref="locationRepository"/>

+ 3
- 3
dddsample/src/main/webapp/WEB-INF/dispatch-servlet.xml ファイルの表示

@@ -11,7 +11,7 @@
11 11
     </property>
12 12
   </bean>
13 13
 
14
-  <bean name="/cargo/track.html" class="se.citerus.dddsample.ui.CargoTrackingController">
14
+  <bean name="/cargo/track.html" class="se.citerus.dddsample.iface.tracking.CargoTrackingController">
15 15
     <property name="sessionForm" value="true"/>
16 16
     <property name="commandName" value="trackCommand"/>
17 17
     <property name="formView" value="cargo/track"/>
@@ -20,9 +20,9 @@
20 20
     <property name="validator" ref="trackCommandValidator"/>
21 21
   </bean>
22 22
 
23
-  <bean id="trackCommandValidator" class="se.citerus.dddsample.ui.command.TrackCommandValidator"/>
23
+  <bean id="trackCommandValidator" class="se.citerus.dddsample.iface.tracking.TrackCommandValidator"/>
24 24
 
25
-  <bean name="/admin/*" class="se.citerus.dddsample.ui.CargoAdminController">
25
+  <bean name="/admin/*" class="se.citerus.dddsample.iface.booking.web.CargoAdminController">
26 26
     <property name="bookingServiceFacade" ref="bookingServiceFacade"/>
27 27
   </bean>
28 28
 

+ 3
- 3
dddsample/src/test/java/se/citerus/dddsample/application/service/dto/assembler/CargoRoutingDTOAssemblerTest.java ファイルの表示

@@ -1,9 +1,6 @@
1 1
 package se.citerus.dddsample.application.service.dto.assembler;
2 2
 
3 3
 import junit.framework.TestCase;
4
-import se.citerus.dddsample.application.remoting.dto.CargoRoutingDTO;
5
-import se.citerus.dddsample.application.remoting.dto.LegDTO;
6
-import se.citerus.dddsample.application.remoting.dto.assembler.CargoRoutingDTOAssembler;
7 4
 import se.citerus.dddsample.domain.model.cargo.Cargo;
8 5
 import se.citerus.dddsample.domain.model.cargo.Itinerary;
9 6
 import se.citerus.dddsample.domain.model.cargo.Leg;
@@ -11,6 +8,9 @@ import se.citerus.dddsample.domain.model.cargo.TrackingId;
11 8
 import static se.citerus.dddsample.domain.model.carrier.SampleVoyages.CM001;
12 9
 import se.citerus.dddsample.domain.model.location.Location;
13 10
 import static se.citerus.dddsample.domain.model.location.SampleLocations.*;
11
+import se.citerus.dddsample.iface.booking.facade.dto.CargoRoutingDTO;
12
+import se.citerus.dddsample.iface.booking.facade.dto.LegDTO;
13
+import se.citerus.dddsample.iface.booking.facade.dto.assembler.CargoRoutingDTOAssembler;
14 14
 
15 15
 import java.util.Arrays;
16 16
 import java.util.Date;

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

@@ -2,9 +2,6 @@ package se.citerus.dddsample.application.service.dto.assembler;
2 2
 
3 3
 import junit.framework.TestCase;
4 4
 import static org.easymock.EasyMock.*;
5
-import se.citerus.dddsample.application.remoting.dto.ItineraryCandidateDTO;
6
-import se.citerus.dddsample.application.remoting.dto.LegDTO;
7
-import se.citerus.dddsample.application.remoting.dto.assembler.ItineraryCandidateDTOAssembler;
8 5
 import se.citerus.dddsample.domain.model.cargo.Itinerary;
9 6
 import se.citerus.dddsample.domain.model.cargo.Leg;
10 7
 import static se.citerus.dddsample.domain.model.carrier.SampleVoyages.CM001;
@@ -13,6 +10,9 @@ import se.citerus.dddsample.domain.model.location.Location;
13 10
 import se.citerus.dddsample.domain.model.location.LocationRepository;
14 11
 import static se.citerus.dddsample.domain.model.location.SampleLocations.*;
15 12
 import se.citerus.dddsample.domain.model.location.UnLocode;
13
+import se.citerus.dddsample.iface.booking.facade.dto.ItineraryCandidateDTO;
14
+import se.citerus.dddsample.iface.booking.facade.dto.LegDTO;
15
+import se.citerus.dddsample.iface.booking.facade.dto.assembler.ItineraryCandidateDTOAssembler;
16 16
 import se.citerus.dddsample.infrastructure.persistence.inmemory.VoyageRepositoryInMem;
17 17
 
18 18
 import java.util.ArrayList;

+ 2
- 2
dddsample/src/test/java/se/citerus/dddsample/application/service/dto/assembler/LocationDTOAssemblerTest.java ファイルの表示

@@ -1,11 +1,11 @@
1 1
 package se.citerus.dddsample.application.service.dto.assembler;
2 2
 
3 3
 import junit.framework.TestCase;
4
-import se.citerus.dddsample.application.remoting.dto.LocationDTO;
5
-import se.citerus.dddsample.application.remoting.dto.assembler.LocationDTOAssembler;
6 4
 import se.citerus.dddsample.domain.model.location.Location;
7 5
 import static se.citerus.dddsample.domain.model.location.SampleLocations.HAMBURG;
8 6
 import static se.citerus.dddsample.domain.model.location.SampleLocations.STOCKHOLM;
7
+import se.citerus.dddsample.iface.booking.facade.dto.LocationDTO;
8
+import se.citerus.dddsample.iface.booking.facade.dto.assembler.LocationDTOAssembler;
9 9
 
10 10
 import java.util.Arrays;
11 11
 import java.util.List;

+ 29
- 0
dddsample/src/test/java/se/citerus/dddsample/iface/booking/web/CargoAdminControllerTest.java ファイルの表示

@@ -0,0 +1,29 @@
1
+package se.citerus.dddsample.iface.booking.web;
2
+
3
+import junit.framework.TestCase;
4
+import org.easymock.EasyMock;
5
+import org.springframework.mock.web.MockHttpServletRequest;
6
+import org.springframework.mock.web.MockHttpServletResponse;
7
+import se.citerus.dddsample.iface.booking.facade.BookingServiceFacade;
8
+
9
+public class CargoAdminControllerTest extends TestCase {
10
+
11
+  CargoAdminController controller;
12
+  BookingServiceFacade bookingServiceFacade;
13
+  MockHttpServletRequest request;
14
+  MockHttpServletResponse response;
15
+
16
+  public CargoAdminControllerTest() {
17
+    controller = new CargoAdminController();
18
+    bookingServiceFacade = EasyMock.createMock(BookingServiceFacade.class);
19
+    controller.setBookingServiceFacade(bookingServiceFacade);
20
+  }
21
+
22
+  public void testAssignItinerary() throws Exception {
23
+    request = new MockHttpServletRequest("GET","assignItinerary.html");
24
+    response = new MockHttpServletResponse();
25
+
26
+    controller.handleRequest(request, response);
27
+  }
28
+
29
+}

dddsample/src/test/java/se/citerus/dddsample/ui/command/ItinerarySelectionCommandTest.java → dddsample/src/test/java/se/citerus/dddsample/iface/booking/web/ItinerarySelectionCommandTest.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui.command;
1
+package se.citerus.dddsample.iface.booking.web;
2 2
 
3 3
 import junit.framework.TestCase;
4 4
 import org.springframework.mock.web.MockHttpServletRequest;

dddsample/src/test/java/se/citerus/dddsample/application/ws/HandlinEventServiceEndpointTest.java → dddsample/src/test/java/se/citerus/dddsample/iface/handling/HandlinEventServiceEndpointTest.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.application.ws;
1
+package se.citerus.dddsample.iface.handling;
2 2
 
3 3
 import junit.framework.TestCase;
4 4
 import static org.easymock.EasyMock.*;

+ 92
- 0
dddsample/src/test/java/se/citerus/dddsample/iface/tracking/CargoTrackingControllerTest.java ファイルの表示

@@ -0,0 +1,92 @@
1
+package se.citerus.dddsample.iface.tracking;
2
+
3
+import junit.framework.TestCase;
4
+import org.easymock.EasyMock;
5
+import org.springframework.context.support.StaticApplicationContext;
6
+import org.springframework.mock.web.MockHttpServletRequest;
7
+import org.springframework.mock.web.MockHttpServletResponse;
8
+import org.springframework.mock.web.MockHttpSession;
9
+import org.springframework.mock.web.MockServletContext;
10
+import org.springframework.validation.BindingResult;
11
+import org.springframework.validation.Errors;
12
+import org.springframework.validation.FieldError;
13
+import org.springframework.web.servlet.ModelAndView;
14
+import se.citerus.dddsample.domain.model.cargo.CargoRepository;
15
+import se.citerus.dddsample.infrastructure.persistence.inmemory.CargoRepositoryInMem;
16
+import se.citerus.dddsample.infrastructure.persistence.inmemory.HandlingEventRepositoryInMem;
17
+
18
+public class CargoTrackingControllerTest extends TestCase {
19
+  CargoTrackingController controller;
20
+  MockHttpServletRequest request;
21
+  MockHttpServletResponse response;
22
+  MockHttpSession session;
23
+  MockServletContext servletContext;
24
+  private CargoRepositoryInMem cargoRepository;
25
+
26
+  protected void setUp() throws Exception {
27
+    servletContext = new MockServletContext("test");
28
+    request = new MockHttpServletRequest(servletContext);
29
+    response = new MockHttpServletResponse();
30
+    session = new MockHttpSession(servletContext);
31
+    request.setSession(session);
32
+
33
+    controller = new CargoTrackingController();
34
+    StaticApplicationContext applicationContext = new StaticApplicationContext();
35
+    controller.setApplicationContext(applicationContext);
36
+    controller.setFormView("test-form");
37
+    controller.setSuccessView("test-success");
38
+    controller.setCommandName("test-command-name");
39
+    cargoRepository = new CargoRepositoryInMem();
40
+    cargoRepository.setHandlingEventRepository(new HandlingEventRepositoryInMem());
41
+    cargoRepository.init();
42
+  }
43
+
44
+  public void testHandleGet() throws Exception {
45
+    controller.setCargoRepository(new CargoRepositoryInMem());
46
+    request.setMethod("GET");
47
+
48
+    ModelAndView mav = controller.handleRequest(request, response);
49
+
50
+    assertEquals("test-form", mav.getViewName());
51
+    assertEquals(2, mav.getModel().size());
52
+    assertTrue(mav.getModel().get("test-command-name") instanceof TrackCommand);
53
+  }
54
+
55
+  public void testHandlePost() throws Exception {
56
+    controller.setCargoRepository(cargoRepository);
57
+    request.addParameter("trackingId", "ABC");
58
+    request.setMethod("POST");
59
+
60
+    ModelAndView mav = controller.handleRequest(request, response);
61
+
62
+    assertEquals("test-form", mav.getViewName());
63
+    // Errors, command are two standard map attributes, the third should be the cargo object
64
+    assertEquals(3, mav.getModel().size());
65
+    CargoTrackingViewAdapter cargo = (CargoTrackingViewAdapter) mav.getModel().get("cargo");
66
+    assertEquals("ABC", cargo.getTrackingId());
67
+  }
68
+
69
+  public void testUnknownCargo() throws Exception {
70
+    CargoRepository cargoRepository = EasyMock.createNiceMock(CargoRepository.class);
71
+    EasyMock.replay(cargoRepository);
72
+    controller.setCargoRepository(cargoRepository);
73
+    
74
+    request.setMethod("POST");
75
+    request.setParameter("trackingId", "unknown-id");
76
+
77
+    ModelAndView mav = controller.handleRequest(request, response);
78
+
79
+    assertEquals("test-form", mav.getViewName());
80
+    assertEquals(2, mav.getModel().size());
81
+
82
+    TrackCommand command = (TrackCommand) mav.getModel().get(controller.getCommandName());
83
+    assertEquals("unknown-id", command.getTrackingId());
84
+
85
+    Errors errors = (Errors) mav.getModel().get(BindingResult.MODEL_KEY_PREFIX + controller.getCommandName());
86
+    FieldError fe = errors.getFieldError("trackingId");
87
+    assertEquals("cargo.unknown_id", fe.getCode());
88
+    assertEquals(1, fe.getArguments().length);
89
+    assertEquals(command.getTrackingId(), fe.getArguments()[0]);
90
+  }
91
+
92
+}

+ 63
- 0
dddsample/src/test/java/se/citerus/dddsample/iface/tracking/CargoTrackingViewAdapterTest.java ファイルの表示

@@ -0,0 +1,63 @@
1
+package se.citerus.dddsample.iface.tracking;
2
+
3
+import junit.framework.TestCase;
4
+import org.springframework.context.support.StaticApplicationContext;
5
+import se.citerus.dddsample.domain.model.cargo.Cargo;
6
+import se.citerus.dddsample.domain.model.cargo.CargoTestHelper;
7
+import se.citerus.dddsample.domain.model.cargo.TrackingId;
8
+import static se.citerus.dddsample.domain.model.carrier.SampleVoyages.CM001;
9
+import se.citerus.dddsample.domain.model.handling.HandlingEvent;
10
+import static se.citerus.dddsample.domain.model.location.SampleLocations.HANGZOU;
11
+import static se.citerus.dddsample.domain.model.location.SampleLocations.HELSINKI;
12
+
13
+import java.util.*;
14
+
15
+public class CargoTrackingViewAdapterTest extends TestCase {
16
+
17
+  public void testCreate() {
18
+    Cargo cargo = new Cargo(new TrackingId("XYZ"), HANGZOU, HELSINKI);
19
+
20
+    List<HandlingEvent> events = new ArrayList<HandlingEvent>();
21
+    events.add(new HandlingEvent(cargo, new Date(1), new Date(2), HandlingEvent.Type.RECEIVE, HANGZOU));
22
+
23
+    events.add(new HandlingEvent(cargo, new Date(3), new Date(4), HandlingEvent.Type.LOAD, HANGZOU, CM001));
24
+    events.add(new HandlingEvent(cargo, new Date(5), new Date(6), HandlingEvent.Type.UNLOAD, HELSINKI, CM001));
25
+
26
+    CargoTestHelper.setDeliveryHistory(cargo, events);
27
+
28
+    StaticApplicationContext applicationContext = new StaticApplicationContext();
29
+    applicationContext.addMessage("cargo.status.IN_PORT", Locale.GERMAN, "In port {0}");
30
+    applicationContext.refresh();
31
+
32
+    CargoTrackingViewAdapter adapter = new CargoTrackingViewAdapter(cargo, applicationContext, Locale.GERMAN);
33
+
34
+    assertEquals("XYZ", adapter.getTrackingId());
35
+    assertEquals("CNHGH (Hangzhou)", adapter.getOrigin());
36
+    assertEquals("FIHEL (Helsinki)", adapter.getDestination());
37
+    assertEquals("In port FIHEL (Helsinki)", adapter.getStatusText());
38
+
39
+    Iterator<CargoTrackingViewAdapter.HandlingEventViewAdapter> it = adapter.getEvents().iterator();
40
+
41
+    CargoTrackingViewAdapter.HandlingEventViewAdapter event = it.next();
42
+    assertEquals("RECEIVE", event.getType());
43
+    assertEquals("CNHGH", event.getLocation());
44
+    assertEquals("1970-01-01 01:00", event.getTime());
45
+    assertEquals("", event.getVoyageNumber());
46
+    assertTrue(event.isExpected());
47
+
48
+    event = it.next();
49
+    assertEquals("LOAD", event.getType());
50
+    assertEquals("CNHGH", event.getLocation());
51
+    assertEquals("1970-01-01 01:00", event.getTime());
52
+    assertEquals("CM001", event.getVoyageNumber());
53
+    assertTrue(event.isExpected());
54
+
55
+    event = it.next();
56
+    assertEquals("UNLOAD", event.getType());
57
+    assertEquals("FIHEL", event.getLocation());
58
+    assertEquals("1970-01-01 01:00", event.getTime());
59
+    assertEquals("CM001", event.getVoyageNumber());
60
+    assertTrue(event.isExpected());
61
+  }
62
+
63
+}

dddsample/src/test/java/se/citerus/dddsample/ui/command/TrackCommandValidatorTest.java → dddsample/src/test/java/se/citerus/dddsample/iface/tracking/TrackCommandValidatorTest.java ファイルの表示

@@ -1,4 +1,4 @@
1
-package se.citerus.dddsample.ui.command;
1
+package se.citerus.dddsample.iface.tracking;
2 2
 
3 3
 import junit.framework.TestCase;
4 4
 import org.springframework.validation.BeanPropertyBindingResult;