/**
   * @see IAPClientPaymentListener#productDataListReceived(int,
   *     com.nokia.mid.payment.IAPClientProductData[])
   */
  public final void productDataListReceived(int status, IAPClientProductData[] productDataList) {
    if (status == OK) {
      if (productDataList.length == 0) {
        Util.showAlert("No products", "There are no products available.");
        midlet.showGuideView();
      }

      for (int i = 0, size = productDataList.length; i < size; i++) {
        IAPClientProductData productData = productDataList[i];

        if (productData.getProductId() != null) {
          Guide guideProduct = (Guide) waitingProductData.remove(productData.getProductId());
          String title = productData.getTitle();

          if (title == null) {
            title = productData.getShortDescription();
          }

          if (title == null) {
            title = "unknown";
          }

          String price = productData.getPrice();
          if (price == null) {
            price = "unknown";
          }

          if (guideProduct != null) {
            guideProduct.setCity(title);
            guideProduct.setPrice(price);
            newGuideList.addItem(guideProduct);
            repaint();
          }

          // A guide was clicked before logging in and refreshing
          // the product list. Proceed with the purchase / restore.
          if (newGuide != null && guideProduct.getId().equals(newGuide.getId())) {
            newGuide = null;
            loadingGuides = false;
            handleClickedProduct(guideProduct);
            return;
          }
        }
      }
    } else {
      Util.showAlert("Loading failure", "Loading new guides failed: " + getPaymentError(status));
      midlet.showGuideView();
    }
    waitingProductData = null;
    loadingGuides = false;
    showLoading(false);
    repaint();
  }
 public final void productDataReceived(int status, IAPClientProductData productData) {
   newGuide.setCity(productData.getShortDescription());
   newGuide.setPrice(productData.getPrice());
   newGuide.setUrl(GUIDE_URL_PREFIX + newGuide.getId());
   manager.purchaseProduct(newGuide.getId(), IAPClientPaymentManager.FORCED_AUTOMATIC_RESTORATION);
 }