protected void addDeliveryMethod(
      final AbstractOrderModel source, final AbstractOrderData prototype) {
    final DeliveryModeModel deliveryMode = source.getDeliveryMode();
    if (deliveryMode != null) {
      // unnecessary if?
      if (deliveryMode instanceof ZoneDeliveryModeModel) {
        final ZoneDeliveryModeData zoneDeliveryModeData =
            getZoneDeliveryModeConverter().convert((ZoneDeliveryModeModel) deliveryMode);

        final PriceValue deliveryCost =
            getDeliveryService()
                .getDeliveryCostForDeliveryModeAndAbstractOrder(deliveryMode, source);
        if (deliveryCost != null) {
          zoneDeliveryModeData.setDeliveryCost(
              getPriceDataFactory()
                  .create(
                      PriceDataType.BUY,
                      BigDecimal.valueOf(deliveryCost.getValue()),
                      deliveryCost.getCurrencyIso()));
        }
        prototype.setDeliveryMode(zoneDeliveryModeData);
      } else {
        final DeliveryModeData deliveryModeData = getDeliveryModeConverter().convert(deliveryMode);

        final PriceValue deliveryCost =
            getDeliveryService()
                .getDeliveryCostForDeliveryModeAndAbstractOrder(deliveryMode, source);
        if (deliveryCost != null) {
          deliveryModeData.setDeliveryCost(
              getPriceDataFactory()
                  .create(
                      PriceDataType.BUY,
                      BigDecimal.valueOf(deliveryCost.getValue()),
                      deliveryCost.getCurrencyIso()));
        }
        prototype.setDeliveryMode(deliveryModeData);
      }
    }
  }