Skip to content

Commit e747e82

Browse files
committed
Fixed binding to proper command object for selected itinerary
1 parent ef45a37 commit e747e82

File tree

7 files changed

+157
-85
lines changed

7 files changed

+157
-85
lines changed

dddsample/src/main/java/se/citerus/dddsample/application/web/CargoAdminController.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import se.citerus.dddsample.application.remoting.dto.LegDTO;
88
import se.citerus.dddsample.application.remoting.dto.LocationDTO;
99
import se.citerus.dddsample.application.web.command.RegistrationCommand;
10+
import se.citerus.dddsample.application.web.command.RouteAssignmentCommand;
1011

1112
import javax.servlet.http.HttpServletRequest;
1213
import javax.servlet.http.HttpServletResponse;
@@ -86,23 +87,15 @@ public Map selectItinerary(final HttpServletRequest request, final HttpServletRe
8687
return map;
8788
}
8889

89-
public void assignItinerary(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
90-
final String trackingId = request.getParameter("trackingId");
91-
92-
// TODO: gah, stuck on indexoutofbounds (legs[0].fromUnlocode etc) when trying to bind...
93-
// Revisit and fix this with a proper command object, this is just hideous
94-
final String[] cmIds = (String[]) request.getParameterMap().get("legs.carrierMovementId");
95-
final String[] fromUnlocodes = (String[]) request.getParameterMap().get("legs.fromUnlocode");
96-
final String[] toUnlocodes = (String[]) request.getParameterMap().get("legs.toUnlocode");
97-
98-
final List<LegDTO> legDTOs = new ArrayList<LegDTO>(cmIds.length);
99-
for (int i = 0; i < cmIds.length; i++) {
100-
legDTOs.add(new LegDTO(cmIds[i], fromUnlocodes[i], toUnlocodes[i]));
90+
public void assignItinerary(final HttpServletRequest request, final HttpServletResponse response, RouteAssignmentCommand command) throws Exception {
91+
final List<LegDTO> legDTOs = new ArrayList<LegDTO>(command.getLegs().size());
92+
for (RouteAssignmentCommand.LegCommand leg : command.getLegs()) {
93+
legDTOs.add(new LegDTO(leg.getCarrierMovementId(), leg.getFromUnLocode(), leg.getToUnLocode()));
10194
}
10295

10396
final ItineraryCandidateDTO selectedItinerary = new ItineraryCandidateDTO(legDTOs);
10497

105-
bookingServiceFacade.assignCargoToRoute(trackingId, selectedItinerary);
98+
bookingServiceFacade.assignCargoToRoute(command.getTrackingId(), selectedItinerary);
10699

107100
response.sendRedirect("list.html");
108101
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package se.citerus.dddsample.application.web.command;
2+
3+
import org.apache.commons.collections.Factory;
4+
import org.apache.commons.collections.ListUtils;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class RouteAssignmentCommand {
10+
11+
private String trackingId;
12+
private List<LegCommand> legs = ListUtils.lazyList(
13+
new ArrayList(), LegCommand.factory()
14+
);
15+
16+
public String getTrackingId() {
17+
return trackingId;
18+
}
19+
20+
public void setTrackingId(String trackingId) {
21+
this.trackingId = trackingId;
22+
}
23+
24+
public List<LegCommand> getLegs() {
25+
return legs;
26+
}
27+
28+
public void setLegs(List<LegCommand> legs) {
29+
this.legs = legs;
30+
}
31+
32+
public static final class LegCommand {
33+
private String carrierMovementId;
34+
private String fromUnLocode;
35+
private String toUnLocode;
36+
37+
public String getCarrierMovementId() {
38+
return carrierMovementId;
39+
}
40+
41+
public void setCarrierMovementId(final String carrierMovementId) {
42+
this.carrierMovementId = carrierMovementId;
43+
}
44+
45+
public String getFromUnLocode() {
46+
return fromUnLocode;
47+
}
48+
49+
public void setFromUnLocode(final String fromUnLocode) {
50+
this.fromUnLocode = fromUnLocode;
51+
}
52+
53+
public String getToUnLocode() {
54+
return toUnLocode;
55+
}
56+
57+
public void setToUnLocode(final String toUnLocode) {
58+
this.toUnLocode = toUnLocode;
59+
}
60+
61+
public static Factory factory() {
62+
return new Factory() {
63+
public Object create() {
64+
return new LegCommand();
65+
}
66+
};
67+
}
68+
69+
}
70+
}

dddsample/src/main/java/se/citerus/dddsample/application/web/command/RoutingCommand.java

Lines changed: 0 additions & 68 deletions
This file was deleted.

dddsample/src/main/webapp/WEB-INF/jsp/admin/selectItinerary.jsp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@
5151
</thead>
5252
<tbody>
5353
<c:forEach items="${it.legs}" var="leg" varStatus="legStatus">
54-
<input type="hidden" name="legs.carrierMovementId" value="${leg.carrierMovementId}"/>
55-
<input type="hidden" name="legs.fromUnlocode" value="${leg.from}"/>
56-
<input type="hidden" name="legs.toUnlocode" value="${leg.to}"/>
54+
<input type="hidden" name="legs[${legStatus.index}].carrierMovementId" value="${leg.carrierMovementId}"/>
55+
<input type="hidden" name="legs[${legStatus.index}].fromUnLocode" value="${leg.from}"/>
56+
<input type="hidden" name="legs[${legStatus.index}].toUnLocode" value="${leg.to}"/>
5757
<tr>
5858
<td>${leg.carrierMovementId}</td>
5959
<td>${leg.from}</td>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package se.citerus.dddsample.application.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.application.remoting.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/application/web/CargoTrackingControllerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private class EmptyStubTrackingService implements TrackingService {
107107
public Cargo track(TrackingId trackingId) {
108108
return null;
109109
}
110-
public void notify(TrackingId trackingId) {
110+
public void inspectCargo(TrackingId trackingId) {
111111
}
112112
}
113113
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package se.citerus.dddsample.application.web.command;
2+
3+
import junit.framework.TestCase;
4+
import org.springframework.mock.web.MockHttpServletRequest;
5+
import org.springframework.web.bind.ServletRequestDataBinder;
6+
7+
import java.util.List;
8+
9+
public class ItinerarySelectionCommandTest extends TestCase {
10+
11+
RouteAssignmentCommand command;
12+
MockHttpServletRequest request;
13+
14+
public void testBind() {
15+
command = new RouteAssignmentCommand();
16+
request = new MockHttpServletRequest();
17+
18+
request.addParameter("legs[0].carrierMovementId", "CM01");
19+
request.addParameter("legs[0].fromUnLocode", "AAAAA");
20+
request.addParameter("legs[0].toUnLocode", "BBBBB");
21+
22+
request.addParameter("legs[1].carrierMovementId", "CM02");
23+
request.addParameter("legs[1].fromUnLocode", "CCCCC");
24+
request.addParameter("legs[1].toUnLocode", "DDDDD");
25+
26+
request.addParameter("trackingId", "XYZ");
27+
28+
ServletRequestDataBinder binder = new ServletRequestDataBinder(command);
29+
binder.bind(request);
30+
31+
List<RouteAssignmentCommand.LegCommand> legs = command.getLegs();
32+
assertEquals(2, legs.size());
33+
34+
RouteAssignmentCommand.LegCommand leg = legs.get(0);
35+
assertEquals("CM01", leg.getCarrierMovementId());
36+
assertEquals("AAAAA", leg.getFromUnLocode());
37+
assertEquals("BBBBB", leg.getToUnLocode());
38+
39+
leg = legs.get(1);
40+
assertEquals("CM02", leg.getCarrierMovementId());
41+
assertEquals("CCCCC", leg.getFromUnLocode());
42+
assertEquals("DDDDD", leg.getToUnLocode());
43+
44+
assertEquals("XYZ", command.getTrackingId());
45+
}
46+
47+
48+
}

0 commit comments

Comments
 (0)