java.lang.Object
com.broadleafcommerce.cartoperation.domain.payment.PaymentSummary
All Implemented Interfaces:
Serializable

public class PaymentSummary extends Object implements Serializable
The domain that summarizes the current state of transactions against the payment.
Author:
Dima Myroniuk (dmyroniuk)
See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected boolean
     
    boolean
     
    The list of restrictions that apply to payment access.
    com.broadleafcommerce.order.common.domain.Address
    getAddress(String addressType)
    Gathers one of the payment's related addresses by type
    Map<String,com.broadleafcommerce.order.common.domain.Address>
    The collection of related addresses that may include billing or shipping addresses
    javax.money.MonetaryAmount
    The payment's adjustments (a.k.a discounts) total, usually excluding shipping/fulfillment discounts.
    javax.money.MonetaryAmount
    The amount for which this payment is allotted.
    javax.money.MonetaryAmount
    The total authorized amount for capture.
    javax.money.MonetaryAmount
    The total amount of Authorize or AuthorizeAndCapture transactions that require 3DS verification.
    javax.money.MonetaryAmount
    The total amount of AuthorizeAndCapture transactions that require external interaction.
    javax.money.MonetaryAmount
    The total amount that is currently captured.
    javax.money.MonetaryAmount
    The total detached credit amount.
    javax.money.MonetaryAmount
    The total refunded amount.
    General use map to capture any additional attributes needed for this Payment
    javax.money.MonetaryAmount
    The total amount sent to the payment gateway for authorize, and is waiting for a response about the transaction result.
    com.broadleafcommerce.order.common.domain.Address
     
    javax.money.MonetaryAmount
    The total amount sent to the payment gateway for capture, and is waiting for a response about the transaction result.
    Returns the credit account number if this payment contains it in the attributes.
    javax.money.CurrencyUnit
    The currency gathered from getAmount()
    General use map to capture any display properties for this Payment
    javax.money.MonetaryAmount
    The total fees related to the transaction amount Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
    javax.money.MonetaryAmount
    The payment's total fulfillment cost.
    The gateway used to process this payment.
    javax.money.MonetaryAmount
    The amount of taxes that are included in the subtotal (VAT).
    The name of this payment.
    The id of the entity that owns this payment.
    Describes the owning entity of the payment.
    The id of this payment.
    com.broadleafcommerce.order.common.domain.Address
     
    javax.money.MonetaryAmount
    The payment's total usually excluding adjustments, tax, fees, and shipping.
    javax.money.MonetaryAmount
    The payment's total tax cost.
    javax.money.MonetaryAmount
    The total amount ever captured, as opposed to the current snapshot of the captured amount represented in getAmountCaptured().
    The type of this payment like Credit Card or Gift Card.
    The version of this payment.
    int
     
    boolean
    Indicates that the payment transaction has been flagged for manual review by fraud checks.
    boolean
    Whether or not the underlying payment method can only be used once.
    void
    setAccessRestrictions(List<String> accessRestrictions)
    The list of restrictions that apply to payment access.
    void
    setAddressByType(Map<String,com.broadleafcommerce.order.common.domain.Address> addressByType)
    The collection of related addresses that may include billing or shipping addresses
    void
    setAdjustmentsTotal(javax.money.MonetaryAmount adjustmentsTotal)
    The payment's adjustments (a.k.a discounts) total, usually excluding shipping/fulfillment discounts.
    void
    setAmount(javax.money.MonetaryAmount amount)
    The amount for which this payment is allotted.
    void
    setAmountAuthorized(javax.money.MonetaryAmount amountAuthorized)
    The total authorized amount for capture.
    void
    setAmountAwaiting3DSResult(javax.money.MonetaryAmount amountAwaiting3DSResult)
    The total amount of Authorize or AuthorizeAndCapture transactions that require 3DS verification.
    void
    setAmountAwaitingExternalResult(javax.money.MonetaryAmount amountAwaitingExternalResult)
    The total amount of AuthorizeAndCapture transactions that require external interaction.
    void
    setAmountCaptured(javax.money.MonetaryAmount amountCaptured)
    The total amount that is currently captured.
    void
    setAmountCredited(javax.money.MonetaryAmount amountCredited)
    The total detached credit amount.
    void
    setAmountRefunded(javax.money.MonetaryAmount amountRefunded)
    The total refunded amount.
    void
    General use map to capture any additional attributes needed for this Payment
    void
    setAuthorizeAmountAwaitingResult(javax.money.MonetaryAmount authorizeAmountAwaitingResult)
    The total amount sent to the payment gateway for authorize, and is waiting for a response about the transaction result.
    void
    setCaptureAmountAwaitingResult(javax.money.MonetaryAmount captureAmountAwaitingResult)
    The total amount sent to the payment gateway for capture, and is waiting for a response about the transaction result.
    void
    setDisplayAttributes(Map<String,String> displayAttributes)
    General use map to capture any display properties for this Payment
    void
    setFeesTotal(javax.money.MonetaryAmount feesTotal)
    The total fees related to the transaction amount Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
    void
    setFulfillmentTotal(javax.money.MonetaryAmount fulfillmentTotal)
    The payment's total fulfillment cost.
    void
    setGatewayType(String gatewayType)
    The gateway used to process this payment.
    void
    setHasTransactionFlaggedForManualReview(boolean hasTransactionFlaggedForManualReview)
    Indicates that the payment transaction has been flagged for manual review by fraud checks.
    void
    setIncludedTaxTotal(javax.money.MonetaryAmount includedTaxTotal)
    The amount of taxes that are included in the subtotal (VAT).
    void
    The name of this payment.
    void
    setOwningEntityId(String owningEntityId)
    The id of the entity that owns this payment.
    void
    setOwningEntityType(String owningEntityType)
    Describes the owning entity of the payment.
    void
    setPaymentId(String paymentId)
    The id of this payment.
    void
    setSingleUsePaymentMethod(boolean isSingleUsePaymentMethod)
    Whether or not the underlying payment method can only be used once.
    void
    setSubtotal(javax.money.MonetaryAmount subtotal)
    The payment's total usually excluding adjustments, tax, fees, and shipping.
    void
    setTaxTotal(javax.money.MonetaryAmount taxTotal)
    The payment's total tax cost.
    void
    setTotalEverCaptured(javax.money.MonetaryAmount totalEverCaptured)
    The total amount ever captured, as opposed to the current snapshot of the captured amount represented in getAmountCaptured().
    void
    The type of this payment like Credit Card or Gift Card.
    void
    The version of this payment.
     

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • PaymentSummary

      public PaymentSummary()
  • Method Details

    • getAddress

      @Nullable public com.broadleafcommerce.order.common.domain.Address getAddress(String addressType)
      Gathers one of the payment's related addresses by type
      Returns:
      The payment's related address identified by type
    • getBillingAddress

      @Nullable public com.broadleafcommerce.order.common.domain.Address getBillingAddress()
    • getShippingAddress

      @Nullable public com.broadleafcommerce.order.common.domain.Address getShippingAddress()
    • getCurrency

      @Nullable public javax.money.CurrencyUnit getCurrency()
      The currency gathered from getAmount()
      Returns:
      The currency gathered from the amount
    • getCreditAccountNumber

      @Nullable public String getCreditAccountNumber()
      Returns the credit account number if this payment contains it in the attributes.
      Returns:
      the credit account number
      See Also:
    • getPaymentId

      public String getPaymentId()
      The id of this payment.
      Returns:
      The id of this payment.
    • getName

      public String getName()
      The name of this payment. This name is typically something like "Visa ending in 1234".
      Returns:
      The name of this payment.
    • getType

      public String getType()
      The type of this payment like Credit Card or Gift Card.
      Returns:
      The type of this payment like Credit Card or Gift Card.
    • getGatewayType

      public String getGatewayType()
      The gateway used to process this payment. Only a SINGLE payment gateway can modify transactions on a particular payment.
      Returns:
      The gateway used to process this payment.
    • getOwningEntityType

      public String getOwningEntityType()
      Describes the owning entity of the payment. For example, the payment could have originated with a cart or a subscription, therefore this value might be CART or SUBSCRIPTION.
      Returns:
      The type describing the owning entity of the payment
    • getOwningEntityId

      public String getOwningEntityId()
      The id of the entity that owns this payment. For example, this may be a cart id, or a subscription billing cycle id.
      Returns:
      The id of the entity that owns this payment.
    • getAddressByType

      public Map<String,com.broadleafcommerce.order.common.domain.Address> getAddressByType()
      The collection of related addresses that may include billing or shipping addresses
      Returns:
      The collection of related addresses
    • getAttributes

      public Map<String,String> getAttributes()
      General use map to capture any additional attributes needed for this Payment
      Returns:
      General use map to capture any additional attributes needed for this Payment
    • getDisplayAttributes

      public Map<String,String> getDisplayAttributes()
      General use map to capture any display properties for this Payment
      Returns:
      General use map to capture any display properties for this Payment
    • isSingleUsePaymentMethod

      public boolean isSingleUsePaymentMethod()
      Whether or not the underlying payment method can only be used once. In most cases, we're managing a single-use token that represents a credit card. This flag is especially important for managing payments with successful transactions. In those cases, the token has already been used and cannot be reused. If we need modify the payment's amount, then we may actually need to archive the existing payment, and create a new payment, with a new underlying token. Additionally, this flag is helpful when needing to re-authorize an expired authorization transaction. In that case, if the payment represents a single-use payment method, then the re-authorization may not be possible, and you'll need to seek an alternative form of payment.
      Returns:
      Whether or not the underlying payment method can only be used once
    • getAmount

      public javax.money.MonetaryAmount getAmount()
      The amount for which this payment is allotted. If specified, the amount details should be equal to this amount using the following equation: transactionAmount = subtotal + fulfillmentTotal + feesTotal - adjustmentsTotal + taxTotal - includedTaxTotal.
      Returns:
      The amount for which this payment is allotted.
    • getSubtotal

      public javax.money.MonetaryAmount getSubtotal()
      The payment's total usually excluding adjustments, tax, fees, and shipping. Note: Only the amount is required, but if this value is included, then the fulfillmentTotal, feesTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
      Returns:
      The payment's total usually excluding adjustments, tax, fees, and shipping.
    • getAdjustmentsTotal

      public javax.money.MonetaryAmount getAdjustmentsTotal()
      The payment's adjustments (a.k.a discounts) total, usually excluding shipping/fulfillment discounts. Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, feesTotal, taxTotal, & includedTaxTotal should be included also.
      Returns:
      The payment's adjustments (a.k.a discounts) total, usually excluding shipping/fulfillment discounts.
    • getFulfillmentTotal

      public javax.money.MonetaryAmount getFulfillmentTotal()
      The payment's total fulfillment cost. Note: Only the amount is required, but if this value is included, then the subtotal, feesTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
      Returns:
      The payment's total fulfillment cost.
    • getFeesTotal

      public javax.money.MonetaryAmount getFeesTotal()
      The total fees related to the transaction amount Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
      Returns:
      The total fees related to the transaction amount
    • getTaxTotal

      public javax.money.MonetaryAmount getTaxTotal()
      The payment's total tax cost. Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, feesTotal, adjustmentsTotal, & includedTaxTotal should be included also.
      Returns:
      The payment's total tax cost.
    • getIncludedTaxTotal

      public javax.money.MonetaryAmount getIncludedTaxTotal()
      The amount of taxes that are included in the subtotal (VAT). Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, feesTotal, adjustmentsTotal, & taxTotal should be included also.
      Returns:
      The amount of taxes that are included in the subtotal (VAT).
    • getAmountAuthorized

      public javax.money.MonetaryAmount getAmountAuthorized()
      The total authorized amount for capture. This value is calculated as "total authorized - total reverse-authed".
      Returns:
      the total authorized amount for capture
    • getAmountCaptured

      public javax.money.MonetaryAmount getAmountCaptured()
      The total amount that is currently captured. This value is calculated as "total captured - total refunded".
      Returns:
      The total amount that is currently captured
    • getTotalEverCaptured

      public javax.money.MonetaryAmount getTotalEverCaptured()
      The total amount ever captured, as opposed to the current snapshot of the captured amount represented in getAmountCaptured().
      Returns:
      The total amount ever captured
    • getAmountRefunded

      public javax.money.MonetaryAmount getAmountRefunded()
      The total refunded amount.
      Returns:
      the total refunded amount
    • getAmountCredited

      public javax.money.MonetaryAmount getAmountCredited()
      The total detached credit amount.
      Returns:
      the total detached credit amount
    • getAmountAwaiting3DSResult

      public javax.money.MonetaryAmount getAmountAwaiting3DSResult()
      The total amount of Authorize or AuthorizeAndCapture transactions that require 3DS verification. Note: this excludes transactions that previously required 3DS verification, but we now have transaction results for.

      This value should only be present for payment gateways that support 3DS verification.

      Returns:
      The total amount of Authorize or AuthorizeAndCapture transactions that require 3DS verification.
    • getAuthorizeAmountAwaitingResult

      public javax.money.MonetaryAmount getAuthorizeAmountAwaitingResult()
      The total amount sent to the payment gateway for authorize, and is waiting for a response about the transaction result.

      Typically authorize transactions have immediate result, but sometimes the result can be pending for certain gateways.

      Returns:
      the total amount sent to the payment gateway for authorize and is waiting for a response about the transaction result
    • getCaptureAmountAwaitingResult

      public javax.money.MonetaryAmount getCaptureAmountAwaitingResult()
      The total amount sent to the payment gateway for capture, and is waiting for a response about the transaction result.

      This value should only be present for payment gateways that support asynchronous transaction executions.

      Returns:
      the total amount sent to the payment gateway for capture and is waiting for a response about the transaction result
    • getVersion

      public Integer getVersion()
      The version of this payment. Used for checking that the requested version of the payment is up-to-date before saving changes. Required for any request which results in an update being made to the payment. This should never be manually incremented/decremented.
    • isHasTransactionFlaggedForManualReview

      public boolean isHasTransactionFlaggedForManualReview()
      Indicates that the payment transaction has been flagged for manual review by fraud checks.
      Returns:
      true if the transaction has been flagged for manual review
    • getAccessRestrictions

      public List<String> getAccessRestrictions()
      The list of restrictions that apply to payment access.
      Returns:
      the list of restrictions that apply to payment access
    • getAmountAwaitingExternalResult

      public javax.money.MonetaryAmount getAmountAwaitingExternalResult()
      The total amount of AuthorizeAndCapture transactions that require external interaction.

      This value should only be present for payment gateways that support external interaction.

      Returns:
      The total amount of AuthorizeAndCapture transactions that require external interaction.
    • setPaymentId

      public void setPaymentId(String paymentId)
      The id of this payment.
      Parameters:
      id - The id of this payment.
    • setName

      public void setName(String name)
      The name of this payment. This name is typically something like "Visa ending in 1234".
      Parameters:
      name - The name of this payment.
    • setType

      public void setType(String type)
      The type of this payment like Credit Card or Gift Card.
      Parameters:
      type - The type of this payment like Credit Card or Gift Card.
    • setGatewayType

      public void setGatewayType(String gatewayType)
      The gateway used to process this payment. Only a SINGLE payment gateway can modify transactions on a particular payment.
      Parameters:
      gatewayType - The gateway used to process this payment.
    • setOwningEntityType

      public void setOwningEntityType(String owningEntityType)
      Describes the owning entity of the payment. For example, the payment could have originated with a cart or a subscription, therefore this value might be CART or SUBSCRIPTION.
      Parameters:
      owningEntityType - The type describing the owning entity of the payment
    • setOwningEntityId

      public void setOwningEntityId(String owningEntityId)
      The id of the entity that owns this payment. For example, this may be a cart id, or a subscription billing cycle id.
      Parameters:
      owningEntityId - The id of the entity that owns this payment.
    • setAddressByType

      public void setAddressByType(Map<String,com.broadleafcommerce.order.common.domain.Address> addressByType)
      The collection of related addresses that may include billing or shipping addresses
      Parameters:
      addressByType - The collection of related addresses
    • setAttributes

      public void setAttributes(Map<String,String> attributes)
      General use map to capture any additional attributes needed for this Payment
      Parameters:
      attributes - General use map to capture any additional attributes needed for this Payment
    • setDisplayAttributes

      public void setDisplayAttributes(Map<String,String> displayAttributes)
      General use map to capture any display properties for this Payment
      Parameters:
      displayAttributes - General use map to capture any display properties for this Payment
    • setSingleUsePaymentMethod

      public void setSingleUsePaymentMethod(boolean isSingleUsePaymentMethod)
      Whether or not the underlying payment method can only be used once. In most cases, we're managing a single-use token that represents a credit card. This flag is especially important for managing payments with successful transactions. In those cases, the token has already been used and cannot be reused. If we need modify the payment's amount, then we may actually need to archive the existing payment, and create a new payment, with a new underlying token. Additionally, this flag is helpful when needing to re-authorize an expired authorization transaction. In that case, if the payment represents a single-use payment method, then the re-authorization may not be possible, and you'll need to seek an alternative form of payment.
      Parameters:
      isSingleUsePaymentMethod - Whether or not the underlying payment method can only be used once
    • setAmount

      public void setAmount(javax.money.MonetaryAmount amount)
      The amount for which this payment is allotted. If specified, the amount details should be equal to this amount using the following equation: transactionAmount = subtotal + fulfillmentTotal + feesTotal - adjustmentsTotal + taxTotal - includedTaxTotal.
      Parameters:
      amount - The amount for which this payment is allotted.
    • setSubtotal

      public void setSubtotal(javax.money.MonetaryAmount subtotal)
      The payment's total usually excluding adjustments, tax, fees, and shipping. Note: Only the amount is required, but if this value is included, then the fulfillmentTotal, feesTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
      Parameters:
      subtotal - The payment's total usually excluding adjustments, tax, fees, and shipping.
    • setAdjustmentsTotal

      public void setAdjustmentsTotal(javax.money.MonetaryAmount adjustmentsTotal)
      The payment's adjustments (a.k.a discounts) total, usually excluding shipping/fulfillment discounts. Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, feesTotal, taxTotal, & includedTaxTotal should be included also.
      Parameters:
      adjustmentsTotal - The payment's adjustments (a.k.a discounts) total, usually excluding shipping/fulfillment discounts.
    • setFulfillmentTotal

      public void setFulfillmentTotal(javax.money.MonetaryAmount fulfillmentTotal)
      The payment's total fulfillment cost. Note: Only the amount is required, but if this value is included, then the subtotal, feesTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
      Parameters:
      fulfillmentTotal - The payment's total fulfillment cost.
    • setFeesTotal

      public void setFeesTotal(javax.money.MonetaryAmount feesTotal)
      The total fees related to the transaction amount Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, adjustmentsTotal, taxTotal, & includedTaxTotal should be included also.
      Parameters:
      feesTotal - The total fees related to the transaction amount
    • setTaxTotal

      public void setTaxTotal(javax.money.MonetaryAmount taxTotal)
      The payment's total tax cost. Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, feesTotal, adjustmentsTotal, & includedTaxTotal should be included also.
      Parameters:
      taxTotal - The payment's total tax cost.
    • setIncludedTaxTotal

      public void setIncludedTaxTotal(javax.money.MonetaryAmount includedTaxTotal)
      The amount of taxes that are included in the subtotal (VAT). Note: Only the amount is required, but if this value is included, then the subtotal, fulfillmentTotal, feesTotal, adjustmentsTotal, & taxTotal should be included also.
      Parameters:
      includedTaxTotal - The amount of taxes that are included in the subtotal (VAT).
    • setAmountAuthorized

      public void setAmountAuthorized(javax.money.MonetaryAmount amountAuthorized)
      The total authorized amount for capture. This value is calculated as "total authorized - total reverse-authed".
      Parameters:
      amountAuthorized - the total authorized amount for capture
    • setAmountCaptured

      public void setAmountCaptured(javax.money.MonetaryAmount amountCaptured)
      The total amount that is currently captured. This value is calculated as "total captured - total refunded".
      Parameters:
      amountCaptured - The total amount that is currently captured
    • setTotalEverCaptured

      public void setTotalEverCaptured(javax.money.MonetaryAmount totalEverCaptured)
      The total amount ever captured, as opposed to the current snapshot of the captured amount represented in getAmountCaptured().
      Parameters:
      totalEverCaptured - The total amount ever captured
    • setAmountRefunded

      public void setAmountRefunded(javax.money.MonetaryAmount amountRefunded)
      The total refunded amount.
      Parameters:
      amountRefunded - the total refunded amount
    • setAmountCredited

      public void setAmountCredited(javax.money.MonetaryAmount amountCredited)
      The total detached credit amount.
      Parameters:
      amountCredited - the total detached credit amount
    • setAmountAwaiting3DSResult

      public void setAmountAwaiting3DSResult(javax.money.MonetaryAmount amountAwaiting3DSResult)
      The total amount of Authorize or AuthorizeAndCapture transactions that require 3DS verification. Note: this excludes transactions that previously required 3DS verification, but we now have transaction results for.

      This value should only be present for payment gateways that support 3DS verification.

      Parameters:
      amountAwaiting3DSResult - The total amount of Authorize or AuthorizeAndCapture transactions that require 3DS verification.
    • setAuthorizeAmountAwaitingResult

      public void setAuthorizeAmountAwaitingResult(javax.money.MonetaryAmount authorizeAmountAwaitingResult)
      The total amount sent to the payment gateway for authorize, and is waiting for a response about the transaction result.

      Typically authorize transactions have immediate result, but sometimes the result can be pending for certain gateways.

      Parameters:
      authorizeAmountAwaitingResult - the total amount sent to the payment gateway for authorize and is waiting for a response about the transaction result
    • setCaptureAmountAwaitingResult

      public void setCaptureAmountAwaitingResult(javax.money.MonetaryAmount captureAmountAwaitingResult)
      The total amount sent to the payment gateway for capture, and is waiting for a response about the transaction result.

      This value should only be present for payment gateways that support asynchronous transaction executions.

      Parameters:
      captureAmountAwaitingResult - the total amount sent to the payment gateway for capture and is waiting for a response about the transaction result
    • setVersion

      public void setVersion(Integer version)
      The version of this payment. Used for checking that the requested version of the payment is up-to-date before saving changes. Required for any request which results in an update being made to the payment. This should never be manually incremented/decremented.
    • setHasTransactionFlaggedForManualReview

      public void setHasTransactionFlaggedForManualReview(boolean hasTransactionFlaggedForManualReview)
      Indicates that the payment transaction has been flagged for manual review by fraud checks.
      Parameters:
      hasTransactionFlaggedForManualReview - whether the transaction has been marked for manual review
    • setAccessRestrictions

      public void setAccessRestrictions(List<String> accessRestrictions)
      The list of restrictions that apply to payment access.
      Parameters:
      accessRestrictions - the list of restrictions that apply to payment access
    • setAmountAwaitingExternalResult

      public void setAmountAwaitingExternalResult(javax.money.MonetaryAmount amountAwaitingExternalResult)
      The total amount of AuthorizeAndCapture transactions that require external interaction.

      This value should only be present for payment gateways that support external interaction.

      Parameters:
      amountAwaitingExternalResult - The total amount of AuthorizeAndCapture transactions that require external interaction.
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • canEqual

      protected boolean canEqual(Object other)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object