## org.apache.commons.configuration.tree
Interface ExpressionEngine

All Known Implementing Classes:
  DefaultExpressionEngine, XPathExpressionEngine

    public interface ExpressionEngine

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 key (e.g. `getProperty()` or `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 many 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.

Since:
  1.3
Version:
  $Id: ExpressionEngine.java 1206474 2011-11-26 16:14:09Z oheger $
Author:
  Commons Configuration team

Method Summary
`String` `nodeKey(ConfigurationNode node, String parentKey)` Returns the key for the specified node in the expression language supported by an implementation.
`NodeAddData` `prepareAdd(ConfigurationNode root, String key)` Returns information needed for an add operation.
`List<ConfigurationNode>` `query(ConfigurationNode root, String key)` Finds the node(s) that is (are) matched by the specified key.

Method Detail

### query

    List<ConfigurationNode> query(ConfigurationNode root,
                                  String key)

  Finds the node(s) that is (are) matched by the specified key. This is the main method for interpreting property keys. An implementation must traverse the given root node and its children to find all nodes that are matched by the given key. If the key is not correct in the syntax provided by that implementation, it is free to throw a (runtime) exception indicating this error condition.

  Parameters:
    `root` - the root node of a hierarchy of configuration nodes
    `key` - the key to be evaluated
  Returns:
    a list with the nodes that are matched by the key (should never be null)

### nodeKey

    String nodeKey(ConfigurationNode node,
                   String parentKey)

  Returns the key for the specified node in the expression language supported by an implementation. This method is called whenever a property key for a node has to be constructed, e.g. by the `getKeys()` method.

  Parameters:
    `node` - the node, for which the key must be constructed
    `parentKey` - the key of this node's parent (can be null for the root node)
  Returns:
    this node's key

### prepareAdd

    NodeAddData prepareAdd(ConfigurationNode root,
                           String key)

  Returns information needed for an add operation. This method gets called when new properties are to be added to a configuration. An implementation has to interpret the specified key, find the parent node for the new elements, and provide all information about new nodes to be added.

  Parameters:
    `root` - the root node
    `key` - the key for the new property
  Returns:
    an object with all information needed for the add operation

Copyright © 2001-2012 The Apache Software Foundation. All Rights Reserved.