Interface RateHandler

  • All Known Subinterfaces:
    RateHandlerTestable
    All Known Implementing Classes:
    RateHandlerImpl

    public interface RateHandler
    Service interface for rates. This service contains all common rates methods. The methods are not specific for a particular rate, but apply for all rates enabled. Methods particular for specific rates are delegated to RateTypeHandler and its child classes.
    • Method Detail

      • applyTransfer

        <T extends Transfer> void applyTransfer​(T transfer)
                                         throws FrameworkException
        Applies a transfer, that is:
        • gets the rate from the fromAccount
        • sets those to the transfer
        • gets the rate of the toAccount
        • merges transfer and toAccount Rates
        • persists from rates if changed due to creation
        • persists to account rates.
        Parameters:
        transfer - the transfer to be applied.
        Throws:
        FrameworkException
      • copy

        void copy​(RatedEntity source,
                  RatedEntity destination)
        copies all rate fields from one RatedEntity to another.
      • getFromRates

        FromRatesData getFromRates​(Account fromAccount,
                                   TransferType transferType,
                                   BigDecimal amount,
                                   Date date,
                                   RateVisibility visibility)
        gets the future rates of a from account that will be after the transaction has been applied. It takes into account:
        * null rates are replaced by init values
        * if the balance isn't sufficient creation values are applied for the unsufficient part, and the rateBalanceCorrection and virtualRatedBalance are updated. In this case, FromRatesData.changedDueToCreation is set to true. This does NOT happen in case of an unlimited account.
        * transfer type defaults are applied if needed.
        * maturity policy other than always may result in transfer rates and from account rates that differ from each other. Under normal circumstances from account rates and transfer rates are always equal, but maturity policy other than aALWAYS may enforce a zero D-rate on the transfer, thus leaving the from account with a higher D. This is reflected in the special fields of the FromRatesData.
        Parameters:
        fromAccount - the account which is the from account of the transfer
        transferType - the transfertype of the transfer
        amount - the transfer amount
        date - the processing date of the transfer; if null, now is used.
        visibility - the visibility to be applied. This is usually RateVisibility.PARAMS in case the result is to be shown directly to users, or RateVisibility.ALL in case it is further processed in a transfer.
      • getRates

        RatesData getRates​(Account account,
                           BigDecimal balance,
                           Date time,
                           RateVisibility visibility)
                    throws FrameworkException
        As getRates(Account, RateVisibility), but uses a time and a balance as argument. This version is typically use to retrieve historical rates, usually from loops where the balance is calculated for each step.
        Parameters:
        account - the account. May not be null
        balance - the balance at the specified time. If this is null, the balance is retrieved via a call to AccountService#getBalance(Account, Date). Beware however that this method is dangerous, as it is date EXCLUSIVE, and errors may also occur in loops where two consequetive transfers have the same timestamp. In such a case the use of the balance param is recommended.
        time - - the time at which the rates are requested. If null DateHelper.now() is used. In that case, also passing a null balance is recommended strongly.
        visibility -
        Throws:
        FrameworkException
      • getRates

        RatesData getRates​(Account account,
                           RateVisibility visibility)
                    throws FrameworkException
        gets the rates of the account on the given date, according to the RateVisibility param. All fields are updated, also virtualRatedBalance and RateBalanceCorrection. Always returns a non null result, even when no rates available. Fields of rates not visible or not enabled are null.
        Uses the present date (now) as date. Internally, it calls getRates(account, null, DateHelper.now(), visibility).
        Parameters:
        account - the account. May not be null
        visibility -
        Throws:
        FrameworkException
      • isAnyRateEnabled

        boolean isAnyRateEnabled​(Currency currency,
                                 Date time)
                          throws FrameworkException
        Checks if any rate is enabled on the given date/time and for the given currency.
        Parameters:
        currency - - If null then it checks it for all the currencies available on the network, and will return true if any of those currencies is found with any of the rates enabled.
        time - - if null checks it for now.
        Returns:
        false if no rate at all is enabled, otherwise true.
        Throws:
        FrameworkException
      • isVisible

        boolean isVisible​(Currency currency,
                          Date date)
        Determines if any rate is to be shown to users. Checks the following:
        * currency must have any rate enabled
        * user must be admin, or rateParameters must be have flag showToUser set as true.

        This method can be used if no account is known, or even if no currency is known. If the account was known, it would correspond with isVisible(account, date, RateVisibility.PARAM).
        Parameters:
        currency - - If null then it checks it for all the currencies available on the network, and will return true if any of those currencies applies.
        date - - if null checks it for now.
        Returns:
        false if no rate at all is visible to the users, otherwise true.
      • setRateParametersToCurrencyDTO

        void setRateParametersToCurrencyDTO​(CurrencyDTO result)
                                     throws FrameworkException
        sets the RateParameters correctly to the currencyDTO, by:
        • gets the specific RateParametersDTO from the CurrencyDTO
        • if it exists, sets the enabledOnForm property of the RateParametersDTO to true. This is needed for a correct handling on the currency details form.
        Throws:
        FrameworkException
      • toEntity

        void toEntity​(Currency target,
                      CurrencyDTO dto)
               throws FrameworkException
        sets the RateParameters entities to the Currency entity
        Parameters:
        target - the Currency entity to which the RateParameters must be set
        dto - the CurrencyDTO from which the currency was retrieved, and which is used to read the RateParametersDTO
        Throws:
        FrameworkException