commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oliver Heger <oliver.he...@oliver-heger.de>
Subject Re: svn commit: r631875 - in /commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr: ./ ExpressionEngine.java NodeAddData.java NodeHandler.java
Date Thu, 28 Feb 2008 21:39:15 GMT
NodeHandler serves as an additional layer of abstraction between a 
hierarchical configuration and its node structure.

So far hierarchical configurations directly operate on ConfigurationNode 
objects, which means that the whole structure has to be present in 
memory as node objects. This is less suitable for other structures that 
are also hierarchical, but define their own object model, for instance 
JNDI or the Java preferences API.

The idea is now to access nodes only through a NodeHandler. With 
different implementation of this interface, a hierarchical configuration 
can deal with different node structures. ConfigurationNode would still 
be used by in-memory configurations; so there would be a corresponding 
handler implementation. Other implementations for JNDI contexts or Java 
Preferences could be created.

That's at least the theory. Will have to see how this works out in practice.

Oliver

Emmanuel Bourg schrieb:
> Oliver, I'm not sure to follow you on the NodeHandler, could you explain 
> the "big picture" behind it ? Does it mean the removal of 
> ConfigurationNode ?
> 
> Emmanuel Bourg
> 
> 
> 
> oheger@apache.org a écrit :
>> Author: oheger
>> Date: Wed Feb 27 23:03:05 2008
>> New Revision: 631875
>>
>> URL: http://svn.apache.org/viewvc?rev=631875&view=rev
>> Log:
>> Added experimental NodeHandler interface
>>
>> Added:
>>     
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/

>>
>>     
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/ExpressionEngine.java

>>
>>       - copied, changed from r630471, 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/ExpressionEngine.java

>>
>>     
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeAddData.java

>>
>>       - copied, changed from r630471, 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/NodeAddData.java

>>
>>     
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java
  
>> (with props)
>>
>> Copied: 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/ExpressionEngine.java

>> (from r630471, 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/ExpressionEngine.java)

>>
>> URL: 
>> http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/ExpressionEngine.java?p2=commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/ExpressionEngine.java&p1=commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/ExpressionEngine.java&r1=630471&r2=631875&rev=631875&view=diff

>>
>> ============================================================================== 
>>
>> --- 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/ExpressionEngine.java

>> (original)
>> +++ 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/ExpressionEngine.java

>> Wed Feb 27 23:03:05 2008
>> @@ -14,7 +14,7 @@
>>   * See the License for the specific language governing permissions and
>>   * limitations under the License.
>>   */
>> -package org.apache.commons.configuration2.tree;
>> +package org.apache.commons.configuration2.expr;
>>  
>>  import java.util.List;
>>  
>> @@ -34,7 +34,7 @@
>>   * configuration nodes are addressed by the key.
>>   * </p>
>>   * <p>
>> - * Seperating the task of evaluating property keys from the 
>> configuration object
>> + * 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,
>> @@ -52,14 +52,17 @@
>>       * 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.
>> +     * exception indicating this error condition. The passed in
>> +     * <code>{@link NodeHandler}</code> can be used for accessing the

>> properties
>> +     * of the node.
>>       *
>>       * @param root the root node of a hierarchy of configuration nodes
>>       * @param key the key to be evaluated
>> +     * @param handler the node handler to be used
>>       * @return a list with the nodes that are matched by the key 
>> (should never
>>       * be <b>null</b>)
>>       */
>> -    List<ConfigurationNode> query(ConfigurationNode root, String key);
>> +    <T> List<T> query(T root, String key, NodeHandler<T> handler);
>>  
>>      /**
>>       * Returns the key for the specified node in the expression language
>> @@ -71,9 +74,10 @@
>>       * @param node the node, for which the key must be constructed
>>       * @param parentKey the key of this node's parent (can be 
>> <b>null</b> for
>>       * the root node)
>> +     * @param handler the node handler
>>       * @return this node's key
>>       */
>> -    String nodeKey(ConfigurationNode node, String parentKey);
>> +    <T> String nodeKey(T node, String parentKey, NodeHandler<T> 
>> handler);
>>  
>>      /**
>>       * Returns information needed for an add operation. This method 
>> gets called
>> @@ -83,7 +87,8 @@
>>       *
>>       * @param root the root node
>>       * @param key the key for the new property
>> +     * @param handler the node handler
>>       * @return an object with all information needed for the add 
>> operation
>>       */
>> -    NodeAddData prepareAdd(ConfigurationNode root, String key);
>> +    <T> NodeAddData<T> prepareAdd(T root, String key, NodeHandler<T>

>> handler);
>>  }
>>
>> Copied: 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeAddData.java

>> (from r630471, 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/NodeAddData.java)

>>
>> URL: 
>> http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeAddData.java?p2=commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeAddData.java&p1=commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/NodeAddData.java&r1=630471&r2=631875&rev=631875&view=diff

>>
>> ============================================================================== 
>>
>> --- 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/NodeAddData.java

>> (original)
>> +++ 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeAddData.java

>> Wed Feb 27 23:03:05 2008
>> @@ -14,7 +14,7 @@
>>   * See the License for the specific language governing permissions and
>>   * limitations under the License.
>>   */
>> -package org.apache.commons.configuration2.tree;
>> +package org.apache.commons.configuration2.expr;
>>  
>>  import java.util.Collections;
>>  import java.util.LinkedList;
>> @@ -48,10 +48,10 @@
>>   * @since 1.3
>>   * @author Oliver Heger
>>   */
>> -public class NodeAddData
>> +public class NodeAddData<T>
>>  {
>>      /** Stores the parent node of the add operation. */
>> -    private ConfigurationNode parent;
>> +    private T parent;
>>  
>>      /**
>>       * Stores a list with nodes that are on the path between the 
>> parent node and
>> @@ -80,7 +80,7 @@
>>       * @param parent the parent node
>>       * @param nodeName the name of the new node
>>       */
>> -    public NodeAddData(ConfigurationNode parent, String nodeName)
>> +    public NodeAddData(T parent, String nodeName)
>>      {
>>          setParent(parent);
>>          setNewNodeName(nodeName);
>> @@ -134,7 +134,7 @@
>>       *
>>       * @return the parent node
>>       */
>> -    public ConfigurationNode getParent()
>> +    public T getParent()
>>      {
>>          return parent;
>>      }
>> @@ -144,7 +144,7 @@
>>       *
>>       * @param parent the parent node
>>       */
>> -    public void setParent(ConfigurationNode parent)
>> +    public void setParent(T parent)
>>      {
>>          this.parent = parent;
>>      }
>>
>> Added: 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java

>>
>> URL: 
>> http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java?rev=631875&view=auto

>>
>> ============================================================================== 
>>
>> --- 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java

>> (added)
>> +++ 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java

>> Wed Feb 27 23:03:05 2008
>> @@ -0,0 +1,133 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, 
>> Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *     http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.commons.configuration2.expr;
>> +
>> +import java.util.List;
>> +
>> +/**
>> + * <p>
>> + * Definition of an interface for dealing with the nodes of a 
>> hierarchical
>> + * configuration.
>> + * </p>
>> + * <p>
>> + * Different configuration implementations internally use different node
>> + * structures. This interface provides a generic way of dealing with 
>> these
>> + * structures by providing common query and manipulation methods. 
>> That way large
>> + * parts of the functionality required by a hierarchical 
>> configuration can be
>> + * implemented in a central base class, while tasks specific for a 
>> concrete node
>> + * structure are delegated to an implementation of this interface.
>> + * </p>
>> + *
>> + * @author Oliver Heger
>> + * @version $Id$
>> + * @param <T> the type of the nodes this handler deals with
>> + */
>> +public interface NodeHandler<T>
>> +{
>> +    /**
>> +     * Returns the name of the specified node
>> +     *
>> +     * @param node the node
>> +     * @return the name of this node
>> +     */
>> +    String nodeName(T node);
>> +
>> +    /**
>> +     * Returns the value of the specified node.
>> +     *
>> +     * @param node the node
>> +     * @return the value of this node
>> +     */
>> +    Object getValue(T node);
>> +
>> +    /**
>> +     * Sets the value of the specified node.
>> +     *
>> +     * @param node the node
>> +     * @param value the new value
>> +     */
>> +    void setValue(T node, Object value);
>> +
>> +    /**
>> +     * Returns the parent of the specified node.
>> +     *
>> +     * @param node the node
>> +     * @return the parent node
>> +     */
>> +    T getParent(T node);
>> +
>> +    /**
>> +     * Adds a child with the given node name to the specified node.
>> +     *
>> +     * @param node the node
>> +     * @param name the name of the new child
>> +     * @return the newly added child
>> +     */
>> +    T addChild(T node, String name);
>> +
>> +    /**
>> +     * Returns a list with all children of the specified node.
>> +     *
>> +     * @param node the node
>> +     * @return a list with the child nodes of this node
>> +     */
>> +    List<T> getChildren(T node);
>> +
>> +    /**
>> +     * Returns a list of all children of the specified node with the 
>> given name.
>> +     *
>> +     * @param node the node
>> +     * @param name the name of the desired child nodes
>> +     * @return a list with all children with the given name
>> +     */
>> +    List<T> getChildren(T node, String name);
>> +
>> +    /**
>> +     * Returns the child with the given index of the specified node.
>> +     *
>> +     * @param node the node
>> +     * @param index the index (0-based)
>> +     * @return the child with the given index
>> +     */
>> +    T getChild(T node, int index);
>> +
>> +    /**
>> +     * Returns a list with the names of all attributes of the 
>> specified node.
>> +     *
>> +     * @param node the node
>> +     * @return a list with all attributes of this node
>> +     */
>> +    List<String> getAttributes(T node);
>> +
>> +    /**
>> +     * Returns the value of the specified attribute from the given node.
>> +     *
>> +     * @param node the node
>> +     * @param name the name of the attribute
>> +     * @return the value of this attribute
>> +     */
>> +    Object getAttributeValue(T node, String name);
>> +
>> +    /**
>> +     * Sets the value of an attribute for the specified node.
>> +     *
>> +     * @param node the node
>> +     * @param name the name of the attribute
>> +     * @param value the value of the attribute
>> +     */
>> +    void setAttributeValue(T node, String name, Object value);
>> +}
>>
>> Propchange: 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java

>>
>> ------------------------------------------------------------------------------ 
>>
>>     svn:eol-style = native
>>
>> Propchange: 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java

>>
>> ------------------------------------------------------------------------------ 
>>
>>     svn:keywords = Date Author Id Revision HeadURL
>>
>> Propchange: 
>> commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/expr/NodeHandler.java

>>
>> ------------------------------------------------------------------------------ 
>>
>>     svn:mime-type = text/plain
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message