inklabs/kommerce-core

View on GitHub
src/EntityDTO/Builder/DTOBuilderFactory.php

Summary

Maintainability
D
1 day
Test Coverage
<?php
namespace inklabs\kommerce\EntityDTO\Builder;

use inklabs\kommerce\Entity\AbstractCartPriceRuleItem;
use inklabs\kommerce\Entity\AbstractPayment;
use inklabs\kommerce\Entity\Address;
use inklabs\kommerce\Entity\Attachment;
use inklabs\kommerce\Entity\Attribute;
use inklabs\kommerce\Entity\AttributeChoiceType;
use inklabs\kommerce\Entity\AttributeValue;
use inklabs\kommerce\Entity\Cart;
use inklabs\kommerce\Entity\CartItem;
use inklabs\kommerce\Entity\CartItemOptionProduct;
use inklabs\kommerce\Entity\CartItemOptionValue;
use inklabs\kommerce\Entity\CartItemTextOptionValue;
use inklabs\kommerce\Entity\CartPriceRule;
use inklabs\kommerce\Entity\CartPriceRuleDiscount;
use inklabs\kommerce\Entity\CartPriceRuleProductItem;
use inklabs\kommerce\Entity\CartPriceRuleTagItem;
use inklabs\kommerce\Entity\CartTotal;
use inklabs\kommerce\Entity\CashPayment;
use inklabs\kommerce\Entity\CatalogPromotion;
use inklabs\kommerce\Entity\CheckPayment;
use inklabs\kommerce\Entity\Configuration;
use inklabs\kommerce\Entity\Coupon;
use inklabs\kommerce\Entity\CreditCard;
use inklabs\kommerce\Entity\CreditPayment;
use inklabs\kommerce\Entity\DeliveryMethodType;
use inklabs\kommerce\Entity\Image;
use inklabs\kommerce\Entity\InventoryLocation;
use inklabs\kommerce\Entity\InventoryTransaction;
use inklabs\kommerce\Entity\InventoryTransactionType;
use inklabs\kommerce\Entity\Money;
use inklabs\kommerce\Entity\Option;
use inklabs\kommerce\Entity\OptionProduct;
use inklabs\kommerce\Entity\OptionType;
use inklabs\kommerce\Entity\OptionValue;
use inklabs\kommerce\Entity\Order;
use inklabs\kommerce\Entity\OrderAddress;
use inklabs\kommerce\Entity\OrderItem;
use inklabs\kommerce\Entity\OrderItemOptionProduct;
use inklabs\kommerce\Entity\OrderItemOptionValue;
use inklabs\kommerce\Entity\OrderItemTextOptionValue;
use inklabs\kommerce\Entity\OrderStatusType;
use inklabs\kommerce\Entity\Pagination;
use inklabs\kommerce\Entity\Parcel;
use inklabs\kommerce\Entity\Point;
use inklabs\kommerce\Entity\Price;
use inklabs\kommerce\Entity\Product;
use inklabs\kommerce\Entity\ProductAttribute;
use inklabs\kommerce\Entity\ProductQuantityDiscount;
use inklabs\kommerce\Entity\PromotionType;
use inklabs\kommerce\Entity\Shipment;
use inklabs\kommerce\Entity\ShipmentCarrierType;
use inklabs\kommerce\Entity\ShipmentComment;
use inklabs\kommerce\Entity\ShipmentItem;
use inklabs\kommerce\Entity\ShipmentLabel;
use inklabs\kommerce\Entity\ShipmentRate;
use inklabs\kommerce\Entity\ShipmentTracker;
use inklabs\kommerce\Entity\Tag;
use inklabs\kommerce\Entity\TaxRate;
use inklabs\kommerce\Entity\TextOption;
use inklabs\kommerce\Entity\TextOptionType;
use inklabs\kommerce\Entity\User;
use inklabs\kommerce\Entity\UserLogin;
use inklabs\kommerce\Entity\UserLoginResultType;
use inklabs\kommerce\Entity\UserRole;
use inklabs\kommerce\Entity\UserRoleType;
use inklabs\kommerce\Entity\UserStatusType;
use inklabs\kommerce\Entity\UserToken;
use inklabs\kommerce\Entity\UserTokenType;
use inklabs\kommerce\Entity\Warehouse;
use inklabs\kommerce\Exception\DTOBuilderException;
use inklabs\kommerce\Lib\PaymentGateway\ChargeResponse;

class DTOBuilderFactory implements DTOBuilderFactoryInterface
{
    public function getAddressDTOBuilder(Address $address)
    {
        return new AddressDTOBuilder($address, $this);
    }

    public function getAttachmentDTOBuilder(Attachment $attachment)
    {
        return new AttachmentDTOBuilder($attachment, $this);
    }

    public function getAttributeDTOBuilder(Attribute $attribute)
    {
        return new AttributeDTOBuilder($attribute, $this);
    }

    public function getAttributeChoiceTypeDTOBuilder(AttributeChoiceType $attributeChoiceType)
    {
        return new AttributeChoiceTypeDTOBuilder($attributeChoiceType, $this);
    }

    public function getAttributeValueDTOBuilder(AttributeValue $attributeValue)
    {
        return new AttributeValueDTOBuilder($attributeValue, $this);
    }

    public function getCartDTOBuilder(Cart $cart)
    {
        return new CartDTOBuilder($cart, $this);
    }

    public function getCartItemDTOBuilder(CartItem $cartItem)
    {
        return new CartItemDTOBuilder($cartItem, $this);
    }

    public function getCartItemOptionProductDTOBuilder(CartItemOptionProduct $cartItemOptionProduct)
    {
        return new CartItemOptionProductDTOBuilder($cartItemOptionProduct, $this);
    }

    public function getCartItemOptionValueDTOBuilder(CartItemOptionValue $cartItemOptionValue)
    {
        return new CartItemOptionValueDTOBuilder($cartItemOptionValue, $this);
    }

    public function getCartItemTextOptionValueDTOBuilder(CartItemTextOptionValue $cartItemTextOptionValue)
    {
        return new CartItemTextOptionValueDTOBuilder($cartItemTextOptionValue, $this);
    }

    public function getCartPriceRuleDTOBuilder(CartPriceRule $cartPriceRule)
    {
        return new CartPriceRuleDTOBuilder($cartPriceRule, $this);
    }

    public function getCartPriceRuleDiscountDTOBuilder(CartPriceRuleDiscount $cartPriceRuleDiscount)
    {
        return new CartPriceRuleDiscountDTOBuilder($cartPriceRuleDiscount, $this);
    }

    public function getCartPriceRuleItemDTOBuilder(AbstractCartPriceRuleItem $cartPriceRuleItem)
    {
        switch (true) {
            case $cartPriceRuleItem instanceof CartPriceRuleTagItem:
                return $this->getCartPriceRuleTagItemDTOBuilder($cartPriceRuleItem);
                break;

            case $cartPriceRuleItem instanceof CartPriceRuleProductItem:
                return $this->getCartPriceRuleProductItemDTOBuilder($cartPriceRuleItem);
                break;
        }

        throw DTOBuilderException::invalidCartPriceRuleItem();
    }

    public function getCartPriceRuleProductItemDTOBuilder(CartPriceRuleProductItem $cartPriceRuleProductItem)
    {
        return new CartPriceRuleProductItemDTOBuilder($cartPriceRuleProductItem, $this);
    }

    public function getCartPriceRuleTagItemDTOBuilder(CartPriceRuleTagItem $cartPriceRuleTagItem)
    {
        return new CartPriceRuleTagItemDTOBuilder($cartPriceRuleTagItem, $this);
    }

    public function getCartTotalDTOBuilder(CartTotal $cartTotal)
    {
        return new CartTotalDTOBuilder($cartTotal, $this);
    }

    public function getCashPaymentDTOBuilder(CashPayment $cashPayment)
    {
        return new CashPaymentDTOBuilder($cashPayment);
    }

    public function getCatalogPromotionDTOBuilder(CatalogPromotion $catalogPromotion)
    {
        return new CatalogPromotionDTOBuilder($catalogPromotion, $this);
    }

    public function getChargeResponseDTOBuilder(ChargeResponse $chargeResponse)
    {
        return new ChargeResponseDTOBuilder($chargeResponse);
    }

    public function getCheckPaymentDTOBuilder(CheckPayment $checkPayment)
    {
        return new CheckPaymentDTOBuilder($checkPayment);
    }

    public function getConfigurationDTOBuilder(Configuration $configuration)
    {
        return new ConfigurationDTOBuilder($configuration);
    }

    public function getCouponDTOBuilder(Coupon $coupon)
    {
        return new CouponDTOBuilder($coupon, $this);
    }

    public function getCreditCardDTOBuilder(CreditCard $creditCard)
    {
        return new CreditCardDTOBuilder($creditCard);
    }

    public function getCreditPaymentDTOBuilder(CreditPayment $creditPayment)
    {
        return new CreditPaymentDTOBuilder($creditPayment, $this);
    }

    public function getDeliveryMethodTypeDTOBuilder(DeliveryMethodType $deliveryMethodType)
    {
        return new DeliveryMethodTypeDTOBuilder($deliveryMethodType);
    }

    public function getImageDTOBuilder(Image $image)
    {
        return new ImageDTOBuilder($image, $this);
    }

    public function getInventoryLocationDTOBuilder(InventoryLocation $inventoryLocation)
    {
        return new InventoryLocationDTOBuilder($inventoryLocation, $this);
    }

    public function getInventoryTransactionDTOBuilder(InventoryTransaction $inventoryTransaction)
    {
        return new InventoryTransactionDTOBuilder($inventoryTransaction, $this);
    }

    public function getInventoryTransactionTypeDTOBuilder(InventoryTransactionType $inventoryTransactionType)
    {
        return new InventoryTransactionTypeDTOBuilder($inventoryTransactionType);
    }

    public function getMoneyDTOBuilder(Money $money)
    {
        return new MoneyDTOBuilder($money);
    }

    public function getOptionDTOBuilder(Option $option)
    {
        return new OptionDTOBuilder($option, $this);
    }

    public function getOrderDTOBuilder(Order $order)
    {
        return new OrderDTOBuilder($order, $this);
    }

    public function getOrderAddressDTOBuilder(OrderAddress $orderAddress)
    {
        return new OrderAddressDTOBuilder($orderAddress, $this);
    }

    public function getOptionProductDTOBuilder(OptionProduct $optionProduct)
    {
        return new OptionProductDTOBuilder($optionProduct, $this);
    }

    public function getOptionTypeDTOBuilder(OptionType $optionType)
    {
        return new OptionTypeDTOBuilder($optionType);
    }

    public function getOptionValueDTOBuilder(OptionValue $optionValue)
    {
        return new OptionValueDTOBuilder($optionValue, $this);
    }

    public function getOrderItemDTOBuilder(OrderItem $orderItem)
    {
        return new OrderItemDTOBuilder($orderItem, $this);
    }

    public function getOrderItemOptionProductDTOBuilder(OrderItemOptionProduct $orderItemOptionProduct)
    {
        return new OrderItemOptionProductDTOBuilder($orderItemOptionProduct, $this);
    }

    public function getOrderItemOptionValueDTOBuilder(OrderItemOptionValue $orderItemOptionValue)
    {
        return new OrderItemOptionValueDTOBuilder($orderItemOptionValue, $this);
    }

    public function getOrderItemTextOptionValueDTOBuilder(OrderItemTextOptionValue $orderItemTextOptionValue)
    {
        return new OrderItemTextOptionValueDTOBuilder($orderItemTextOptionValue, $this);
    }

    public function getOrderStatusTypeDTOBuilder(OrderStatusType $orderStatusType)
    {
        return new OrderStatusTypeDTOBuilder($orderStatusType);
    }

    public function getPaginationDTOBuilder(Pagination $pagination)
    {
        return new PaginationDTOBuilder($pagination, $this);
    }

    public function getParcelDTOBuilder(Parcel $parcel)
    {
        return new ParcelDTOBuilder($parcel, $this);
    }

    public function getPaymentDTOBuilder(AbstractPayment $payment)
    {
        switch (true) {
            case $payment instanceof CashPayment:
                return $this->getCashPaymentDTOBuilder($payment);
                break;

            case $payment instanceof CreditPayment:
                return $this->getCreditPaymentDTOBuilder($payment);
                break;

            case $payment instanceof CheckPayment:
                return $this->getCheckPaymentDTOBuilder($payment);
                break;
        }

        throw DTOBuilderException::invalidPayment();
    }

    public function getPointDTOBuilder(Point $point)
    {
        return new PointDTOBuilder($point);
    }

    public function getPriceDTOBuilder(Price $price)
    {
        return new PriceDTOBuilder($price, $this);
    }

    public function getPromotionTypeDTOBuilder(PromotionType $promotionType)
    {
        return new PromotionTypeDTOBuilder($promotionType);
    }

    public function getProductDTOBuilder(Product $product)
    {
        return new ProductDTOBuilder($product, $this);
    }

    public function getProductAttributeDTOBuilder(ProductAttribute $productAttribute)
    {
        return new ProductAttributeDTOBuilder($productAttribute, $this);
    }

    public function getProductQuantityDiscountDTOBuilder(ProductQuantityDiscount $productQuantityDiscount)
    {
        return new ProductQuantityDiscountDTOBuilder($productQuantityDiscount, $this);
    }

    public function getShipmentDTOBuilder(Shipment $shipment)
    {
        return new ShipmentDTOBuilder($shipment, $this);
    }

    public function getShipmentCarrierTypeDTOBuilder(ShipmentCarrierType $shipmentCarrierType)
    {
        return new ShipmentCarrierTypeDTOBuilder($shipmentCarrierType);
    }

    public function getShipmentCommentDTOBuilder(ShipmentComment $shipmentComment)
    {
        return new ShipmentCommentDTOBuilder($shipmentComment);
    }

    public function getShipmentItemDTOBuilder(ShipmentItem $shipmentItem)
    {
        return new ShipmentItemDTOBuilder($shipmentItem, $this);
    }

    public function getShipmentLabelDTOBuilder(ShipmentLabel $shipmentLabel)
    {
        return new ShipmentLabelDTOBuilder($shipmentLabel);
    }

    public function getShipmentRateDTOBuilder(ShipmentRate $shipmentRate)
    {
        return new ShipmentRateDTOBuilder($shipmentRate, $this);
    }

    public function getShipmentTrackerDTOBuilder(ShipmentTracker $shipmentTracker)
    {
        return new ShipmentTrackerDTOBuilder($shipmentTracker, $this);
    }

    public function getTagDTOBuilder(Tag $tag)
    {
        return new TagDTOBuilder($tag, $this);
    }

    public function getTaxRateDTOBuilder(TaxRate $taxRate)
    {
        return new TaxRateDTOBuilder($taxRate);
    }

    public function getTextOptionDTOBuilder(TextOption $textOption)
    {
        return new TextOptionDTOBuilder($textOption, $this);
    }

    public function getTextOptionTypeDTOBuilder(TextOptionType $textOptionType)
    {
        return new TextOptionTypeDTOBuilder($textOptionType);
    }

    public function getUserDTOBuilder(User $user)
    {
        return new UserDTOBuilder($user, $this);
    }

    public function getUserLoginDTOBuilder(UserLogin $userLogin)
    {
        return new UserLoginDTOBuilder($userLogin, $this);
    }

    public function getUserLoginResultTypeDTOBuilder(UserLoginResultType $userLoginResultType)
    {
        return new UserLoginResultTypeDTOBuilder($userLoginResultType);
    }

    public function getUserRoleDTOBuilder(UserRole $userRole)
    {
        return new UserRoleDTOBuilder($userRole, $this);
    }

    public function getUserRoleTypeDTOBuilder(UserRoleType $userRoleType)
    {
        return new UserRoleTypeDTOBuilder($userRoleType, $this);
    }

    public function getUserStatusTypeDTOBuilder(UserStatusType $userStatusType)
    {
        return new UserStatusTypeDTOBuilder($userStatusType);
    }

    public function getUserTokenDTOBuilder(UserToken $userToken)
    {
        return new UserTokenDTOBuilder($userToken, $this);
    }

    public function getUserTokenTypeDTOBuilder(UserTokenType $userTokenType)
    {
        return new UserTokenTypeDTOBuilder($userTokenType);
    }

    public function getWarehouseDTOBuilder(Warehouse $warehouse)
    {
        return new WarehouseDTOBuilder($warehouse, $this);
    }
}