Skip to content

Commit

Permalink
booking: Support getting a booking via CBR in addition to CBRR
Browse files Browse the repository at this point in the history
Signed-off-by: Niels Thykier <[email protected]>
  • Loading branch information
nt-gt committed Nov 20, 2023
1 parent b705080 commit 2fbede8
Showing 1 changed file with 17 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public class Carrier extends ConformanceParty {
private final ObjectMapper objectMapper = new ObjectMapper();
private final Map<String, BookingState> bookingStatesByCbrr = new HashMap<>();
private final Map<String, String> cbrrToCbr = new HashMap<>();
private final Map<String, String> cbrToCbrr = new HashMap<>();
protected boolean isShipperNotificationEnabled = false;

public Carrier(
Expand All @@ -56,18 +57,22 @@ protected void exportPartyJsonState(ObjectNode targetObjectNode) {
"bookingStatesByCbrr",
StateManagementUtil.storeMap(objectMapper, bookingStatesByCbrr, BookingState::name));
targetObjectNode.set("cbrrToCbr", StateManagementUtil.storeMap(objectMapper, cbrrToCbr));
targetObjectNode.set("cbrToCbrr", StateManagementUtil.storeMap(objectMapper, cbrToCbrr));
}

@Override
protected void importPartyJsonState(ObjectNode sourceObjectNode) {
StateManagementUtil.restoreIntoMap(
bookingStatesByCbrr, sourceObjectNode.get("bookingStatesByCbrr"), BookingState::valueOf);
StateManagementUtil.restoreIntoMap(cbrrToCbr, sourceObjectNode.get("cbrrToCbr"));
StateManagementUtil.restoreIntoMap(cbrToCbrr, sourceObjectNode.get("cbrToCbrr"));
}

@Override
protected void doReset() {
bookingStatesByCbrr.clear();
cbrrToCbr.clear();
cbrToCbrr.clear();
}

@Override
Expand Down Expand Up @@ -397,6 +402,7 @@ private void processAndEmitNotificationForStateTransition(
if (cbr == null) {
cbr = UUID.randomUUID().toString().replace("-", "").toUpperCase();
cbrrToCbr.put(cbrr, cbr);
cbrToCbrr.put(cbr, cbrr);
generatedCBR = true;
}
}
Expand Down Expand Up @@ -467,16 +473,24 @@ public ConformanceResponse handleRequest(ConformanceRequest request) {
}
}

private String lastUrlSegment(String url) {
// ".../foo" and ".../foo/" should be the same
return url.substring(1 + url.replaceAll("/++$", "").lastIndexOf("/"));
}

private ConformanceResponse _handleGetBookingRequest(ConformanceRequest request) {
String cbrr = request.url().substring(1 + request.url().lastIndexOf("/"));
var bookingReference = lastUrlSegment(request.url());
// bookingReference can either be a CBR or CBRR.
var cbrr = cbrToCbrr.getOrDefault(bookingReference, bookingReference);
var booking = persistentMap.load(cbrr);
ConformanceResponse response =
request.createResponse(
200,
Map.of("Api-Version", List.of(apiVersion)),
new ConformanceMessageBody(persistentMap.load(cbrr)));
new ConformanceMessageBody(booking));
addOperatorLogEntry(
"Responded to GET booking request '%s' (in state '%s')"
.formatted(cbrr, BookingState.RECEIVED.wireName()));
.formatted(bookingReference, booking.get("bookingStatus")));
return response;
}

Expand Down

0 comments on commit 2fbede8

Please sign in to comment.