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>[EMAIL PROTECTED] 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