package cart; import common.contexts.UserContext; import common.utils.PriceFormatter; import io.sphere.sdk.carts.LineItem; import io.sphere.sdk.models.Base; import io.sphere.sdk.productdiscounts.DiscountedPrice; import io.sphere.sdk.products.ProductVariant; import io.sphere.sdk.products.attributes.AttributeAccess; import javax.money.MonetaryAmount; import java.util.Optional; public class CartItem extends Base { private String nameHeadline; private String nameSubline; private String sku; private String color; private String size; private String priceOld; private String price; private String totalPrice; private String imageUrl; private Long quantity; private String lineItemId; public CartItem() { } public static CartItem of(final LineItem lineItem, final UserContext userContext) { final CartItem cartItem = new CartItem(); cartItem.setNameHeadline(lineItem.getName().find(userContext.locales()).orElse("")); cartItem.setNameSubline(""); final ProductVariant productVariant = lineItem.getVariant(); cartItem.setSku(productVariant.getSku()); cartItem.setColor(productVariant.getAttribute("color").getValue(AttributeAccess.ofLocalizedEnumValue()).getLabel().get(userContext.locales())); cartItem.setSize(productVariant.getAttribute("size").getValue(AttributeAccess.ofString())); final PriceFormatter priceFormatter = PriceFormatter.of(userContext.locale()); cartItem.setPrice(priceFormatter.format(lineItem.getPrice().getValue())); cartItem.setQuantity(lineItem.getQuantity()); final MonetaryAmount monetaryAmount = Optional.ofNullable(lineItem.getPrice().getDiscounted()) .map(DiscountedPrice::getValue) .orElseGet(() -> lineItem.getPrice().getValue()); cartItem.setTotalPrice(priceFormatter.format(monetaryAmount.multiply(lineItem.getQuantity()))); final String imageUrl = productVariant.getImages().stream().findFirst().map(i -> i.getUrl()).orElse(""); cartItem.setImageUrl(imageUrl); cartItem.setLineItemId(lineItem.getId()); return cartItem; } public String getNameHeadline() { return nameHeadline; } public void setNameHeadline(final String nameHeadline) { this.nameHeadline = nameHeadline; } public String getNameSubline() { return nameSubline; } public void setNameSubline(final String nameSubline) { this.nameSubline = nameSubline; } public String getSku() { return sku; } public void setSku(final String sku) { this.sku = sku; } public String getColor() { return color; } public void setColor(final String color) { this.color = color; } public String getSize() { return size; } public void setSize(final String size) { this.size = size; } public String getPriceOld() { return priceOld; } public void setPriceOld(final String priceOld) { this.priceOld = priceOld; } public String getPrice() { return price; } public void setPrice(final String price) { this.price = price; } public String getTotalPrice() { return totalPrice; } public void setTotalPrice(final String totalPrice) { this.totalPrice = totalPrice; } public Long getQuantity() { return quantity; } public void setQuantity(final Long quantity) { this.quantity = quantity; } public String getImageUrl() { return imageUrl; } public void setImageUrl(final String imageUrl) { this.imageUrl = imageUrl; } public String getLineItemId() { return lineItemId; } public void setLineItemId(final String lineItemId) { this.lineItemId = lineItemId; } }