@Override
    protected void parse(Map<String, String> options) {
        this.options = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
        this.options.putAll(options);
    }
A generic options parser for {@code Map<String, String> options}, which is commonly found on components,
etc.

<p>If a component has relatively simple options parsing requirements, then this parser may suffice,
rather than writing your own {@link AbstractOptions} implementation in a fairly robust way.

<p>Broadly, it has the following features:

<dl>
    <dt>Key aliases</dt>
    <dd>Ordered list of key aliases to look up, the first non-null value will be returned.</dd>

    <dt>Key insensitivity</dt>
    <dd>Key matches are cAsE iNSenSiTiVe.</dd>

    <dt>Default value</dt>
    <dd>If no non-null value is found via any of the aliases, then a default value will be returned.</dd>

    <dt>Constraint checking</dt>
    <dd>A boolean constraint check invoked on the first value that is successfully parsed.
    A {@link InvalidOptionConfigurationException} will be thrown that describes the failure
    using information provided, plus a provided message.
    </dd>

    <dt>Constraint violation message</dt>
    <dd>A useful message appended to any generated exception when a constraint violation occurs.
    The implementor should use it to describe why a constraint failure triggered. For example,
    'port must be greater than zero'.
    </dd>
</dl>

@author Marc Savy {@literal <marc@blackparrotlabs.io>}.
common/config/src/main/java/io/apiman/common/config/options/GenericOptionsParser.java