Class AbstractPaymentReversalFulfillmentStatusChangeListener
- java.lang.Object
-
- com.broadleafcommerce.orderoperation.service.messaging.fulfillments.AbstractPaymentReversalFulfillmentStatusChangeListener
-
- Direct Known Subclasses:
PaymentReversalFulfillmentCancelledListener
,PaymentReversalFulfillmentFulfilledListener
public abstract class AbstractPaymentReversalFulfillmentStatusChangeListener extends Object
Supports listeners which reverse remaining non-captured payments whenever all fulfillments are in a final state.
-
-
Field Summary
Fields Modifier and Type Field Description protected static Set<String>
STATUSES_ELIGIBLE_FOR_CAPTURE
-
Constructor Summary
Constructors Constructor Description AbstractPaymentReversalFulfillmentStatusChangeListener(com.broadleafcommerce.common.messaging.service.IdempotentMessageConsumptionService idempotentMessageService, PaymentAuthReversalService paymentAuthReversalService, OrderProvider<com.broadleafcommerce.order.client.domain.Order> orderProvider, FulfillmentProvider<com.broadleafcommerce.order.client.domain.OrderFulfillment> fulfillmentProvider, ResourceLockProvider resourceLockProvider)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected boolean
cannotBeCaptured(String fulfillmentStatus)
protected boolean
entireOrderDoneCapturing(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Determines if this order will not have any more captures applied against its payments.protected FulfillmentProvider<com.broadleafcommerce.order.client.domain.OrderFulfillment>
getFulfillmentProvider()
protected com.broadleafcommerce.common.messaging.service.IdempotentMessageConsumptionService
getIdempotentMessageService()
protected com.broadleafcommerce.order.client.domain.Order
getOrder(@NonNull FulfillmentStatusChangeEvent event)
Get theOrder
in theevent
, refreshing in case any payment changes have occurred on the order.protected OrderProvider<com.broadleafcommerce.order.client.domain.Order>
getOrderProvider()
protected PaymentAuthReversalService
getPaymentAuthReversalService()
protected ResourceLockProvider
getResourceLockProvider()
abstract void
listen(org.springframework.messaging.Message<FulfillmentStatusChangeEvent> message)
Implementations should override this method to add aStreamListener
to listen on a channel forFulfillmentStatusChangeEvent
, and invokeprocessEvent(Message)
through theidempotentMessageService
.protected void
processEvent(@NonNull org.springframework.messaging.Message<FulfillmentStatusChangeEvent> message)
Initial entry point for handling aFulfillmentStatusChangeEvent
message, to be invoked fromlisten(Message)
through theidempotentMessageService
.protected abstract void
processEventInternal(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
This should be extended to invoke the business logic for reversing non-captured payments.protected boolean
reverseRemainingOrderAuthPaymentsIfNeeded(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
If the entire order is guaranteed to no longer have any more fulfillments to capture, then reverse any remaining authorized but not captured payments on the order.
-
-
-
Constructor Detail
-
AbstractPaymentReversalFulfillmentStatusChangeListener
public AbstractPaymentReversalFulfillmentStatusChangeListener(com.broadleafcommerce.common.messaging.service.IdempotentMessageConsumptionService idempotentMessageService, PaymentAuthReversalService paymentAuthReversalService, OrderProvider<com.broadleafcommerce.order.client.domain.Order> orderProvider, FulfillmentProvider<com.broadleafcommerce.order.client.domain.OrderFulfillment> fulfillmentProvider, ResourceLockProvider resourceLockProvider)
-
-
Method Detail
-
listen
public abstract void listen(org.springframework.messaging.Message<FulfillmentStatusChangeEvent> message)
Implementations should override this method to add aStreamListener
to listen on a channel forFulfillmentStatusChangeEvent
, and invokeprocessEvent(Message)
through theidempotentMessageService
.- Parameters:
message
- the fulfillment status change message received
-
processEvent
protected void processEvent(@NonNull @NonNull org.springframework.messaging.Message<FulfillmentStatusChangeEvent> message)
Initial entry point for handling aFulfillmentStatusChangeEvent
message, to be invoked fromlisten(Message)
through theidempotentMessageService
. This handles locking on the order to avoid payment concurrency issues and hydrating the latest order and fulfillment data, and then delegates toprocessEventInternal(OrderFulfillment, Order, String, ContextInfo)
.- Parameters:
message
- the fulfillment status change message received
-
getOrder
protected com.broadleafcommerce.order.client.domain.Order getOrder(@NonNull @NonNull FulfillmentStatusChangeEvent event)
Get theOrder
in theevent
, refreshing in case any payment changes have occurred on the order.- Parameters:
event
- the event of the fulfillment being fulfilled- Returns:
- the retrieved order based on the event
-
processEventInternal
protected abstract void processEventInternal(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, String previousFulfillmentStatus, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
This should be extended to invoke the business logic for reversing non-captured payments. This will be utilized fromprocessEvent(Message)
which will have already handled locking and hydrating the order and fulfillment.- Parameters:
fulfillment
- the fulfillment which changed statusorder
- the order containing the fulfillmentpreviousFulfillmentStatus
- the original status of the fulfillment before the changecontextInfo
- context information surrounding sandboxing and multitenant state
-
reverseRemainingOrderAuthPaymentsIfNeeded
protected boolean reverseRemainingOrderAuthPaymentsIfNeeded(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
If the entire order is guaranteed to no longer have any more fulfillments to capture, then reverse any remaining authorized but not captured payments on the order.- Parameters:
fulfillment
- the fulfillment which changed statusorder
- the order containing the fulfillmentcontextInfo
- context information surrounding sandboxing and multitenant state- Returns:
- true if any order authorized payments were reversed, else false
-
entireOrderDoneCapturing
protected boolean entireOrderDoneCapturing(com.broadleafcommerce.order.client.domain.OrderFulfillment fulfillment, com.broadleafcommerce.order.client.domain.Order order, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
Determines if this order will not have any more captures applied against its payments.- Parameters:
fulfillment
- the fulfillment which was cancelledorder
- the order to check if it could be captured againcontextInfo
- context information surrounding sandboxing and multitenant state- Returns:
- whether this order will not have any more payment captures
-
cannotBeCaptured
protected boolean cannotBeCaptured(String fulfillmentStatus)
-
getIdempotentMessageService
protected com.broadleafcommerce.common.messaging.service.IdempotentMessageConsumptionService getIdempotentMessageService()
-
getPaymentAuthReversalService
protected PaymentAuthReversalService getPaymentAuthReversalService()
-
getOrderProvider
protected OrderProvider<com.broadleafcommerce.order.client.domain.Order> getOrderProvider()
-
getFulfillmentProvider
protected FulfillmentProvider<com.broadleafcommerce.order.client.domain.OrderFulfillment> getFulfillmentProvider()
-
getResourceLockProvider
protected ResourceLockProvider getResourceLockProvider()
-
-