FileDocCategorySizeDatePackage
BankClientFrame.javaAPI DocExample5557Thu Nov 08 00:22:52 GMT 2001com.ora.rmibook.chapter15.bank.applications

BankClientFrame.java

package com.ora.rmibook.chapter15.bank.applications;


import com.ora.rmibook.chapter15.bank.*;
import com.ora.rmibook.chapter15.bank.valueobjects.*;
import com.ora.rmibook.chapter15.*;
import com.ora.rmibook.chapter15.impl.*;
import java.rmi.*;
import java.rmi.server.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import com.ora.rmibook.gui.*;


public class BankClientFrame extends ExitingFrame {
    private JTextField _accountNameField;
    private JTextField _balanceTextField;
    private JTextField _withdrawalTextField;
    private JTextField _depositTextField;
    private JTextField _contextTextField;
    private Account _account;

    String idNumber = "TestID";

    protected void buildGUI() {
        JPanel contentPane = new JPanel(new BorderLayout());

        contentPane.add(buildMainPanel(), BorderLayout.CENTER);
        setContentPane(contentPane);
        setSize(250, 300);
    }

    private void resetBalanceField() {
        try {
            Money balance = _account.getBalance(idNumber);

            _balanceTextField.setText("Balance: " + balance.toString());
        } catch (Exception e) {
            System.out.println("Error occurred while getting account balance\n" + e);
        }
    }

    private JPanel buildMainPanel() {
        JPanel actionPanel = new JPanel(new GridLayout(7, 2));

        actionPanel.add(new JLabel("Account Name:"));
        _accountNameField = new JTextField();
        actionPanel.add(_accountNameField);

        actionPanel.add(new JLabel("Context Name:"));
        _contextTextField = new JTextField();
        actionPanel.add(_contextTextField);

        actionPanel.add(new JLabel("Withdraw:"));
        _withdrawalTextField = new JTextField();
        actionPanel.add(_withdrawalTextField);

        actionPanel.add(new JLabel("Deposit:"));
        _depositTextField = new JTextField();
        actionPanel.add(_depositTextField);

        actionPanel.add(new JLabel("Balance:"));
        _balanceTextField = new JTextField();
        _balanceTextField.setEnabled(false);
        actionPanel.add(_balanceTextField);

        JButton getBalanceButton = new JButton("Get Balance");

        getBalanceButton.addActionListener(new GetBalanceAction());
        actionPanel.add(getBalanceButton);

        JButton withdrawalButton = new JButton("Make WithDrawal");

        withdrawalButton.addActionListener(new WithdrawAction());
        actionPanel.add(withdrawalButton);

        JButton depositButton = new JButton("Make Deposit");

        depositButton.addActionListener(new DepositAction());
        actionPanel.add(depositButton);

        return actionPanel;
    }

    private void getAccount() {
        try {
            Context baseContext = BaseContextImpl.getStubFromServer("127.0.0.1");
            Path path = Path.buildPath(new String[] {_contextTextField.getText()}
                );

            _account = (Account) baseContext.lookup(path, _accountNameField.getText(), null);
        } catch (Exception e) {
            System.out.println("Couldn't find account. Error was \n " + e);
            e.printStackTrace();
        }
        return;
    }

    private void releaseAccount() {
        _account = null;
    }

    private Money readTextField(JTextField moneyField) {
        try {
            Float floatValue = new Float(moneyField.getText());
            float actualValue = floatValue.floatValue();
            int cents = (int) (actualValue * 100);

            return new PositiveMoney(cents);
        } catch (Exception e) {
            System.out.println("Field doesn't contain a valid value");
        }
        return null;
    }

    private class GetBalanceAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            try {
                getAccount();
                resetBalanceField();
                releaseAccount();
            } catch (Exception exception) {
                System.out.println("Couldn't talk to account. Error was \n " + exception);
                exception.printStackTrace();
            }
        }
    }


    private class WithdrawAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            try {
                getAccount();
                Money withdrawalAmount = readTextField(_withdrawalTextField);

                _account.makeWithdrawal(idNumber, withdrawalAmount);
                _withdrawalTextField.setText("");
                resetBalanceField();
                releaseAccount();
            } catch (Exception exception) {
                System.out.println("Couldn't talk to account. Error was \n " + exception);
                exception.printStackTrace();
            }
        }
    }


    private class DepositAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            try {
                getAccount();
                Money depositAmount = readTextField(_depositTextField);

                _account.makeDeposit(idNumber, depositAmount);
                _depositTextField.setText("");
                resetBalanceField();
                releaseAccount();
            } catch (Exception exception) {
                System.out.println("Couldn't talk to account. Error was \n " + exception);
                exception.printStackTrace();
            }
        }
    }
}