package com.example.spring.bank; import java.math.BigDecimal; import java.util.Iterator; import java.util.List; import com.example.spring.bank.dao.AccountDAO; public class AccountManagerImpl implements AccountManager { private AccountDAO accountDAO; public void setAccountDAO(AccountDAO accountDAO) { this.accountDAO = accountDAO; } @Override public void chargeForLowBalance(BigDecimal minimumBalance, BigDecimal amount) { List accounts = accountDAO.findAccountsWithLowBalance(minimumBalance); for (Iterator iterator = accounts.iterator(); iterator.hasNext();) { Account account = (Account) iterator.next(); // Check if the balance will go beyond 0. If yes, set the balance to 0 account.setBalance(account.getBalance().subtract(amount)); accountDAO.update(account); } } @Override public Account create() { return accountDAO.createAccount(); } @Override public Account find(int accountNumber) { return accountDAO.getAccount(accountNumber); } @Override public void delete(int accountNumber) { accountDAO.delete(accountNumber); } @Override public Account deposit(int accountNumber, BigDecimal amount) { Account account = accountDAO.getAccount(accountNumber); account.setBalance(account.getBalance().add(amount)); accountDAO.update(account); return account; } @Override public Account withdraw(int accountNumber, BigDecimal amount) { Account account = accountDAO.getAccount(accountNumber); account.setBalance(account.getBalance().subtract(amount)); accountDAO.update(account); return account; } @Override public Account transfer(int accountNumber1, int accountNumber2, BigDecimal amount) { Account account1 = accountDAO.getAccount(accountNumber1); account1.setBalance(account1.getBalance().subtract(amount)); accountDAO.update(account1); Account account2 = accountDAO.getAccount(accountNumber2); account2.setBalance(account2.getBalance().add(amount)); accountDAO.update(account2); return account1; } }