/* * Copyright 2011-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package pl.com.bottega.ecommerce.businessprocess.ordertracking; import javax.inject.Inject; import pl.com.bottega.ecommerce.canonicalmodel.events.OrderSubmittedEvent; import pl.com.bottega.ecommerce.sales.readmodel.orders.OrderFinder; import pl.com.bottega.ecommerce.shipping.domain.events.OrderShippedEvent; import pl.com.bottega.ecommerce.shipping.domain.events.ShipmentDeliveredEvent; import pl.com.bottega.ecommerce.system.saga.SagaInstance; import pl.com.bottega.ecommerce.system.saga.annotations.Saga; import pl.com.bottega.ecommerce.system.saga.annotations.SagaAction; @Saga public class OrderShipmentStatusTrackerSaga extends SagaInstance<OrderShipmentStatusTrackerData> { @Inject private OrderFinder orderFinder; @SagaAction public void handleOrderCreated(OrderSubmittedEvent event) { data.setOrderId(event.getOrderId()); completeIfPossible(); } @SagaAction public void orderShipped(OrderShippedEvent event) { data.setOrderId(event.getOrderId()); data.setShipmentId(event.getShipmentId()); completeIfPossible(); } @SagaAction public void shipmentDelivered(ShipmentDeliveredEvent event) { data.setShipmentId(event.getShipmentId()); data.setShipmentReceived(true); completeIfPossible(); } private void completeIfPossible() { if (data.getOrderId() != null && data.getShipmentId() != null && data.getShipmentReceived()) { //TODO move process forward, ex call service or publish event markAsCompleted(); } } }