You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2008/03/22 19:50:17 UTC
svn commit: r640051 - in
/commons/proper/configuration/branches/configuration2_experimental/src:
main/java/org/apache/commons/configuration2/
test/java/org/apache/commons/configuration2/
Author: oheger
Date: Sat Mar 22 11:50:16 2008
New Revision: 640051
URL: http://svn.apache.org/viewvc?rev=640051&view=rev
Log:
File-based hierarchical configurations are now derived from AbstractHierarchicalConfiguration
Modified:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java?rev=640051&r1=640050&r2=640051&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java Sat Mar 22 11:50:16 2008
@@ -786,12 +786,26 @@
}
}
+ // Determine root node
+ // TODO This is a workaround as long as there are hierarchical
+ // configurations not derived from AbstractHierarchicalConfiguration.
+ // Remove if refactoring is complete!
+ ConfigurationNode root;
+ if (getConfiguration() instanceof InMemoryConfiguration)
+ {
+ root = ((InMemoryConfiguration) getConfiguration()).getRootNode();
+ }
+ else
+ {
+ HierarchicalConfiguration hc = ConfigurationUtils
+ .convertToHierarchical(getConfiguration());
+ root = hc.getRootNode();
+ }
+
// Copy data of the root node to the new path
- HierarchicalConfiguration hc = ConfigurationUtils
- .convertToHierarchical(getConfiguration());
- atParent.appendChildren(hc.getRootNode());
- atParent.appendAttributes(hc.getRootNode());
- rootNode = hc.getRootNode();
+ atParent.appendChildren(root);
+ atParent.appendAttributes(root);
+ rootNode = root;
return result;
}
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java?rev=640051&r1=640050&r2=640051&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java Sat Mar 22 11:50:16 2008
@@ -32,6 +32,7 @@
import org.apache.commons.configuration2.beanutils.BeanHelper;
import org.apache.commons.configuration2.beanutils.DefaultBeanFactory;
import org.apache.commons.configuration2.beanutils.XMLBeanDeclaration;
+import org.apache.commons.configuration2.expr.NodeList;
import org.apache.commons.configuration2.tree.ConfigurationNode;
import org.apache.commons.configuration2.tree.DefaultExpressionEngine;
import org.apache.commons.configuration2.tree.OverrideCombiner;
@@ -500,11 +501,11 @@
CombinedConfiguration result = createResultConfiguration();
constructedConfiguration = result;
- List<SubnodeConfiguration> overrides = fetchTopLevelOverrideConfigs();
+ List<SubConfiguration<ConfigurationNode>> overrides = fetchTopLevelOverrideConfigs();
overrides.addAll(fetchChildConfigs(KEY_OVERRIDE));
initCombinedConfiguration(result, overrides, KEY_OVERRIDE_LIST);
- List<SubnodeConfiguration> additionals = fetchChildConfigs(KEY_UNION);
+ List<SubConfiguration<ConfigurationNode>> additionals = fetchChildConfigs(KEY_UNION);
if (!additionals.isEmpty())
{
CombinedConfiguration addConfig = new CombinedConfiguration(new UnionCombiner());
@@ -548,27 +549,30 @@
* section (if it exists).
*
* @param config the configuration to be initialized
- * @param containedConfigs the list with the declaratinos of the contained
+ * @param containedConfigs the list with the declarations of the contained
* configurations
* @param keyListNodes a list with the declaration of list nodes
* @throws ConfigurationException if an error occurs
*/
- protected void initCombinedConfiguration(CombinedConfiguration config,
- List<? extends HierarchicalConfiguration> containedConfigs, String keyListNodes) throws ConfigurationException
+ protected void initCombinedConfiguration(
+ CombinedConfiguration config,
+ List<? extends AbstractHierarchicalConfiguration<ConfigurationNode>> containedConfigs,
+ String keyListNodes) throws ConfigurationException
{
- List listNodes = getList(keyListNodes);
- for (Iterator it = listNodes.iterator(); it.hasNext();)
+ List<?> listNodes = getList(keyListNodes);
+ for (Iterator<?> it = listNodes.iterator(); it.hasNext();)
{
config.getNodeCombiner().addListNode((String) it.next());
}
- for (HierarchicalConfiguration conf : containedConfigs)
+ for (AbstractHierarchicalConfiguration<ConfigurationNode> conf : containedConfigs)
{
ConfigurationDeclaration decl = new ConfigurationDeclaration(this, conf);
AbstractConfiguration newConf = createConfigurationAt(decl);
if (newConf != null)
{
- config.addConfiguration(newConf, decl.getConfiguration().getString(ATTR_NAME), decl.getAt());
+ config.addConfiguration(newConf, decl.getConfiguration()
+ .getString(ATTR_NAME), decl.getAt());
}
}
}
@@ -629,16 +633,17 @@
}
/**
- * Returns a list with <code>SubnodeConfiguration</code> objects for the
+ * Returns a list with <code>SubConfiguration</code> objects for the
* child nodes of the specified configuration node.
*
* @param node the start node
* @return a list with subnode configurations for the node's children
*/
- private List<SubnodeConfiguration> fetchChildConfigs(ConfigurationNode node)
+ private List<SubConfiguration<ConfigurationNode>> fetchChildConfigs(ConfigurationNode node)
{
List<ConfigurationNode> children = node.getChildren();
- List<SubnodeConfiguration> result = new ArrayList<SubnodeConfiguration>(children.size());
+ List<SubConfiguration<ConfigurationNode>> result =
+ new ArrayList<SubConfiguration<ConfigurationNode>>(children.size());
for (ConfigurationNode child : children)
{
result.add(createSubnodeConfiguration(child));
@@ -647,18 +652,18 @@
}
/**
- * Returns a list with <code>SubnodeConfiguration</code> objects for the
+ * Returns a list with <code>SubConfiguration</code> objects for the
* child nodes of the node specified by the given key.
*
* @param key the key (must define exactly one node)
* @return a list with subnode configurations for the node's children
*/
- private List<SubnodeConfiguration> fetchChildConfigs(String key)
+ private List<SubConfiguration<ConfigurationNode>> fetchChildConfigs(String key)
{
- List<ConfigurationNode> nodes = fetchNodeList(key);
- if (!nodes.isEmpty())
+ NodeList<ConfigurationNode> nodes = fetchNodeList(key);
+ if (nodes.size() > 0)
{
- return fetchChildConfigs(nodes.get(0));
+ return fetchChildConfigs(nodes.getNode(0));
}
else
{
@@ -673,16 +678,16 @@
* configuration sections. The remaining nodes are treated as definitions
* for override configurations.
*
- * @return a list with subnode configurations for the top level override
+ * @return a list with sub configurations for the top level override
* configurations
*/
- private List<SubnodeConfiguration> fetchTopLevelOverrideConfigs()
+ private List<SubConfiguration<ConfigurationNode>> fetchTopLevelOverrideConfigs()
{
- List<SubnodeConfiguration> configs = fetchChildConfigs(getRootNode());
- Iterator<SubnodeConfiguration> it = configs.iterator();
+ List<SubConfiguration<ConfigurationNode>> configs = fetchChildConfigs(getRootNode());
+ Iterator<SubConfiguration<ConfigurationNode>> it = configs.iterator();
while (it.hasNext())
{
- String nodeName = (it.next()).getRootNode().getName();
+ String nodeName = it.next().getRootNode().getName();
for (int i = 0; i < CONFIG_SECTIONS.length; i++)
{
if (CONFIG_SECTIONS[i].equals(nodeName))
@@ -906,7 +911,7 @@
* factory is never needed.
* </p>
*/
- public static class ConfigurationDeclaration extends XMLBeanDeclaration
+ public static class ConfigurationDeclaration extends XMLBeanDeclaration<ConfigurationNode>
{
/** Stores a reference to the associated configuration builder. */
private DefaultConfigurationBuilder configurationBuilder;
@@ -919,7 +924,7 @@
* @param config the configuration this declaration is based onto
*/
public ConfigurationDeclaration(DefaultConfigurationBuilder builder,
- HierarchicalConfiguration config)
+ AbstractHierarchicalConfiguration<ConfigurationNode> config)
{
super(config);
configurationBuilder = builder;
@@ -1006,24 +1011,23 @@
}
/**
- * Checks whether the given node is reserved. This method will take
- * further reserved attributes into account
- *
- * @param nd the node
- * @return a flag whether this node is reserved
+ * Checks whether the given attribute is reserved. This method will take
+ * further reserved attributes into account.
+ * @param parent the parent node
+ * @param name the name of the affected attribute
*/
- protected boolean isReservedNode(ConfigurationNode nd)
+ @Override
+ protected boolean isReservedAttribute(ConfigurationNode parent, String name)
{
- if (super.isReservedNode(nd))
+ if (super.isReservedAttribute(parent, name))
{
return true;
}
- return nd.isAttribute()
- && ((ATTR_ATNAME.equals(nd.getName()) && nd.getParentNode()
- .getAttributeCount(RESERVED_PREFIX + ATTR_ATNAME) == 0) || (ATTR_OPTIONALNAME
- .equals(nd.getName()) && nd.getParentNode()
- .getAttributeCount(RESERVED_PREFIX + ATTR_OPTIONALNAME) == 0));
+ return ((ATTR_ATNAME.equals(name) && getNodeHandler()
+ .getAttributeValue(parent, RESERVED_PREFIX + ATTR_ATNAME) == null) || (ATTR_OPTIONALNAME
+ .equals(name) && getNodeHandler().getAttributeValue(parent,
+ RESERVED_PREFIX + ATTR_OPTIONALNAME) == null));
}
/**
Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java?rev=640051&r1=640050&r2=640051&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java Sat Mar 22 11:50:16 2008
@@ -59,8 +59,9 @@
private static final String OPTIONAL_NAME = "optionalConfig";
/** Stores the object to be tested. */
- DefaultConfigurationBuilder factory;
+ private DefaultConfigurationBuilder factory;
+ @Override
protected void setUp() throws Exception
{
super.setUp();
@@ -83,20 +84,19 @@
DefaultConfigurationNode parent = new DefaultConfigurationNode();
DefaultConfigurationNode nd = new DefaultConfigurationNode("at");
parent.addAttribute(nd);
- assertTrue("Attribute at not recognized", decl.isReservedNode(nd));
+ assertTrue("Attribute at not recognized", decl.isReservedAttribute(parent, nd.getName()));
nd = new DefaultConfigurationNode("optional");
parent.addAttribute(nd);
- assertTrue("Attribute optional not recognized", decl.isReservedNode(nd));
+ assertTrue("Attribute optional not recognized", decl.isReservedAttribute(parent, nd.getName()));
nd = new DefaultConfigurationNode("config-class");
parent.addAttribute(nd);
assertTrue("Inherited attribute not recognized", decl
- .isReservedNode(nd));
+ .isReservedAttribute(parent, nd.getName()));
nd = new DefaultConfigurationNode("different");
parent.addAttribute(nd);
- assertFalse("Wrong reserved attribute", decl.isReservedNode(nd));
+ assertFalse("Wrong reserved attribute", decl.isReservedAttribute(parent, nd.getName()));
nd = new DefaultConfigurationNode("at");
parent.addChild(nd);
- assertFalse("Node type not evaluated", decl.isReservedNode(nd));
}
/**
@@ -130,16 +130,16 @@
factory, factory);
DefaultConfigurationNode parent = new DefaultConfigurationNode();
DefaultConfigurationNode nd = new DefaultConfigurationNode("config-"
- + name);
+ + name, "test");
parent.addAttribute(nd);
assertTrue("config-" + name + " attribute not recognized", decl
- .isReservedNode(nd));
- DefaultConfigurationNode nd2 = new DefaultConfigurationNode(name);
+ .isReservedAttribute(parent, nd.getName()));
+ DefaultConfigurationNode nd2 = new DefaultConfigurationNode(name, "test");
parent.addAttribute(nd2);
assertFalse(name + " is reserved though config- exists", decl
- .isReservedNode(nd2));
+ .isReservedAttribute(parent, nd2.getName()));
assertTrue("config- attribute not recognized when " + name + " exists",
- decl.isReservedNode(nd));
+ decl.isReservedAttribute(parent, nd.getName()));
}
/**