Skip to content

Commit

Permalink
Local-only async behavior fix
Browse files Browse the repository at this point in the history
  • Loading branch information
gj0dcsa committed Dec 24, 2023
1 parent 0e4fcf4 commit bd2c8ca
Show file tree
Hide file tree
Showing 27 changed files with 338 additions and 396 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.fasterxml.jackson.databind.JsonNode;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
Expand All @@ -16,10 +15,9 @@
import org.dcsa.conformance.core.state.JsonNodeMap;
import org.dcsa.conformance.core.toolkit.JsonToolkit;
import org.dcsa.conformance.core.traffic.ConformanceRequest;
import org.dcsa.conformance.core.traffic.ConformanceResponse;
import org.dcsa.conformance.standards.booking.party.BookingRole;
import org.dcsa.conformance.standards.booking.party.Carrier;
import org.dcsa.conformance.standards.booking.party.Shipper;
import org.dcsa.conformance.standards.booking.party.BookingCarrier;
import org.dcsa.conformance.standards.booking.party.BookingShipper;

public class BookingComponentFactory extends AbstractComponentFactory {
public static final String STANDARD_NAME = "Booking";
Expand All @@ -42,7 +40,7 @@ public List<ConformanceParty> createParties(
PartyConfiguration[] partyConfigurations,
CounterpartConfiguration[] counterpartConfigurations,
JsonNodeMap persistentMap,
BiConsumer<ConformanceRequest, Consumer<ConformanceResponse>> asyncWebClient,
Consumer<ConformanceRequest> asyncWebClient,
Map<String, ? extends Collection<String>> orchestratorAuthHeader) {
Map<String, PartyConfiguration> partyConfigurationsByRoleName =
Arrays.stream(partyConfigurations)
Expand All @@ -57,7 +55,7 @@ public List<ConformanceParty> createParties(
partyConfigurationsByRoleName.get(BookingRole.CARRIER.getConfigName());
if (carrierConfiguration != null) {
parties.add(
new Carrier(
new BookingCarrier(
standardVersion,
carrierConfiguration,
counterpartConfigurationsByRoleName.get(BookingRole.SHIPPER.getConfigName()),
Expand All @@ -70,7 +68,7 @@ public List<ConformanceParty> createParties(
partyConfigurationsByRoleName.get(BookingRole.SHIPPER.getConfigName());
if (shipperConfiguration != null) {
parties.add(
new Shipper(
new BookingShipper(
standardVersion,
shipperConfiguration,
counterpartConfigurationsByRoleName.get(BookingRole.CARRIER.getConfigName()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import lombok.Builder;
import lombok.SneakyThrows;
Expand All @@ -27,22 +23,21 @@
import org.dcsa.conformance.standards.booking.model.PersistableCarrierBooking;

@Slf4j
public class Carrier extends ConformanceParty {
public class BookingCarrier extends ConformanceParty {

private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
private static final Random RANDOM = new Random();
private final Map<String, String> cbrrToCbr = new HashMap<>();
private final Map<String, String> cbrToCbrr = new HashMap<>();
protected boolean isShipperNotificationEnabled = true;

public Carrier(
public BookingCarrier(
String apiVersion,
PartyConfiguration partyConfiguration,
CounterpartConfiguration counterpartConfiguration,
JsonNodeMap persistentMap,
BiConsumer<ConformanceRequest, Consumer<ConformanceResponse>> asyncWebClient,
Consumer<ConformanceRequest> asyncWebClient,
Map<String, ? extends Collection<String>> orchestratorAuthHeader) {
super(
apiVersion,
Expand Down Expand Up @@ -287,7 +282,7 @@ private void generateAndEmitNotificationFromBooking(JsonNode actionPrompt, Persi
.build()
.asJsonNode();
if (isShipperNotificationEnabled) {
asyncCounterpartPostNotification("/v2/booking-notifications", notification);
asyncCounterpartNotification("/v2/booking-notifications", notification);
} else {
asyncOrchestratorPostPartyInput(
OBJECT_MAPPER.createObjectNode().put("actionId", actionPrompt.required("actionId").asText()));
Expand Down Expand Up @@ -411,17 +406,13 @@ private ConformanceResponse _handlePutBookingRequest(ConformanceRequest request)
var booking = persistableCarrierBooking.getBooking();

if (isShipperNotificationEnabled) {
executor.schedule(
() ->
asyncCounterpartPostNotification(
"/v2/booking-notifications",
BookingNotification.builder()
.apiVersion(apiVersion)
.booking(booking)
.build()
.asJsonNode()),
100,
TimeUnit.MILLISECONDS);
asyncCounterpartNotification(
"/v2/booking-notifications",
BookingNotification.builder()
.apiVersion(apiVersion)
.booking(booking)
.build()
.asJsonNode());
}
return returnBookingStatusResponse(200, request, booking, cbrr);
}
Expand Down Expand Up @@ -455,6 +446,7 @@ private ConformanceResponse _handlePatchBookingRequest(ConformanceRequest reques
} catch (IllegalStateException e) {
return return409(request, "Booking was not in the correct state");
}
persistableCarrierBooking.save(persistentMap);

return returnBookingStatusResponse(
200,
Expand Down Expand Up @@ -542,17 +534,13 @@ private ConformanceResponse _handlePostBookingRequest(ConformanceRequest request
var persistableCarrierBooking = PersistableCarrierBooking.initializeFromBookingRequest(bookingRequestPayload);
persistableCarrierBooking.save(persistentMap);
if (isShipperNotificationEnabled) {
executor.schedule(
() ->
asyncCounterpartPostNotification(
"/v2/booking-notifications",
BookingNotification.builder()
.apiVersion(apiVersion)
.booking(persistableCarrierBooking.getBooking())
.build()
.asJsonNode()),
100,
TimeUnit.MILLISECONDS);
asyncCounterpartNotification(
"/v2/booking-notifications",
BookingNotification.builder()
.apiVersion(apiVersion)
.booking(persistableCarrierBooking.getBooking())
.build()
.asJsonNode());
}
return returnBookingStatusResponse(
201,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j;
import org.dcsa.conformance.core.party.ConformanceParty;
Expand All @@ -19,16 +18,16 @@
import org.dcsa.conformance.standards.booking.action.*;

@Slf4j
public class Shipper extends ConformanceParty {
public class BookingShipper extends ConformanceParty {

private static final String SERVICE_CONTRACT_REF = "serviceContractReference";
private static final String SERVICE_REF_PUT = "serviceRefPut";
public Shipper(
public BookingShipper(
String apiVersion,
PartyConfiguration partyConfiguration,
CounterpartConfiguration counterpartConfiguration,
JsonNodeMap persistentMap,
BiConsumer<ConformanceRequest, Consumer<ConformanceResponse>> asyncWebClient,
Consumer<ConformanceRequest> asyncWebClient,
Map<String, ? extends Collection<String>> orchestratorAuthHeader) {
super(
apiVersion,
Expand Down Expand Up @@ -74,7 +73,7 @@ private void getBookingRequest(JsonNode actionPrompt) {
? Map.of("amendedContent", List.of("true"))
: Collections.emptyMap();

asyncCounterpartGet("/v2/bookings/" + cbrr, queryParams);
syncCounterpartGet("/v2/bookings/" + cbrr, queryParams);

addOperatorLogEntry("Sent a GET request for booking with CBRR: %s".formatted(cbrr));
}
Expand All @@ -87,17 +86,14 @@ private void sendBookingRequest(JsonNode actionPrompt) {

JsonNode jsonRequestBody = replaceBookingPlaceHolders(actionPrompt);

asyncCounterpartPost(
"/v2/bookings",
jsonRequestBody,
conformanceResponse -> {
JsonNode jsonBody = conformanceResponse.message().body().getJsonBody();
String cbrr = jsonBody.path("carrierBookingRequestReference").asText();
ObjectNode updatedBooking =
((ObjectNode) jsonRequestBody)
.put("carrierBookingRequestReference", cbrr);
persistentMap.save(cbrr, updatedBooking);
});
ConformanceResponse conformanceResponse = syncCounterpartPost("/v2/bookings", jsonRequestBody);

JsonNode jsonBody = conformanceResponse.message().body().getJsonBody();
String cbrr = jsonBody.path("carrierBookingRequestReference").asText();
ObjectNode updatedBooking =
((ObjectNode) jsonRequestBody)
.put("carrierBookingRequestReference", cbrr);
persistentMap.save(cbrr, updatedBooking);

addOperatorLogEntry(
"Sent a booking request with the parameters: %s"
Expand Down Expand Up @@ -133,7 +129,7 @@ private void sendCancelEntireBooking(JsonNode actionPrompt) {
log.info("Shipper.sendCancelEntireBooking(%s)".formatted(actionPrompt.toPrettyString()));
String cbrr = actionPrompt.get("cbrr").asText();
Map<String, List<String>> queryParams = Map.of("operation", List.of("cancelBooking"));
asyncCounterpartPatch(
syncCounterpartPatch(
"/v2/bookings/%s".formatted(cbrr),
queryParams,
new ObjectMapper()
Expand All @@ -147,7 +143,7 @@ private void sendCancelBookingAmendment(JsonNode actionPrompt) {
log.info("Shipper.sendCancelBookingAmendment(%s)".formatted(actionPrompt.toPrettyString()));
String cbrr = actionPrompt.get("cbrr").asText();
Map<String, List<String>> queryParams = Map.of("operation", List.of("cancelAmendment"));
asyncCounterpartPatch(
syncCounterpartPatch(
"/v2/bookings/%s".formatted(cbrr),
queryParams,
new ObjectMapper()
Expand All @@ -163,7 +159,7 @@ private void sendUpdatedBooking(JsonNode actionPrompt) {

var bookingData = persistentMap.load(cbrr);
((ObjectNode) bookingData).put(SERVICE_CONTRACT_REF, SERVICE_REF_PUT);
asyncCounterpartPut(
syncCounterpartPut(
"/v2/bookings/%s".formatted(cbrr),bookingData);

addOperatorLogEntry(
Expand All @@ -177,7 +173,7 @@ private void sendUpdatedConfirmedBooking(JsonNode actionPrompt) {

var bookingData = persistentMap.load(cbrr);
((ObjectNode) bookingData).put(SERVICE_CONTRACT_REF, SERVICE_REF_PUT);
asyncCounterpartPut(
syncCounterpartPut(
"/v2/bookings/%s".formatted(cbrr),bookingData);

addOperatorLogEntry(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.fasterxml.jackson.databind.JsonNode;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
Expand All @@ -12,14 +11,13 @@
import org.dcsa.conformance.core.scenario.ScenarioListBuilder;
import org.dcsa.conformance.core.state.JsonNodeMap;
import org.dcsa.conformance.core.traffic.ConformanceRequest;
import org.dcsa.conformance.core.traffic.ConformanceResponse;

public abstract class AbstractComponentFactory {
public abstract List<ConformanceParty> createParties(
PartyConfiguration[] partyConfigurations,
CounterpartConfiguration[] counterpartConfigurations,
JsonNodeMap persistentMap,
BiConsumer<ConformanceRequest, Consumer<ConformanceResponse>> asyncWebClient,
Consumer<ConformanceRequest> asyncWebClient,
Map<String, ? extends Collection<String>> orchestratorAuthHeader);

public abstract ScenarioListBuilder<?> createScenarioListBuilder(
Expand Down
Loading

0 comments on commit bd2c8ca

Please sign in to comment.