commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emmanuel Bourg <ebo...@apache.org>
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 11:14:03 GMT
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


Mime
View raw message