LightOptionParser
-----------------
Lightweight, fairly featureful option parsing mechanism idiomatic to Groovy.
Takes in a map of parameter definitions and returns a map of option values and
arguments.
NullOutputStream
----------------
Ignores all data sent its way.
ParameterizedSocket
-------------------
Added trace and debug logging to the message handling code.
SmartConfig
-----------
Fixed a bug where a property lookup on a non-existent property with no default
given caused a null pointer exception trying to resolve the class of the default
value.
ParameterizedSocket
-------------------
Moved from transmitting a list of strings (represented by ASCII data separated
by ASCII record separators `0x1E`) to a combination of strings and paired
strings. Basically, instead of each record being processed as a whole, a record
may optionall contain the ASCII unit separator `0x1F`. If it does, the record
will be split and treated as a key-value pair. This is implemented in the
`ParameterizedSocket.Message` class.o
LoggerOutputStream
------------------
Was not initializing the internal buffer.
ParameterizedSocket
-------------------
This is a wrapper around the basic java.net.Socket class that supports sending
and receiving messages with parameters. It exposes two methods:
`void sendMessage(String... message)` and `String[] receiveMessage()`. The
line-level format of the message is:
START_TOKEN param [SEPARATOR param ...] END_TOKEN
Where `START_TOKEN` is the ASCII "Start heading" control code `0x01`,
`SEPARATOR` is the ASCII "record separator" code `0x1E`, and `END_TOKEN` is the
ASCII "end of transmission" code `0x03`.
LoggerOutputStream
------------------
An OutputStream implementation that flushes to an org.slf4j.Logger instance.
The log level is configurable. It is important to note that data written to
the stream accumulates in an internal buffer until `flush()` is called. At this
point the data is written out as one log message to the logger. It is expected
that one would wrap this stream in an auto-flushing PrintStream or PrintWriter
in actual use.
Default behavior in SmartConfig was wrong. What it should be (and now is) is
when a value is requested but not present, the value is set and returned with
the default if given, or null is returned if no default is given.
* Changed the behavior of SmartConfig when setting file type properties. Now it
tries to coerce the given value into a File object if it is not already a File
object.
* Changed the behavior of SmartConfig when retrieving a property without
specifying a default value. Now it returns null if the property is not set and
no default is given.
* Added `SmartConfig.load()` to allow runtime reloading of config.
* Added `WrappedPrinter` which allows you to print horizontally aligned and
offset text blocks in a monotype environment.