85 lines
2.8 KiB
Java
85 lines
2.8 KiB
Java
package me.teridax.jcash.gui.deposit;
|
|
|
|
import me.teridax.jcash.Logging;
|
|
import me.teridax.jcash.banking.accounts.Account;
|
|
import me.teridax.jcash.gui.InvalidInputException;
|
|
import me.teridax.jcash.gui.Utils;
|
|
|
|
import javax.swing.event.DocumentEvent;
|
|
import javax.swing.event.DocumentListener;
|
|
import java.text.ParseException;
|
|
|
|
/**
|
|
* Class for controlling the deposit operation via a dialog.
|
|
*/
|
|
public class DepositController {
|
|
|
|
private final DepositView view;
|
|
/**
|
|
* Account to deposit money to.
|
|
*/
|
|
private final Account account;
|
|
|
|
public DepositController(Account account) {
|
|
this.account = account;
|
|
|
|
this.view = new DepositView(account.getBalance());
|
|
|
|
this.view.getDeposit().addActionListener(e -> depositMoney());
|
|
this.view.getCancel().addActionListener(e -> view.dispose());
|
|
this.view.getValue().getDocument().addDocumentListener(new DocumentListener() {
|
|
|
|
/**
|
|
* Validate the amount to deposit and update display
|
|
* variables.
|
|
*/
|
|
private void validateInputState() {
|
|
var balance = account.getBalance();
|
|
try {
|
|
view.getValue().commitEdit();
|
|
var amount = view.getAmount();
|
|
view.setCommittedValue(amount, balance + amount);
|
|
view.getDeposit().setEnabled(true);
|
|
} catch (InvalidInputException | ParseException ex) {
|
|
view.setCommittedValue(0, balance);
|
|
view.getDeposit().setEnabled(false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void insertUpdate(DocumentEvent documentEvent) {
|
|
validateInputState();
|
|
}
|
|
|
|
@Override
|
|
public void removeUpdate(DocumentEvent documentEvent) {
|
|
validateInputState();
|
|
}
|
|
|
|
@Override
|
|
public void changedUpdate(DocumentEvent documentEvent) {
|
|
validateInputState();
|
|
}
|
|
});
|
|
this.view.showDialog();
|
|
}
|
|
|
|
/**
|
|
* Deposit the last valid value to the account.
|
|
* This method may display error dialogs when no money can be deposited.
|
|
*/
|
|
private void depositMoney() {
|
|
try {
|
|
var amount = view.getAmount();
|
|
Logging.LOGGER.fine("Depositing money of account: " + account.getIban() + " amount: " + amount);
|
|
account.deposit(amount);
|
|
} catch (IllegalArgumentException ex) {
|
|
Logging.LOGGER.severe("Cannot deposit money of account: " + account.getIban() + " because: " + ex.getMessage());
|
|
Utils.error(ex.getMessage());
|
|
} catch (InvalidInputException ex) {
|
|
Utils.error(ex.getMessage());
|
|
}
|
|
view.dispose();
|
|
}
|
|
}
|