Initial Commit

Adding files for my Virtual Proxy presentation. Will use my TerminalIO utility class.

Added:

 * TerminalIO.java: Utility methods for curses-like ANSI terminal I/O.
Add Seeking and Reverse Video Mode

Adds the ability to seek to a particular row and column and the ability to print
text in "reverse video" mode (foreground and background colors reversed) to
TerminalIO.java.

Changes:

 * TerminalIO.java
Add Driver Program

Adds a driver program that prints a menu and gets user input.

Changes:

 * VirtualProxyTest.java
Rename Driver Program

Rename VirtualProxyTest.java to VirtualProxyDriver.java to make it clear it isn't
test cases.

Changes:

 * VirtualProxyTest.java -> VirtualProxyDriver.java
Complete VirtualProxyTest Rename

Rename the class in VirtualProxyDriver.java to VirtualProxyDriver to complete the
rename.

Changes:

 * VirtualProxyDriver.java
Refactor SeekTo Range Checks

Refactors the range checks in TerminalIO's seekTo method into a new method rather
than repeatedly using a ternary operator.

Changes:

 * TerminalIO.java
Add Comments to Driver

Adds a method comment to each method of the driver program.

Changes:

 * VirtualProxyDriver.java
Use Big-Endian Dates in Headers

Modifies file headers to use big-endian (YYYY-MM-DD) dates like my other files.

Changes:

 * TerminalIO.java
 * VirtualProxyDriver.java
Add ExpensiveObject and Its Interface

Add an ExpensiveObject class and an ExpensiveObjectIF interface that it will
share with the Virtual Proxy object.

Added:

 * ExpensiveObject.java
 * ExpensiveObjectIF.java
Change Whitespace in ExpensiveObject

Removes the blank line at the top of the class definition.

Changes:

 * ExpensiveObject.java
Add Virtual Proxy Class

Adds the ExpensiveObjectProxy class, which acts as a virtual proxy for an
ExpensiveObject. The ExpensiveObject is created lazily on first use, and
thereafter method calls are forwarded to it.

Added:

 * ExpensiveObjectProxy.java
Add Plain Printing Mehtod to TerminalIO

Adds a method to the TerminalIO class that prints out text without any additional
formatting (i.e. no highlighting or reverse video), so that all printing goes
through the TerminalIO code.

Changes:

 * TerminalIO.java
Add Method to Clear a Single Line

Adds a method to the TerminalIO class that clears a single line of the screen.
Used to reset the status line in VirtualProxyDriver.

Changes:

 * TerminalIO.java
Use VirtualProxy Class in Driver

Adds code to the VirtualProxyDriver program to use the virtual proxy, demonstrating
that the first call to the proxy takes a long time, but remaining calls are quick.

Refactors the way the VirtualProxyDriver class prints the status line to get rid
of an unnecessary variable.

Changes:

 * VirtualProxyDriver.java
Add Proxy For Missing Class

Adds a proxy object that tries to load a missing class. When attempting to call
any of the methods of the proxy, the program will crash. Demonstrates that the
virtual proxy does not load the class it proxies until called upon.

Added:

 * MissingObjectProxy.java
Add MissingObjectProxy to Driver

Adds a MissingObjectProxy to the driver class and hooks it up to the menu item
that crashes the program.

Changes:

 * VirtualProxyDriver.java
Add Implementation of MissingObject

Adds an implementation of the MissingObject class so that the MissingObjectProxy
can demonstrate dynamic loading (rather than Dynamic Linkage). MissingObject is
the same as ExpensiveObject. We delete its .class file after building to demonstrate
that classes are only loaded when the constructor is called.

Added:

 * MissingObject.java
Clean Up Code of ExpensiveObject

Collapses the empty method bodies in ExpensiveObject.

Changes:

 * ExpensiveObject.java
Don't Use Dynamic Linkage in Proxies

Modifies ExpensiveObjectProxy and MissingObjectProxy so that they don't use Dynamic
Linkage, instead creating the proxied objects directly using their constructor.
(Follow the instructions, dummy.)

Changes:

 * ExpensiveObjectProxy.java
 * MissingObjectProxy.java
Bring Back Driver's status Variable

Brings back the driver class's status instance variable, so that the status
string can persist across screen refreshes.

Changes:

 * VirtualProxyDriver.java