Definition of an interface for evaluating keys for hierarchical configurations.
An expression engine knows how to map a key for a configuration's property to a single or a set of configuration nodes. Thus it defines the way how properties are addressed in this configuration. Methods of a configuration that have to handle property keys (e.g. {@code getProperty()}or {@code addProperty()} do not interpret the passed in keys on their own,but delegate this task to an associated expression engine. This expression engine will then find out, which configuration nodes are addressed by the key.
Separating the task of evaluating property keys from the configuration object has the advantage that multiple different expression languages (i.e. ways for querying or setting properties) can be supported. Just set a suitable implementation of this interface as the configuration's expression engine, and you can use the syntax provided by this implementation.
An {@code ExpressionEngine} can deal with nodes of different types. Toachieve this, a {@link NodeHandler} for the desired type must be passed tothe methods.
@since 1.3
@version $Id: ExpressionEngine.java 1588831 2014-04-20 19:32:08Z oheger $