ATM
ATM/.classpath
ATM/.project
ATM org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature
ATM/.settings/org.eclipse.jdt.core.prefs
eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.7
ATM/bin/atm/ATM.class
package atm; public synchronized class ATM implements Runnable { private int id; private String place; private String bankName; private java.net.InetAddress bankAddress; private physical.CardReader cardReader; private physical.CashDispenser cashDispenser; private physical.CustomerConsole customerConsole; private physical.EnvelopeAcceptor envelopeAcceptor; private physical.Log log; private physical.NetworkToBank networkToBank; private physical.OperatorPanel operatorPanel; private physical.ReceiptPrinter receiptPrinter; private int state; private boolean switchOn; private boolean cardInserted; private static final int OFF_STATE = 0; private static final int IDLE_STATE = 1; private static final int SERVING_CUSTOMER_STATE = 2; public void ATM(int, String, String, java.net.InetAddress); public void run(); public synchronized void switchOn(); public synchronized void switchOff(); public synchronized void cardInserted(); public int getID(); public String getPlace(); public String getBankName(); public physical.CardReader getCardReader(); public physical.CashDispenser getCashDispenser(); public physical.CustomerConsole getCustomerConsole(); public physical.EnvelopeAcceptor getEnvelopeAcceptor(); public physical.Log getLog(); public physical.NetworkToBank getNetworkToBank(); public physical.OperatorPanel getOperatorPanel(); public physical.ReceiptPrinter getReceiptPrinter(); private void performStartup(); private void performShutdown(); }
ATM/bin/atm/physical/CardReader.class
package atm.physical; public synchronized class CardReader { private atm.ATM atm; public void CardReader(atm.ATM); public banking.Card readCard(); public void ejectCard(); public void retainCard(); }
ATM/bin/atm/physical/CashDispenser.class
package atm.physical; public synchronized class CashDispenser { private Log log; private banking.Money cashOnHand; public void CashDispenser(Log); public void setInitialCash(banking.Money); public boolean checkCashOnHand(banking.Money); public void dispenseCash(banking.Money); }
ATM/bin/atm/physical/CustomerConsole$Cancelled.class
package atm.physical; public synchronized class CustomerConsole$Cancelled extends Exception { public void CustomerConsole$Cancelled(); }
ATM/bin/atm/physical/CustomerConsole.class
package atm.physical; public synchronized class CustomerConsole { public void CustomerConsole(); public void display(String); public int readPIN(String) throws CustomerConsole$Cancelled; public synchronized int readMenuChoice(String, String[]) throws CustomerConsole$Cancelled; public synchronized banking.Money readAmount(String) throws CustomerConsole$Cancelled; }
ATM/bin/atm/physical/EnvelopeAcceptor.class
package atm.physical; public synchronized class EnvelopeAcceptor { private Log log; public void EnvelopeAcceptor(Log); public void acceptEnvelope() throws CustomerConsole$Cancelled; }
ATM/bin/atm/physical/Log.class
package atm.physical; public synchronized class Log { public void Log(); public void logSend(banking.Message); public void logResponse(banking.Status); public void logCashDispensed(banking.Money); public void logEnvelopeAccepted(); }
ATM/bin/atm/physical/NetworkToBank.class
package atm.physical; public synchronized class NetworkToBank { private Log log; private java.net.InetAddress bankAddress; public void NetworkToBank(Log, java.net.InetAddress); public void openConnection(); public void closeConnection(); public banking.Status sendMessage(banking.Message, banking.Balances); }
ATM/bin/atm/physical/OperatorPanel.class
package atm.physical; public synchronized class OperatorPanel { private atm.ATM atm; public void OperatorPanel(atm.ATM); public banking.Money getInitialCash(); }
ATM/bin/atm/physical/ReceiptPrinter.class
package atm.physical; public synchronized class ReceiptPrinter { public void ReceiptPrinter(); public void printReceipt(banking.Receipt); }
ATM/bin/atm/Session.class
package atm; public synchronized class Session { private ATM atm; private int pin; private int state; private static final int READING_CARD_STATE = 1; private static final int READING_PIN_STATE = 2; private static final int CHOOSING_TRANSACTION_STATE = 3; private static final int PERFORMING_TRANSACTION_STATE = 4; private static final int EJECTING_CARD_STATE = 5; private static final int FINAL_STATE = 6; public void Session(ATM); public void performSession(); public void setPIN(int); }
ATM/bin/atm/transaction/Deposit$1.class
package atm.transaction; synchronized class Deposit$1 extends banking.Receipt { void Deposit$1(Deposit, atm.ATM, banking.Card, Transaction, banking.Balances); }
ATM/bin/atm/transaction/Deposit.class
package atm.transaction; public synchronized class Deposit extends Transaction { private int to; private banking.Money amount; public void Deposit(atm.ATM, atm.Session, banking.Card, int); protected banking.Message getSpecificsFromCustomer() throws atm.physical.CustomerConsole$Cancelled; protected banking.Receipt completeTransaction() throws atm.physical.CustomerConsole$Cancelled; }
ATM/bin/atm/transaction/Inquiry$1.class
package atm.transaction; synchronized class Inquiry$1 extends banking.Receipt { void Inquiry$1(Inquiry, atm.ATM, banking.Card, Transaction, banking.Balances); }
ATM/bin/atm/transaction/Inquiry.class
package atm.transaction; public synchronized class Inquiry extends Transaction { private int from; public void Inquiry(atm.ATM, atm.Session, banking.Card, int); protected banking.Message getSpecificsFromCustomer() throws atm.physical.CustomerConsole$Cancelled; protected banking.Receipt completeTransaction(); }
ATM/bin/atm/transaction/Transaction$CardRetained.class
package atm.transaction; public synchronized class Transaction$CardRetained extends Exception { public void Transaction$CardRetained(); }
ATM/bin/atm/transaction/Transaction.class
package atm.transaction; public abstract synchronized class Transaction { protected atm.ATM atm; protected atm.Session session; protected banking.Card card; protected int pin; protected int serialNumber; protected banking.Message message; protected banking.Balances balances; private static final String[] TRANSACTION_TYPES_MENU; private static int nextSerialNumber; private int state; private static final int GETTING_SPECIFICS_STATE = 1; private static final int SENDING_TO_BANK_STATE = 2; private static final int INVALID_PIN_STATE = 3; private static final int COMPLETING_TRANSACTION_STATE = 4; private static final int PRINTING_RECEIPT_STATE = 5; private static final int ASKING_DO_ANOTHER_STATE = 6; static void <clinit>(); protected void Transaction(atm.ATM, atm.Session, banking.Card, int); public static Transaction makeTransaction(atm.ATM, atm.Session, banking.Card, int) throws atm.physical.CustomerConsole$Cancelled; public boolean performTransaction() throws Transaction$CardRetained; public banking.Status performInvalidPINExtension() throws atm.physical.CustomerConsole$Cancelled, Transaction$CardRetained; public int getSerialNumber(); protected abstract banking.Message getSpecificsFromCustomer() throws atm.physical.CustomerConsole$Cancelled; protected abstract banking.Receipt completeTransaction() throws atm.physical.CustomerConsole$Cancelled; }
ATM/bin/atm/transaction/Transfer$1.class
package atm.transaction; synchronized class Transfer$1 extends banking.Receipt { void Transfer$1(Transfer, atm.ATM, banking.Card, Transaction, banking.Balances); }
ATM/bin/atm/transaction/Transfer.class
package atm.transaction; public synchronized class Transfer extends Transaction { private int from; private int to; private banking.Money amount; public void Transfer(atm.ATM, atm.Session, banking.Card, int); protected banking.Message getSpecificsFromCustomer() throws atm.physical.CustomerConsole$Cancelled; protected banking.Receipt completeTransaction(); }
ATM/bin/atm/transaction/Withdrawal$1.class
package atm.transaction; synchronized class Withdrawal$1 extends banking.Receipt { void Withdrawal$1(Withdrawal, atm.ATM, banking.Card, Transaction, banking.Balances); }
ATM/bin/atm/transaction/Withdrawal.class
package atm.transaction; public synchronized class Withdrawal extends Transaction { private int from; private banking.Money amount; public void Withdrawal(atm.ATM, atm.Session, banking.Card, int); protected banking.Message getSpecificsFromCustomer() throws atm.physical.CustomerConsole$Cancelled; protected banking.Receipt completeTransaction(); }
ATM/bin/banking/AccountInformation.class
package banking; public synchronized class AccountInformation { public static final String[] ACCOUNT_NAMES; public static final String[] ACCOUNT_ABBREVIATIONS; static void <clinit>(); public void AccountInformation(); }
ATM/bin/banking/Balances.class
package banking; public synchronized class Balances { private Money total; private Money available; public void Balances(); public void setBalances(Money, Money); public Money getTotal(); public Money getAvailable(); }
ATM/bin/banking/Card.class
package banking; public synchronized class Card { private int number; public void Card(int); public int getNumber(); }
ATM/bin/banking/Message.class
package banking; public synchronized class Message { public static final int WITHDRAWAL = 0; public static final int INITIATE_DEPOSIT = 1; public static final int COMPLETE_DEPOSIT = 2; public static final int TRANSFER = 3; public static final int INQUIRY = 4; private int messageCode; private Card card; private int pin; private int serialNumber; private int fromAccount; private int toAccount; private Money amount; public void Message(int, Card, int, int, int, int, Money); public String toString(); public void setPIN(int); public int getMessageCode(); public Card getCard(); public int getPIN(); public int getSerialNumber(); public int getFromAccount(); public int getToAccount(); public Money getAmount(); }
ATM/bin/banking/Money.class
package banking; public synchronized class Money { private long cents; public void Money(int); public void Money(int, int); public void Money(Money); public String toString(); public void add(Money); public void subtract(Money); public boolean lessEqual(Money); }
ATM/bin/banking/Receipt$1.class
package banking; synchronized class Receipt$1 implements java.util.Enumeration { private int portion; private int index; void Receipt$1(Receipt); public boolean hasMoreElements(); public Object nextElement(); }
ATM/bin/banking/Receipt.class
package banking; public abstract synchronized class Receipt { private String[] headingPortion; protected String[] detailsPortion; private String[] balancesPortion; protected void Receipt(atm.ATM, Card, atm.transaction.Transaction, Balances); public java.util.Enumeration getLines(); }
ATM/bin/banking/Status.class
package banking; public abstract synchronized class Status { public void Status(); public String toString(); public abstract boolean isSuccess(); public abstract boolean isInvalidPIN(); public abstract String getMessage(); }
ATM/bin/main/ATMApplet.class
package main; public synchronized class ATMApplet extends java.applet.Applet { public void ATMApplet(); public void init(); }
ATM/bin/main/ATMMain$1.class
package main; synchronized class ATMMain$1 implements java.awt.event.ActionListener { void ATMMain$1(); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/main/ATMMain$2.class
package main; synchronized class ATMMain$2 extends java.awt.event.WindowAdapter { void ATMMain$2(); public void windowClosing(java.awt.event.WindowEvent); }
ATM/bin/main/ATMMain.class
package main; public synchronized class ATMMain { public void ATMMain(); public static void main(String[]); }
ATM/bin/simulation/ATMPanel$1.class
package simulation; synchronized class ATMPanel$1 implements java.awt.event.ActionListener { void ATMPanel$1(ATMPanel, GUI); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/ATMPanel.class
package simulation; synchronized class ATMPanel extends java.awt.Panel { public static final int DISPLAYABLE_LINES = 9; public static final String BLANK_DISPLAY_LINE = ; public static final int PRINTABLE_LINES = 9; public static final int PRINTABLE_CHARS = 30; private static final int DISPLAY_ROW = 0; private static final int DISPLAY_COL = 0; private static final int DISPLAY_WIDTH = 3; private static final int DISPLAY_HEIGHT = 1; private static final int DISPLAY_FILL = 1; private static final int PRINTER_ROW = 0; private static final int PRINTER_COL = 3; private static final int PRINTER_WIDTH = 1; private static final int PRINTER_HEIGHT = 1; private static final int PRINTER_FILL = 0; private static final int ENVELOPE_ROW = 1; private static final int ENVELOPE_COL = 0; private static final int ENVELOPE_WIDTH = 1; private static final int ENVELOPE_HEIGHT = 1; private static final int ENVELOPE_FILL = 0; private static final int DISPENSER_ROW = 1; private static final int DISPENSER_COL = 1; private static final int DISPENSER_WIDTH = 1; private static final int DISPENSER_HEIGHT = 1; private static final int DISPENSER_FILL = 0; private static final int READER_ROW = 1; private static final int READER_COL = 2; private static final int READER_WIDTH = 1; private static final int READER_HEIGHT = 1; private static final int READER_FILL = 0; private static final int KEYBOARD_ROW = 1; private static final int KEYBOARD_COL = 3; private static final int KEYBOARD_WIDTH = 1; private static final int KEYBOARD_HEIGHT = 1; private static final int KEYBOARD_FILL = 0; private static final int SHOW_LOG_BUTTON_ROW = 2; private static final int SHOW_LOG_BUTTON_COL = 0; private static final int SHOW_LOG_BUTTON_WIDTH = 1; private static final int SHOW_LOG_BUTTON_HEIGHT = 1; private static final int SHOW_LOG_BUTTON_FILL = 1; private static final int OPERATOR_ROW = 2; private static final int OPERATOR_COL = 1; private static final int OPERATOR_WIDTH = 3; private static final int OPERATOR_HEIGHT = 1; private static final int OPERATOR_FILL = 1; private static final int TOTAL_ROWS = 3; private static final int TOTAL_COLS = 3; void ATMPanel(GUI, SimOperatorPanel, SimCardReader, SimDisplay, SimKeyboard, SimCashDispenser, SimEnvelopeAcceptor, SimReceiptPrinter); }
ATM/bin/simulation/BillsPanel$1.class
package simulation; synchronized class BillsPanel$1 implements java.awt.event.ActionListener { void BillsPanel$1(BillsPanel); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/BillsPanel.class
package simulation; synchronized class BillsPanel extends java.awt.Panel { private java.awt.TextField billsNumberField; void BillsPanel(); synchronized int readBills(); }
ATM/bin/simulation/CardPanel$1.class
package simulation; synchronized class CardPanel$1 implements java.awt.event.ActionListener { void CardPanel$1(CardPanel); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/CardPanel.class
package simulation; synchronized class CardPanel extends java.awt.Panel { private java.awt.TextField cardNumberField; void CardPanel(); synchronized int readCardNumber(); }
ATM/bin/simulation/GUI.class
package simulation; synchronized class GUI extends java.awt.Panel { private java.awt.CardLayout mainLayout; private ATMPanel atmPanel; private BillsPanel billsPanel; private CardPanel cardPanel; private LogPanel logPanel; void GUI(SimOperatorPanel, SimCardReader, SimDisplay, SimKeyboard, SimCashDispenser, SimEnvelopeAcceptor, SimReceiptPrinter); public banking.Money getInitialCash(); public banking.Card readCard(); public void printLogLine(String); void showCard(String); static java.awt.GridBagConstraints makeConstraints(int, int, int, int, int); }
ATM/bin/simulation/LogPanel$1.class
package simulation; synchronized class LogPanel$1 implements java.awt.event.ActionListener { void LogPanel$1(LogPanel); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/LogPanel$2.class
package simulation; synchronized class LogPanel$2 implements java.awt.event.ActionListener { void LogPanel$2(LogPanel, GUI); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/LogPanel.class
package simulation; synchronized class LogPanel extends java.awt.Panel { private java.awt.TextArea logPrintArea; void LogPanel(GUI); void println(String); }
ATM/bin/simulation/SimCardReader$1.class
package simulation; synchronized class SimCardReader$1 implements java.awt.event.ActionListener { void SimCardReader$1(SimCardReader, Simulation); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimCardReader.class
package simulation; synchronized class SimCardReader extends java.awt.Button { private java.awt.Rectangle originalBounds; void SimCardReader(Simulation); void animateInsertion(); void animateEjection(); void animateRetention(); }
ATM/bin/simulation/SimCashDispenser.class
package simulation; synchronized class SimCashDispenser extends java.awt.Panel { private java.awt.Label label; void SimCashDispenser(); public void animateDispensingCash(banking.Money); }
ATM/bin/simulation/SimDisplay.class
package simulation; synchronized class SimDisplay extends java.awt.Panel { private java.awt.Label[] displayLine; private int currentDisplayLine; void SimDisplay(); void clearDisplay(); void display(String); void setEcho(String); public java.awt.Insets getInsets(); }
ATM/bin/simulation/SimEnvelopeAcceptor$1.class
package simulation; synchronized class SimEnvelopeAcceptor$1 implements java.awt.event.ActionListener { void SimEnvelopeAcceptor$1(SimEnvelopeAcceptor); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimEnvelopeAcceptor.class
package simulation; synchronized class SimEnvelopeAcceptor extends java.awt.Button { private boolean inserted; private static long MAXIMUM_WAIT_TIME; static void <clinit>(); void SimEnvelopeAcceptor(); public synchronized boolean acceptEnvelope(); public synchronized void cancelRequested(); }
ATM/bin/simulation/SimKeyboard$1.class
package simulation; synchronized class SimKeyboard$1 implements java.awt.event.ActionListener { void SimKeyboard$1(SimKeyboard); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimKeyboard$2.class
package simulation; synchronized class SimKeyboard$2 implements java.awt.event.ActionListener { void SimKeyboard$2(SimKeyboard); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimKeyboard$3.class
package simulation; synchronized class SimKeyboard$3 implements java.awt.event.ActionListener { void SimKeyboard$3(SimKeyboard); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimKeyboard$4.class
package simulation; synchronized class SimKeyboard$4 implements java.awt.event.ActionListener { void SimKeyboard$4(SimKeyboard); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimKeyboard$5.class
package simulation; synchronized class SimKeyboard$5 extends java.awt.event.KeyAdapter { void SimKeyboard$5(SimKeyboard); public void keyPressed(java.awt.event.KeyEvent); }
ATM/bin/simulation/SimKeyboard.class
package simulation; synchronized class SimKeyboard extends java.awt.Panel { private SimDisplay display; private SimEnvelopeAcceptor envelopeAcceptor; private int mode; private static final int IDLE_MODE = 0; private static final int PIN_MODE = 1; private static final int AMOUNT_MODE = 2; private static final int MENU_MODE = 3; private StringBuffer currentInput; private boolean cancelled; private int maxValue; void SimKeyboard(SimDisplay, SimEnvelopeAcceptor); synchronized String readInput(int, int); private synchronized void digitKeyPressed(int); private synchronized void enterKeyPressed(); private synchronized void clearKeyPressed(); private synchronized void cancelKeyPressed(); private void setEcho(String); }
ATM/bin/simulation/SimOperatorPanel$1.class
package simulation; synchronized class SimOperatorPanel$1 implements java.awt.event.ActionListener { void SimOperatorPanel$1(SimOperatorPanel, java.awt.Button, java.awt.Label, Simulation); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimOperatorPanel$2.class
package simulation; synchronized class SimOperatorPanel$2 extends Thread { void SimOperatorPanel$2(SimOperatorPanel, java.awt.Label, java.awt.Button); public void run(); }
ATM/bin/simulation/SimOperatorPanel.class
package simulation; synchronized class SimOperatorPanel extends java.awt.Panel { void SimOperatorPanel(Simulation); }
ATM/bin/simulation/SimReceiptPrinter$1.class
package simulation; synchronized class SimReceiptPrinter$1 implements java.awt.event.ActionListener { void SimReceiptPrinter$1(SimReceiptPrinter); public void actionPerformed(java.awt.event.ActionEvent); }
ATM/bin/simulation/SimReceiptPrinter.class
package simulation; synchronized class SimReceiptPrinter extends java.awt.Panel { private java.awt.TextArea printArea; private java.awt.Button take; void SimReceiptPrinter(); void println(String); }
ATM/bin/simulation/SimulatedBank$Failure.class
package simulation; synchronized class SimulatedBank$Failure extends banking.Status { private String message; public void SimulatedBank$Failure(String); public boolean isSuccess(); public boolean isInvalidPIN(); public String getMessage(); }
ATM/bin/simulation/SimulatedBank$InvalidPIN.class
package simulation; synchronized class SimulatedBank$InvalidPIN extends SimulatedBank$Failure { public void SimulatedBank$InvalidPIN(); public boolean isInvalidPIN(); }
ATM/bin/simulation/SimulatedBank$Success.class
package simulation; synchronized class SimulatedBank$Success extends banking.Status { private void SimulatedBank$Success(); public boolean isSuccess(); public boolean isInvalidPIN(); public String getMessage(); }
ATM/bin/simulation/SimulatedBank.class
package simulation; public synchronized class SimulatedBank { private static final int[] PIN; private static final int[][] ACCOUNT_NUMBER; private static banking.Money[] WITHDRAWALS_TODAY; private static final banking.Money DAILY_WITHDRAWAL_LIMIT; private banking.Money[] BALANCE; private banking.Money[] AVAILABLE_BALANCE; static void <clinit>(); public void SimulatedBank(); public banking.Status handleMessage(banking.Message, banking.Balances); private banking.Status withdrawal(banking.Message, banking.Balances); private banking.Status initiateDeposit(banking.Message); private banking.Status completeDeposit(banking.Message, banking.Balances); private banking.Status transfer(banking.Message, banking.Balances); private banking.Status inquiry(banking.Message, banking.Balances); }
ATM/bin/simulation/Simulation.class
package simulation; public synchronized class Simulation { public static final int PIN_MODE = 1; public static final int AMOUNT_MODE = 2; public static final int MENU_MODE = 3; private atm.ATM atm; private SimOperatorPanel operatorPanel; private SimCardReader cardReader; private SimDisplay display; private SimKeyboard keyboard; private SimCashDispenser cashDispenser; private SimEnvelopeAcceptor envelopeAcceptor; private SimReceiptPrinter receiptPrinter; private GUI gui; private SimulatedBank simulatedBank; private static Simulation theInstance; public void Simulation(atm.ATM); public static Simulation getInstance(); public banking.Money getInitialCash(); public banking.Card readCard(); public void ejectCard(); public void retainCard(); public void clearDisplay(); public void display(String); public String readInput(int, int); public void dispenseCash(banking.Money); public boolean acceptEnvelope(); public void printReceiptLine(String); public void printLogLine(String); public banking.Status sendMessage(banking.Message, banking.Balances); void switchChanged(boolean); void cardInserted(); public GUI getGUI(); public SimulatedBank getSimulatedBank(); }
ATM/src/atm/ATM.java
ATM/src/atm/ATM.java
/*
* ATM Example system - file ATM.java
*
* copyright (c) 2001 - Russell C. Bjork
*
*/
package
atm
;
import
java
.
net
.
InetAddress
;
import
atm
.
physical
.
*
;
import
banking
.
Card
;
import
banking
.
Money
;
/** Representation for the ATM itself. An object of this class "owns"
* the objects representing the component parts of the ATM, and the
* communications network, and is responsible for creating customer
* sessions which then use it to gain access to the component parts.
* This is an active class - when an instance of the class is created,
* a thread is executed that actually runs the system.
*/
public
class
ATM
implements
Runnable
{
/** Constructor
*
*
@param
id the unique ID for this ATM
*
@param
place the physical location of this ATM
*
@param
bankName the name of the bank owning this ATM
*
@param
bankAddress the Internet address of the bank
*/
public
ATM
(
int
id
,
String
place
,
String
bankName
,
InetAddress
bankAddress
)
{
this
.
id
=
id
;
this
.
place
=
place
;
this
.
bankName
=
bankName
;
this
.
bankAddress
=
bankAddress
;
// Create objects corresponding to component parts
log
=
new
Log
();
cardReader
=
new
CardReader
(
this
);
cashDispenser
=
new
CashDispenser
(
log
);
customerConsole
=
new
CustomerConsole
();
envelopeAcceptor
=
new
EnvelopeAcceptor
(
log
);
networkToBank
=
new
NetworkToBank
(
log
,
bankAddress
);
operatorPanel
=
new
OperatorPanel
(
this
);
receiptPrinter
=
new
ReceiptPrinter
();
// Set up initial conditions when ATM first created
state
=
OFF_STATE
;
switchOn
=
false
;
cardInserted
=
false
;
}
// Methods corresponding to major responsibilities of the ATM
/** The main program/applet will create a Thread that executes
* this code.
*/
public
void
run
()
{
Session
currentSession
=
null
;
while
(
true
)
{
switch
(
state
)
{
case
OFF_STATE
:
customerConsole
.
display
(
"Not currently available"
);
synchronized
(
this
)
{
try
{
wait
();
}
catch
(
InterruptedException
e
)
{
}
}
if
(
switchOn
)
{
performStartup
();
state
=
IDLE_STATE
;
}
break
;
case
IDLE_STATE
:
customerConsole
.
display
(
"Please insert your card"
);
cardInserted
=
false
;
synchronized
(
this
)
{
try
{
wait
();
}
catch
(
InterruptedException
e
)
{
}
}
if
(
cardInserted
)
{
currentSession
=
new
Session
(
this
);
state
=
SERVING_CUSTOMER_STATE
;
}
else
if
(
!
switchOn
)
{
performShutdown
();
state
=
OFF_STATE
;
}
break
;
case
SERVING_CUSTOMER_STATE
:
// The following will not return until the session has
// completed
currentSession
.
performSession
();
state
=
IDLE_STATE
;
break
;
}
}
}
/** Inform the ATM that the switch on the operator console has been moved
* to the "on" position.
*/
public
synchronized
void
switchOn
()
{
switchOn
=
true
;
notify
();
}
/** Inform the ATM that the switch on the operator console has been moved
* to the "off" position.
*/
public
synchronized
void
switchOff
()
{
switchOn
=
false
;
notify
();
}
/** Inform the ATM that a card has been inserted into the card reader.
*/
public
synchronized
void
cardInserted
()
{
cardInserted
=
true
;
notify
();
}
// The following methods allow objects of other classes to access component
// parts of the ATM
/** Accessor for id
*
*
@return
unique id of this ATM
*/
public
int
getID
()
{
return
id
;
}
/** Accessor for place
*
*
@return
physical location of this ATM
*/
public
String
getPlace
()
{
return
place
;
}
/** Accessor for bank name
*
*
@return
name of bank owning this ATM
*/
public
String
getBankName
()
{
return
bankName
;
}
/** Accessor for card reader
*
*
@return
card reader component of this ATM
*/
public
CardReader
getCardReader
()
{
return
cardReader
;
}
/** Accessor for cash dispenser
*
*
@return
cash dispenser component of this ATM
*/
public
CashDispenser
getCashDispenser
()
{
return
cashDispenser
;
}
/** Accessor for customer console
*
*
@return
customer console component of this ATM
*/
public
CustomerConsole
getCustomerConsole
()
{
return
customerConsole
;
}
/** Accessor for envelope acceptor
*
*
@return
envelope acceptor component of this ATM
*/
public
EnvelopeAcceptor
getEnvelopeAcceptor
()
{
return
envelopeAcceptor
;
}
/** Accessor for log
*
*
@return
log component of this ATM
*/
public
Log
getLog
()
{
return
log
;
}
/** Accessor for network to bank
*
*
@return
network connection to bank of this ATM
*/
public
NetworkToBank
getNetworkToBank
()
{
return
networkToBank
;
}
/** Accessor for operator panel
*
*
@return
operator panel component of this ATM
*/
public
OperatorPanel
getOperatorPanel
()
{
return
operatorPanel
;
}
/** Accessor for receipt printer
*
*
@return
receipt printer component of this ATM
*/
public
ReceiptPrinter
getReceiptPrinter
()
{
return
receiptPrinter
;
}
// Private methods
/** Perform the System Startup use case when switch is turned on
*/
private
void
performStartup
()
{
Money
initialCash
=
operatorPanel
.
getInitialCash
();
cashDispenser
.
setInitialCash
(
initialCash
);
networkToBank
.
openConnection
();
}
/** Perform the System Shutdown use case when switch is turned off
*/
private
void
performShutdown
()
{
networkToBank
.
closeConnection
();
}
// Instance variables recording information about the ATM
/** Unique ID for this ATM
*/
private
int
id
;
/** Physical location of this ATM
*/
private
String
place
;
/** Name of the bank owning this ATM
*/
private
String
bankName
;
/** Internet address of the bank
*/
private
InetAddress
bankAddress
;
// Instance variables referring to the omponent parts of the ATM
/** The ATM's card reader
*/
private
CardReader
cardReader
;
/** The ATM's cash dispenser
*/