/* * 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.sales.readmodel.impl; import static com.google.common.collect.Lists.transform; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import pl.com.bottega.cqrs.query.PaginatedResult; import pl.com.bottega.ddd.annotations.domain.FinderImpl; import pl.com.bottega.ecommerce.canonicalmodel.publishedlanguage.AggregateId; import pl.com.bottega.ecommerce.sales.domain.purchase.Purchase; import pl.com.bottega.ecommerce.sales.domain.reservation.Reservation; import pl.com.bottega.ecommerce.sales.domain.reservation.ReservedProduct; import pl.com.bottega.ecommerce.sales.readmodel.orders.OrderDto; import pl.com.bottega.ecommerce.sales.readmodel.orders.OrderFinder; import pl.com.bottega.ecommerce.sales.readmodel.orders.OrderQuery; import pl.com.bottega.ecommerce.sales.readmodel.orders.OrderStatus; import pl.com.bottega.ecommerce.sales.readmodel.orders.OrderedProductDto; import com.google.common.base.Function; @FinderImpl public class JpaOrderFinder implements OrderFinder { @PersistenceContext private EntityManager entityManager; @Override public OrderDto find(AggregateId orderId) { Reservation reservation = entityManager.find(Reservation.class, orderId); Purchase purchase = entityManager.find(Purchase.class, orderId); return toOrderDto(reservation, purchase); } private OrderDto toOrderDto(Reservation reservation, Purchase purchase) { OrderDto dto = new OrderDto(); dto.setOrderId(reservation.getAggregateId()); List<ReservedProduct> reservedProducts = reservation.getReservedProducts(); dto.setOrderedProducts(new ArrayList<OrderedProductDto>(transform(reservedProducts, reservedProductToOrderedProductDto()))); if (purchase != null) { dto.setStatus(OrderStatus.CONFIRMED); // TODO CHECK PAYMENT! } else { dto.setStatus(OrderStatus.NEW); } return dto; } private static Function<ReservedProduct, OrderedProductDto> reservedProductToOrderedProductDto() { return new Function<ReservedProduct, OrderedProductDto>() { public OrderedProductDto apply(ReservedProduct product) { OrderedProductDto dto = new OrderedProductDto(); dto.setOfferId(product.getProductId()); return dto; } }; } @Override public PaginatedResult<OrderDto> query(OrderQuery orderQuery) { return null; } }