Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
<groupId>com.almasb</groupId>
<artifactId>CashMachine</artifactId>
<version>0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<packaging>jar</packaging>

<properties>
Expand Down
Binary file added src/.DS_Store
Binary file not shown.
76 changes: 38 additions & 38 deletions src/main/java/rocks/zipcode/atm/ActionResult.java
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
package rocks.zipcode.atm;

/**
* @author ZipCodeWilmington
*/
public class ActionResult<T> {

private T data;
private String errorMessage;

private ActionResult(T data) {
this.data = data;
}

private ActionResult(String errorMessage) {
this.errorMessage = errorMessage;
}

public T getData() {
return data;
}

public String getErrorMessage() {
return errorMessage;
}

public boolean isSuccess() {
return data != null;
}

public static <E> ActionResult<E> success(E data) {
return new ActionResult<E>(data);
}

public static <E> ActionResult<E> fail(String errorMessage) {
return new ActionResult<E>(errorMessage);
}
}
package rocks.zipcode.atm;
/**
* @author ZipCodeWilmington
*/
public class ActionResult<T> {
private T data;
private String errorMessage;
private ActionResult(T data) {
this.data = data;
}
private ActionResult(String errorMessage) {
this.errorMessage = errorMessage;
}
public T getData() {
return data;
}
public String getErrorMessage() {
return errorMessage;
}
public boolean isSuccess() {
return data != null;
}
public static <E> ActionResult<E> success(E data) {
return new ActionResult<E>(data);
}
public static <E> ActionResult<E> fail(String errorMessage) {
return new ActionResult<E>(errorMessage);
}
}
155 changes: 80 additions & 75 deletions src/main/java/rocks/zipcode/atm/CashMachine.java
Original file line number Diff line number Diff line change
@@ -1,75 +1,80 @@
package rocks.zipcode.atm;

import rocks.zipcode.atm.bank.AccountData;
import rocks.zipcode.atm.bank.Bank;

import java.util.function.Consumer;
import java.util.function.Supplier;

/**
* @author ZipCodeWilmington
*/
public class CashMachine {

private final Bank bank;
private AccountData accountData = null;

public CashMachine(Bank bank) {
this.bank = bank;
}

private Consumer<AccountData> update = data -> {
accountData = data;
};

public void login(int id) {
tryCall(
() -> bank.getAccountById(id),
update
);
}

public void deposit(int amount) {
if (accountData != null) {
tryCall(
() -> bank.deposit(accountData, amount),
update
);
}
}

public void withdraw(int amount) {
if (accountData != null) {
tryCall(
() -> bank.withdraw(accountData, amount),
update
);
}
}

public void exit() {
if (accountData != null) {
accountData = null;
}
}

@Override
public String toString() {
return accountData != null ? accountData.toString() : "Try account 1000 or 2000 and click submit.";
}

private <T> void tryCall(Supplier<ActionResult<T> > action, Consumer<T> postAction) {
try {
ActionResult<T> result = action.get();
if (result.isSuccess()) {
T data = result.getData();
postAction.accept(data);
} else {
String errorMessage = result.getErrorMessage();
throw new RuntimeException(errorMessage);
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
package rocks.zipcode.atm;

import javafx.scene.control.TextField;
import rocks.zipcode.atm.bank.AccountData;
import rocks.zipcode.atm.bank.Bank;

import java.util.function.Consumer;
import java.util.function.Supplier;

/**
* @author ZipCodeWilmington
*/
public class CashMachine {

private final Bank bank;
private AccountData accountData = null;

public CashMachine(Bank bank) {
this.bank = bank;
}

private Consumer<AccountData> update = data -> {
accountData = data;
};

public Object login(int id) {
tryCall(
() -> bank.getAccountById(id),
update
);
return null;
}

public void deposit(Float amount) {
if (accountData != null) {
tryCall(
() -> bank.deposit(accountData, amount),
update
);
}
}

public void withdraw(Float amount) {
if (accountData != null) {
tryCall(
() -> bank.withdraw(accountData,amount),
update

);
}
}

public void exit() {
if (accountData != null) {
accountData = null;
}
}

@Override
public String toString() {
return accountData != null ? accountData.toString() : "Cleared";
}

private <T> void tryCall(Supplier<ActionResult<T> > action, Consumer<T> postAction) {
try {
ActionResult<T> result = action.get();
if (result.isSuccess()) {
T data = result.getData();
postAction.accept(data);
} else {
String errorMessage = result.getErrorMessage();
throw new RuntimeException(errorMessage);
}
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}

}

Loading