intellij version of CashMachineBlueJ

CashMachine.java 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package rocks.zipcode.atm;
  2. import rocks.zipcode.atm.bank.AccountData;
  3. import rocks.zipcode.atm.bank.Bank;
  4. import java.util.function.Consumer;
  5. import java.util.function.Supplier;
  6. /**
  7. * @author ZipCodeWilmington
  8. */
  9. public class CashMachine {
  10. private final Bank bank;
  11. private AccountData accountData = null;
  12. public CashMachine(Bank bank) {
  13. this.bank = bank;
  14. }
  15. private Consumer<AccountData> update = data -> {
  16. accountData = data;
  17. };
  18. public void login(int id) {
  19. tryCall(
  20. () -> bank.getAccountById(id),
  21. update
  22. );
  23. }
  24. public void deposit(int amount) {
  25. if (accountData != null) {
  26. tryCall(
  27. () -> bank.deposit(accountData, amount),
  28. update
  29. );
  30. }
  31. }
  32. public void withdraw(int amount) {
  33. if (accountData != null) {
  34. tryCall(
  35. () -> bank.withdraw(accountData, amount),
  36. update
  37. );
  38. }
  39. }
  40. public void exit() {
  41. if (accountData != null) {
  42. accountData = null;
  43. }
  44. }
  45. @Override
  46. public String toString() {
  47. return accountData != null ? accountData.toString() : "Try account 1000 or 2000 and click submit.";
  48. }
  49. private <T> void tryCall(Supplier<ActionResult<T> > action, Consumer<T> postAction) {
  50. try {
  51. ActionResult<T> result = action.get();
  52. if (result.isSuccess()) {
  53. T data = result.getData();
  54. postAction.accept(data);
  55. } else {
  56. String errorMessage = result.getErrorMessage();
  57. throw new RuntimeException(errorMessage);
  58. }
  59. } catch (Exception e) {
  60. System.out.println("Error: " + e.getMessage());
  61. }
  62. }
  63. }