All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.knowm.xchange.coinbase.dto.merchant.CoinbaseButton Maven / Gradle / Ivy

package org.knowm.xchange.coinbase.dto.merchant;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.knowm.xchange.coinbase.dto.CoinbaseBaseResponse;
import org.knowm.xchange.coinbase.dto.common.CoinbaseRepeat;
import org.knowm.xchange.coinbase.dto.marketdata.CoinbaseMoney;
import org.knowm.xchange.coinbase.dto.serialization.CoinbaseCentsDeserializer;

/** @author jamespedwards42 */
public class CoinbaseButton extends CoinbaseBaseResponse {

  @JsonProperty("button")
  private final CoinbaseButtonInfo button;

  private CoinbaseButton(
      @JsonProperty("button") final CoinbaseButtonInfo button,
      @JsonProperty("success") final boolean success,
      @JsonProperty("errors") final List errors) {

    super(success, errors);
    this.button = button;
  }

  CoinbaseButton(CoinbaseButtonInfo button) {

    super(true);
    this.button = button;
  }

  @JsonIgnore
  public CoinbaseButtonType getType() {

    return button.getType();
  }

  @JsonIgnore
  public String getName() {

    return button.getName();
  }

  @JsonIgnore
  public String getDescription() {

    return button.getDescription();
  }

  @JsonIgnore
  public String getId() {

    return button.getId();
  }

  @JsonIgnore
  public CoinbaseMoney getPrice() {

    return button.getPrice();
  }

  @JsonIgnore
  public String getPriceString() {

    return button.getPriceString();
  }

  @JsonIgnore
  public String getCurrency() {

    return button.getCurrency();
  }

  @JsonIgnore
  public String getCustom() {

    return button.getCustom();
  }

  @JsonIgnore
  public CoinbaseButtonStyle getStyle() {

    return button.getStyle();
  }

  @JsonIgnore
  public String getCode() {

    return button.getCode();
  }

  @JsonIgnore
  public String getText() {

    return button.getText();
  }

  @JsonIgnore
  public CoinbaseRepeat getRepeat() {

    return button.getRepeat();
  }

  @JsonIgnore
  public boolean isCustomSecure() {

    return button.isCustomSecure();
  }

  @JsonIgnore
  public String getCallbackUrl() {

    return button.getCallbackUrl();
  }

  @JsonIgnore
  public String getSuccessUrl() {

    return button.getSuccessUrl();
  }

  @JsonIgnore
  public String getCancelUrl() {

    return button.getCancelUrl();
  }

  @JsonIgnore
  public String getInfoUrl() {

    return button.getInfoUrl();
  }

  @JsonIgnore
  public boolean isAutoReDirect() {

    return button.isAutoReDirect();
  }

  @JsonIgnore
  public boolean isVariablePrice() {

    return button.isVariablePrice();
  }

  @JsonIgnore
  public boolean isChoosePrice() {

    return button.isChoosePrice();
  }

  @JsonIgnore
  public boolean isIncludeAddress() {

    return button.isIncludeAddress();
  }

  @JsonIgnore
  public boolean isIncludeEmail() {

    return button.isIncludeEmail();
  }

  @JsonIgnore
  public List getSuggestedPrices() {

    final List suggestedPrices = new ArrayList<>();
    suggestedPrices.add(button.price1);
    suggestedPrices.add(button.price2);
    suggestedPrices.add(button.price3);
    suggestedPrices.add(button.price4);
    suggestedPrices.add(button.price5);
    return suggestedPrices;
  }

  @JsonIgnore
  public String getPrice1() {

    return button.getPrice1();
  }

  @JsonIgnore
  public String getPrice2() {

    return button.getPrice2();
  }

  @JsonIgnore
  public String getPrice3() {

    return button.getPrice3();
  }

  @JsonIgnore
  public String getPrice4() {

    return button.getPrice4();
  }

  @JsonIgnore
  public String getPrice5() {

    return button.getPrice5();
  }

  @Override
  public String toString() {

    return "CoinbaseButton [button=" + button + "]";
  }

  public static class CoinbaseButtonBuilder {

    private static final int MAX_SUGGESTED_PRICES = 5;
    private final String name;
    private final CoinbaseMoney price;
    private CoinbaseButtonType type;
    private String description;
    private String custom;
    private CoinbaseButtonStyle style;
    private String text;
    private CoinbaseRepeat repeat;
    private boolean customSecure;
    private String callbackUrl;
    private String successUrl;
    private String cancelUrl;
    private String infoUrl;
    private boolean autoDirect;
    private boolean variablePrice;
    private boolean choosePrice;
    private boolean includeAddress;
    private boolean includeEmail;
    private String price1;
    private String price2;
    private String price3;
    private String price4;
    private String price5;

    public CoinbaseButtonBuilder(String name, final String currency, final String priceString) {

      this(name, new CoinbaseMoney(currency, new BigDecimal(priceString)));
    }

    public CoinbaseButtonBuilder(String name, final CoinbaseMoney price) {

      this.name = name;
      this.price = price;
    }

    public CoinbaseButton buildButton() {

      final CoinbaseButtonInfo buttonInfo =
          new CoinbaseButtonInfo(
              name,
              price,
              type,
              description,
              null,
              custom,
              style,
              null,
              text,
              repeat,
              customSecure,
              callbackUrl,
              successUrl,
              cancelUrl,
              infoUrl,
              autoDirect,
              variablePrice,
              choosePrice,
              includeAddress,
              includeEmail,
              price1,
              price2,
              price3,
              price4,
              price5);

      return new CoinbaseButton(buttonInfo);
    }

    public String getName() {

      return name;
    }

    public CoinbaseMoney getPrice() {

      return price;
    }

    public String getPriceString() {

      return price.getAmount().toPlainString();
    }

    public String getCurrency() {

      return price.getCurrency();
    }

    public CoinbaseButtonType getType() {

      return type;
    }

    public CoinbaseButtonBuilder withType(CoinbaseButtonType type) {

      this.type = type;
      return this;
    }

    public String getDescription() {

      return description;
    }

    public CoinbaseButtonBuilder withDescription(String description) {

      this.description = description;
      return this;
    }

    public String getCustom() {

      return custom;
    }

    public CoinbaseButtonBuilder withCustom(String custom) {

      this.custom = custom;
      return this;
    }

    public CoinbaseButtonStyle getStyle() {

      return style;
    }

    public CoinbaseButtonBuilder withStyle(CoinbaseButtonStyle style) {

      this.style = style;
      return this;
    }

    public String getText() {

      return text;
    }

    public CoinbaseButtonBuilder withText(String text) {

      this.text = text;
      return this;
    }

    public CoinbaseRepeat getRepeat() {

      return repeat;
    }

    public CoinbaseButtonBuilder withRepeat(CoinbaseRepeat repeat) {

      this.repeat = repeat;
      return this;
    }

    public boolean isCustomSecure() {

      return customSecure;
    }

    public CoinbaseButtonBuilder withCustomSecure(boolean customSecure) {

      this.customSecure = customSecure;
      return this;
    }

    public String getCallbackUrl() {

      return callbackUrl;
    }

    public CoinbaseButtonBuilder withCallbackUrl(String callbackUrl) {

      this.callbackUrl = callbackUrl;
      return this;
    }

    public String getSuccessUrl() {

      return successUrl;
    }

    public CoinbaseButtonBuilder withSuccessUrl(String successUrl) {

      this.successUrl = successUrl;
      return this;
    }

    public String getCancelUrl() {

      return cancelUrl;
    }

    public CoinbaseButtonBuilder withCancelUrl(String cancelUrl) {

      this.cancelUrl = cancelUrl;
      return this;
    }

    public String getInfoUrl() {

      return infoUrl;
    }

    public CoinbaseButtonBuilder withInfoUrl(String infoUrl) {

      this.infoUrl = infoUrl;
      return this;
    }

    public boolean isAutoDirect() {

      return autoDirect;
    }

    public CoinbaseButtonBuilder withAutoDirect(boolean autoDirect) {

      this.autoDirect = autoDirect;
      return this;
    }

    public boolean isVariablePrice() {

      return variablePrice;
    }

    public CoinbaseButtonBuilder withVariablePrice(boolean variablePrice) {

      this.variablePrice = variablePrice;
      return this;
    }

    public boolean isChoosePrice() {

      return choosePrice;
    }

    public CoinbaseButtonBuilder withChoosePrice(boolean choosePrice) {

      this.choosePrice = choosePrice;
      return this;
    }

    public boolean isIncludeAddress() {

      return includeAddress;
    }

    public CoinbaseButtonBuilder withIncludeAddress(boolean includeAddress) {

      this.includeAddress = includeAddress;
      return this;
    }

    public boolean isIncludeEmail() {

      return includeEmail;
    }

    public CoinbaseButtonBuilder withIncludeEmail(boolean includeEmail) {

      this.includeEmail = includeEmail;
      return this;
    }

    public String getPrice1() {

      return price1;
    }

    public String getPrice2() {

      return price2;
    }

    public String getPrice3() {

      return price3;
    }

    public String getPrice4() {

      return price4;
    }

    public String getPrice5() {

      return price5;
    }

    public CoinbaseButtonBuilder withSuggestedPrices(String... suggestedPrices) {

      if (suggestedPrices.length > MAX_SUGGESTED_PRICES)
        throw new IllegalArgumentException(
            "Only "
                + MAX_SUGGESTED_PRICES
                + " suggested prices are allowed. There was an attempt to add "
                + suggestedPrices.length
                + " prices.");

      switch (suggestedPrices.length) {
        case 5:
          this.price5 = suggestedPrices[4];
        case 4:
          this.price4 = suggestedPrices[3];
        case 3:
          this.price3 = suggestedPrices[2];
        case 2:
          this.price2 = suggestedPrices[1];
        case 1:
          this.price1 = suggestedPrices[0];
      }

      return this;
    }
  }

  static class CoinbaseButtonInfo {

    private final String name;
    private final CoinbaseMoney price;
    private final CoinbaseButtonType type;
    private final String description;
    private final String id;
    private final String custom;
    private final CoinbaseButtonStyle style;
    private final String code;
    private final String text;
    private final CoinbaseRepeat repeat;
    private final boolean customSecure;
    private final String callbackUrl;
    private final String successUrl;
    private final String cancelUrl;
    private final String infoUrl;
    private final boolean autoReDirect;
    private final boolean variablePrice;
    private final boolean choosePrice;
    private final boolean includeAddress;
    private final boolean includeEmail;
    private final String price1;
    private final String price2;
    private final String price3;
    private final String price4;
    private final String price5;

    private CoinbaseButtonInfo(
        @JsonProperty("name") final String name,
        @JsonProperty("price") @JsonDeserialize(using = CoinbaseCentsDeserializer.class)
            final CoinbaseMoney price,
        @JsonProperty("type") final CoinbaseButtonType type,
        @JsonProperty("description") final String description,
        @JsonProperty("id") final String id,
        @JsonProperty("custom") final String custom,
        @JsonProperty("style") final CoinbaseButtonStyle style,
        @JsonProperty("code") final String code,
        @JsonProperty("text") final String text,
        @JsonProperty("repeat") final CoinbaseRepeat repeat,
        @JsonProperty("custom_secure") final boolean customSecure,
        @JsonProperty("callback_url") final String callbackUrl,
        @JsonProperty("success_url") final String successUrl,
        @JsonProperty("cancel_url") final String cancelUrl,
        @JsonProperty("info_url") final String infoUrl,
        @JsonProperty("auto_redirect") final boolean autoDirect,
        @JsonProperty("variable_price") final boolean variablePrice,
        @JsonProperty("choose_price") final boolean choosePrice,
        @JsonProperty("include_address") final boolean includeAddress,
        @JsonProperty("include_email") final boolean includeEmail,
        @JsonProperty("price1") final String price1,
        @JsonProperty("price2") final String price2,
        @JsonProperty("price3") final String price3,
        @JsonProperty("price4") final String price4,
        @JsonProperty("price5") final String price5) {

      this.name = name;
      this.price = price;
      this.type = type;
      this.description = description;
      this.id = id;
      this.custom = custom;
      this.style = style;
      this.code = code;
      this.text = text;
      this.repeat = repeat;
      this.customSecure = customSecure;
      this.callbackUrl = callbackUrl;
      this.successUrl = successUrl;
      this.cancelUrl = cancelUrl;
      this.infoUrl = infoUrl;
      this.autoReDirect = autoDirect;
      this.variablePrice = variablePrice;
      this.choosePrice = choosePrice;
      this.includeAddress = includeAddress;
      this.includeEmail = includeEmail;
      this.price1 = price1;
      this.price2 = price2;
      this.price3 = price3;
      this.price4 = price4;
      this.price5 = price5;
    }

    @JsonProperty("type")
    public CoinbaseButtonType getType() {

      return type;
    }

    @JsonProperty("name")
    public String getName() {

      return name;
    }

    @JsonProperty("description")
    public String getDescription() {

      return description;
    }

    @JsonIgnore
    public String getId() {

      return id;
    }

    @JsonIgnore
    public CoinbaseMoney getPrice() {

      return price;
    }

    @JsonProperty("price_string")
    public String getPriceString() {

      return price.getAmount().toPlainString();
    }

    @JsonProperty("price_currency_iso")
    public String getCurrency() {

      return price.getCurrency();
    }

    @JsonProperty("custom")
    public String getCustom() {

      return custom;
    }

    @JsonProperty("style")
    public CoinbaseButtonStyle getStyle() {

      return style;
    }

    @JsonIgnore
    public String getCode() {

      return code;
    }

    @JsonProperty("text")
    public String getText() {

      return text;
    }

    @JsonProperty("repeat")
    public CoinbaseRepeat getRepeat() {

      return repeat;
    }

    @JsonProperty("custom_secure")
    public boolean isCustomSecure() {

      return customSecure;
    }

    @JsonProperty("callback_url")
    public String getCallbackUrl() {

      return callbackUrl;
    }

    @JsonProperty("success_url")
    public String getSuccessUrl() {

      return successUrl;
    }

    @JsonProperty("cancel_url")
    public String getCancelUrl() {

      return cancelUrl;
    }

    @JsonProperty("info_url")
    public String getInfoUrl() {

      return infoUrl;
    }

    @JsonProperty("auto_direct")
    public boolean isAutoReDirect() {

      return autoReDirect;
    }

    @JsonProperty("variable_price")
    public boolean isVariablePrice() {

      return variablePrice;
    }

    @JsonProperty("choose_price")
    public boolean isChoosePrice() {

      return choosePrice;
    }

    @JsonProperty("include_address")
    public boolean isIncludeAddress() {

      return includeAddress;
    }

    @JsonProperty("include_email")
    public boolean isIncludeEmail() {

      return includeEmail;
    }

    @JsonProperty("price1")
    public String getPrice1() {

      return price1;
    }

    @JsonProperty("price2")
    public String getPrice2() {

      return price2;
    }

    @JsonProperty("price3")
    public String getPrice3() {

      return price3;
    }

    @JsonProperty("price4")
    public String getPrice4() {

      return price4;
    }

    @JsonProperty("price5")
    public String getPrice5() {

      return price5;
    }

    @Override
    public String toString() {

      return "CoinbaseButtonInfo [name="
          + name
          + ", price="
          + price
          + ", type="
          + type
          + ", description="
          + description
          + ", id="
          + id
          + ", custom="
          + custom
          + ", style="
          + style
          + ", code="
          + code
          + ", text="
          + text
          + ", repeat="
          + repeat
          + ", customSecure="
          + customSecure
          + ", callbackUrl="
          + callbackUrl
          + ", successUrl="
          + successUrl
          + ", cancelUrl="
          + cancelUrl
          + ", infoUrl="
          + infoUrl
          + ", autoDirect="
          + autoReDirect
          + ", variablePrice="
          + variablePrice
          + ", choosePrice="
          + choosePrice
          + ", includeAddress="
          + includeAddress
          + ", includeEmail="
          + includeEmail
          + ", price1="
          + price1
          + ", price2="
          + price2
          + ", price3="
          + price3
          + ", price4="
          + price4
          + ", price5="
          + price5
          + "]";
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy