Package com.google.checkout.sdk.commands

Source Code of com.google.checkout.sdk.commands.OrderCommandsImpl

/*******************************************************************************
* Copyright (C) 2009 Google Inc.
*
* 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 com.google.checkout.sdk.commands;

import com.google.checkout.sdk.commands.EnvironmentInterface.CommandType;
import com.google.checkout.sdk.domain.ArchiveOrderRequest;
import com.google.checkout.sdk.domain.AuthorizeOrderRequest;
import com.google.checkout.sdk.domain.BackorderItemsRequest;
import com.google.checkout.sdk.domain.CancelItemsRequest;
import com.google.checkout.sdk.domain.CancelOrderRequest;
import com.google.checkout.sdk.domain.ChargeAmountNotification;
import com.google.checkout.sdk.domain.ChargeAndShipOrderRequest;
import com.google.checkout.sdk.domain.ItemId;
import com.google.checkout.sdk.domain.ItemShippingInformation;
import com.google.checkout.sdk.domain.OrderStateChangeNotification;
import com.google.checkout.sdk.domain.OrderSummary;
import com.google.checkout.sdk.domain.RefundAmountNotification;
import com.google.checkout.sdk.domain.RefundOrderRequest;
import com.google.checkout.sdk.domain.RequestReceivedResponse;
import com.google.checkout.sdk.domain.ReturnItemsRequest;
import com.google.checkout.sdk.domain.ShipItemsRequest;
import com.google.checkout.sdk.domain.UnarchiveOrderRequest;
import com.google.checkout.sdk.util.Utils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.xml.bind.JAXBElement;

/**
* Implements {@link OrderCommands}.
*
*/
class OrderCommandsImpl implements OrderCommands {

  private final ApiContext apiContext;
  private final String googleOrderNumber;
  private final Boolean sendEmails;

  public OrderCommandsImpl(ApiContext apiContext, String googleOrderNumber) {
    this(apiContext, googleOrderNumber, null);
  }

  public OrderCommandsImpl(ApiContext apiContext,
      String googleOrderNumber, Boolean sendEmails) {
    this.apiContext = apiContext;
    this.googleOrderNumber = googleOrderNumber;
    this.sendEmails = sendEmails;
  }

  @Override
  public OrderStateChangeNotification cancelOrder(
      String reason) throws CheckoutException {
    CancelOrderRequest cancelOrder = new CancelOrderRequest();
    cancelOrder.setGoogleOrderNumber(googleOrderNumber);
    cancelOrder.setReason(reason);
    return postCommand(cancelOrder.toJAXB()).getOrderStateChangeNotification();
  }

  @Override
  public RefundAmountNotification refundOrder(
      String reason) throws CheckoutException {
    RefundOrderRequest refundOrderRequest = new RefundOrderRequest();
    refundOrderRequest.setGoogleOrderNumber(googleOrderNumber);
    refundOrderRequest.setReason(reason);
    return postCommand(refundOrderRequest.toJAXB()).getRefundAmountNotification();
  }

  @Override
  public RefundAmountNotification refundOrder(
      String reason, double refundAmount) throws CheckoutException {
    return refundOrder(reason, BigDecimal.valueOf(refundAmount));
  }

  @Override
  public RefundAmountNotification refundOrder(
      String reason, BigDecimal refundAmount) throws CheckoutException {
    RefundOrderRequest refundOrderRequest = new RefundOrderRequest();
    refundOrderRequest.setGoogleOrderNumber(googleOrderNumber);
    refundOrderRequest.setAmount(apiContext.makeMoney(refundAmount));
    refundOrderRequest.setReason(reason);
    return postCommand(refundOrderRequest.toJAXB()).getRefundAmountNotification();
  }

  @Override
  public void authorizeOrder()
      throws CheckoutException {
    AuthorizeOrderRequest authorizeOrderRequest = new AuthorizeOrderRequest();
    authorizeOrderRequest.setGoogleOrderNumber(googleOrderNumber);
    postCommand(authorizeOrderRequest.toJAXB());
  }

  @Override
  public ItemCommands itemCommands(List<String> itemIds) throws CheckoutException {
    List<ItemId> copyIds = new ArrayList<ItemId>();
    for (String s : itemIds) {
      copyIds.add(Utils.makeItemId(s));
    }
    return new ItemCommandsImpl(this, copyIds);
  }

  @Override
  public ItemCommands itemCommands(String... itemIds) throws CheckoutException {
    List<ItemId> copyIds = new ArrayList<ItemId>();
    for (String s : itemIds) {
      copyIds.add(Utils.makeItemId(s));
    }
    return new ItemCommandsImpl(this, copyIds);
  }

  @Override
  public ItemCommands itemCommands(ItemId... itemIds) throws CheckoutException {
    List<ItemId> copyIds = new ArrayList<ItemId>();
    for (ItemId s : itemIds) {
      copyIds.add(Utils.makeItemId(s.getMerchantItemId()));
    }
    return new ItemCommandsImpl(this, copyIds);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder() throws CheckoutException {
    return chargeAndShipOrder(null, (TrackingDataBuilder)null);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(
      double amount) throws CheckoutException {
    return chargeAndShipOrder(
        BigDecimal.valueOf(amount), (TrackingDataBuilder)null);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(
      BigDecimal bigDecimal) throws CheckoutException {
    return chargeAndShipOrder(bigDecimal, (TrackingDataBuilder)null);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(
      TrackingDataBuilder shipping) throws CheckoutException {
    return chargeAndShipOrder(null, shipping);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(
      double amount, TrackingDataBuilder shipping) throws CheckoutException {
    return chargeAndShipOrder(BigDecimal.valueOf(amount), shipping);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(
      BigDecimal bigDecimal, TrackingDataBuilder shipping) throws CheckoutException {
    return chargeAndShipOrder(bigDecimal, null, shipping);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(
      ItemShippingInformationBuilder shipping) throws CheckoutException {
    return chargeAndShipOrder(null, shipping);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(
      double amount, ItemShippingInformationBuilder shipping) throws CheckoutException {
    return chargeAndShipOrder(BigDecimal.valueOf(amount), shipping);
  }

  @Override
  public ChargeAmountNotification chargeAndShipOrder(BigDecimal amount,
      ItemShippingInformationBuilder shipping) throws CheckoutException {
    return chargeAndShipOrder(amount, shipping, null);
  }

  private ChargeAmountNotification chargeAndShipOrder(
      BigDecimal amount, ItemShippingInformationBuilder itemShipping, TrackingDataBuilder orderShipping)
        throws CheckoutException {
    ChargeAndShipOrderRequest chargeShipRequest = new ChargeAndShipOrderRequest();
    chargeShipRequest.setGoogleOrderNumber(googleOrderNumber);
    chargeShipRequest.setSendEmail(sendEmails);
    if (amount != null) {
      chargeShipRequest.setAmount(apiContext.makeMoney(amount));
    }
    if (itemShipping != null) {
      ChargeAndShipOrderRequest.ItemShippingInformationList itemShippingList =
          new ChargeAndShipOrderRequest.ItemShippingInformationList();
      itemShippingList.getItemShippingInformation().addAll(itemShipping.build());
      chargeShipRequest.setItemShippingInformationList(itemShippingList);
    }
    if (orderShipping != null) {
      ChargeAndShipOrderRequest.TrackingDataList orderShippingList =
          new ChargeAndShipOrderRequest.TrackingDataList();
      orderShippingList.getTrackingData().addAll(orderShipping.build());
      chargeShipRequest.setTrackingDataList(orderShippingList);
    }
    return postCommand(chargeShipRequest.toJAXB()).getChargeAmountNotification();
  }

  @Override
  public void shipItems(ItemShippingInformationBuilder shipping)
      throws CheckoutException {
    ShipItemsRequest shipItemsRequest = new ShipItemsRequest();
    shipItemsRequest.setGoogleOrderNumber(googleOrderNumber);
    List<ItemShippingInformation> trackingDatas = shipping.build();
    ShipItemsRequest.ItemShippingInformationList itemShippingList =
      new ShipItemsRequest.ItemShippingInformationList();
    itemShippingList.getItemShippingInformation().addAll(trackingDatas);
    shipItemsRequest.setItemShippingInformationList(itemShippingList);
    shipItemsRequest.setSendEmail(sendEmails);
    postCommand(shipItemsRequest.toJAXB());
  }

  @Override
  public void archiveOrder() {
    ArchiveOrderRequest archiveOrderRequest = new ArchiveOrderRequest();
    archiveOrderRequest.setGoogleOrderNumber(googleOrderNumber);
    postCommand(archiveOrderRequest.toJAXB());
  }

  @Override
  public void unarchiveOrder() {
    UnarchiveOrderRequest unarchiveOrderRequest = new UnarchiveOrderRequest();
    unarchiveOrderRequest.setGoogleOrderNumber(googleOrderNumber);
    postCommand(unarchiveOrderRequest.toJAXB());
  }

  @Override
  public OrderSummary getOrderSummary() {
    return apiContext.reportsRequester().requestOrderSummaries(
        Collections.singletonList(googleOrderNumber)).get(0);
  }

  class ItemCommandsImpl implements ItemCommands {

    private final OrderCommandsImpl commandPoster;
    private final List<ItemId> itemIds;

    public ItemCommandsImpl(
        OrderCommandsImpl commandPoster, List<ItemId> itemIds) {
      this.commandPoster = commandPoster;
      this.itemIds = itemIds;
    }

    // cancels just the items
    @Override
    public void cancelItems(
        String reason) throws CheckoutException {
      CancelItemsRequest cancelItems = new CancelItemsRequest();
      cancelItems.setGoogleOrderNumber(commandPoster.googleOrderNumber);
      CancelItemsRequest.ItemIds idsObject = new CancelItemsRequest.ItemIds();
      idsObject.getItemId().addAll(itemIds);
      cancelItems.setItemIds(idsObject);
      cancelItems.setReason(reason);
      cancelItems.setSendEmail(commandPoster.sendEmails);
      postCommand(cancelItems.toJAXB());
    }

    @Override
    public void backorderItems()
        throws CheckoutException {
      BackorderItemsRequest backorderItems = new BackorderItemsRequest();
      backorderItems.setGoogleOrderNumber(commandPoster.googleOrderNumber);
      BackorderItemsRequest.ItemIds idsObject =
        new BackorderItemsRequest.ItemIds();
      idsObject.getItemId().addAll(itemIds);
      backorderItems.setItemIds(idsObject);
      backorderItems.setSendEmail(commandPoster.sendEmails);
      postCommand(backorderItems.toJAXB());
    }

    @Override
    public void returnItems() throws CheckoutException {
      ReturnItemsRequest returnItems = new ReturnItemsRequest();
      returnItems.setGoogleOrderNumber(commandPoster.googleOrderNumber);
      ReturnItemsRequest.ItemIds idsObject = new ReturnItemsRequest.ItemIds();
      idsObject.getItemId().addAll(itemIds);
      returnItems.setItemIds(idsObject);
      returnItems.setSendEmail(commandPoster.sendEmails);
      postCommand(returnItems.toJAXB());
    }

    @Override
    public void shipItems(String carrier, String trackingNumber)
        throws CheckoutException {
      ItemShippingInformationBuilder shippingBuilder = new ItemShippingInformationBuilder();
      for(ItemId id : itemIds) {
        shippingBuilder.addShipping(id,
            new TrackingDataBuilder().addTrackingData(carrier, trackingNumber));
      }
      commandPoster.shipItems(shippingBuilder);
    }
  }

  protected RequestReceivedResponse postCommand(JAXBElement<?> command) {
    return (RequestReceivedResponse) apiContext.postCommand(
        CommandType.ORDER_PROCESSING, command);
  }
}
TOP

Related Classes of com.google.checkout.sdk.commands.OrderCommandsImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.