Author: oheger
Date: Sun Nov 25 14:57:18 2012
New Revision: 1413357

URL: http://svn.apache.org/viewvc?rev=1413357&view=rev
Log:
Improved Javadocs and added a constructor for specifying a default bean class.

Modified:
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/XMLBeanDeclaration.java
    
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/beanutils/TestXMLBeanDeclaration.java

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/XMLBeanDeclaration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/XMLBeanDeclaration.java?rev=1413357&r1=1413356&r2=1413357&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/XMLBeanDeclaration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/XMLBeanDeclaration.java
 Sun Nov 25 14:57:18 2012
@@ -159,15 +159,20 @@ public class XMLBeanDeclaration implemen
     /** Stores the configuration node that contains the bean declaration. */
     private final ConfigurationNode node;
 
+    /** The name of the default bean class. */
+    private final String defaultBeanClassName;
+
     /**
-     * Creates a new instance of {@code XMLBeanDeclaration} and
-     * initializes it from the given configuration. The passed in key points to
-     * the bean declaration.
+     * Creates a new instance of {@code XMLBeanDeclaration} and initializes it
+     * from the given configuration. The passed in key points to the bean
+     * declaration.
      *
-     * @param config the configuration
+     * @param config the configuration (must not be <b>null</b>)
      * @param key the key to the bean declaration (this key must point to
-     * exactly one bean declaration or a {@code IllegalArgumentException}
-     * exception will be thrown)
+     *        exactly one bean declaration or a {@code 
IllegalArgumentException}
+     *        exception will be thrown)
+     * @throws IllegalArgumentException if required information is missing to
+     *         construct the bean declaration
      */
     public XMLBeanDeclaration(HierarchicalConfiguration config, String key)
     {
@@ -175,24 +180,49 @@ public class XMLBeanDeclaration implemen
     }
 
     /**
-     * Creates a new instance of {@code XMLBeanDeclaration} and
-     * initializes it from the given configuration. The passed in key points to
-     * the bean declaration. If the key does not exist and the boolean argument
-     * is <b>true</b>, the declaration is initialized with an empty
-     * configuration. It is possible to create objects from such an empty
-     * declaration if a default class is provided. If the key on the other hand
-     * has multiple values or is undefined and the boolean argument is 
<b>false</b>,
-     * a {@code IllegalArgumentException} exception will be thrown.
+     * Creates a new instance of {@code XMLBeanDeclaration} and initializes it
+     * from the given configuration supporting optional declarations.
      *
-     * @param config the configuration
+     * @param config the configuration (must not be <b>null</b>)
      * @param key the key to the bean declaration
      * @param optional a flag whether this declaration is optional; if set to
-     * <b>true</b>, no exception will be thrown if the passed in key is
-     * undefined
+     *        <b>true</b>, no exception will be thrown if the passed in key is
+     *        undefined
+     * @throws IllegalArgumentException if required information is missing to
+     *         construct the bean declaration
      */
     public XMLBeanDeclaration(HierarchicalConfiguration config, String key,
             boolean optional)
     {
+        this(config, key, optional, null);
+    }
+
+    /**
+     * Creates a new instance of {@code XMLBeanDeclaration} and initializes it
+     * from the given configuration supporting optional declarations and a
+     * default bean class name. The passed in key points to the bean
+     * declaration. If the key does not exist and the boolean argument is
+     * <b>true</b>, the declaration is initialized with an empty configuration.
+     * It is possible to create objects from such an empty declaration if a
+     * default class is provided. If the key on the other hand has multiple
+     * values or is undefined and the boolean argument is <b>false</b>, a
+     * {@code IllegalArgumentException} exception will be thrown. It is 
possible
+     * to set a default bean class name; this name is used if the configuration
+     * does not contain a bean class.
+     *
+     * @param config the configuration (must not be <b>null</b>)
+     * @param key the key to the bean declaration
+     * @param optional a flag whether this declaration is optional; if set to
+     *        <b>true</b>, no exception will be thrown if the passed in key is
+     *        undefined
+     * @param defBeanClsName a default bean class name
+     * @throws IllegalArgumentException if required information is missing to
+     *         construct the bean declaration
+     * @since 2.0
+     */
+    public XMLBeanDeclaration(HierarchicalConfiguration config, String key,
+            boolean optional, String defBeanClsName)
+    {
         if (config == null)
         {
             throw new IllegalArgumentException(
@@ -218,6 +248,7 @@ public class XMLBeanDeclaration implemen
         }
         this.node = tmpnode;
         this.configuration = tmpconfiguration;
+        defaultBeanClassName = defBeanClsName;
         initSubnodeConfiguration(getConfiguration());
     }
 
@@ -256,6 +287,7 @@ public class XMLBeanDeclaration implemen
 
         this.node = node;
         configuration = config;
+        defaultBeanClassName = null;
         initSubnodeConfiguration(config);
     }
 
@@ -270,6 +302,19 @@ public class XMLBeanDeclaration implemen
     }
 
     /**
+     * Returns the name of the default bean class. This class is used if no 
bean
+     * class is specified in the configuration. It may be <b>null</b> if no
+     * default class was set.
+     *
+     * @return the default bean class name
+     * @since 2.0
+     */
+    public String getDefaultBeanClassName()
+    {
+        return defaultBeanClassName;
+    }
+
+    /**
      * Returns the node that contains the bean declaration.
      *
      * @return the configuration node this bean declaration is based on
@@ -309,7 +354,7 @@ public class XMLBeanDeclaration implemen
      */
     public String getBeanClassName()
     {
-        return getConfiguration().getString(ATTR_BEAN_CLASS);
+        return getConfiguration().getString(ATTR_BEAN_CLASS, 
getDefaultBeanClassName());
     }
 
     /**

Modified: 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/beanutils/TestXMLBeanDeclaration.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/beanutils/TestXMLBeanDeclaration.java?rev=1413357&r1=1413356&r2=1413357&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/beanutils/TestXMLBeanDeclaration.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/beanutils/TestXMLBeanDeclaration.java
 Sun Nov 25 14:57:18 2012
@@ -157,6 +157,38 @@ public class TestXMLBeanDeclaration
     }
 
     /**
+     * Tests whether a default bean class name is taken into account.
+     */
+    @Test
+    public void testGetBeanClassNameFromDefault()
+    {
+        BaseHierarchicalConfiguration config =
+                new BaseHierarchicalConfiguration();
+        config.addProperty(KEY + "[@someProperty]", Boolean.TRUE);
+        XMLBeanDeclaration decl =
+                new XMLBeanDeclaration(config, KEY, false, 
getClass().getName());
+        assertEquals("Wrong class name", getClass().getName(),
+                decl.getBeanClassName());
+    }
+
+    /**
+     * Tests whether a default bean class name is overridden by a value in the
+     * configuration.
+     */
+    @Test
+    public void tetGetBeanClassNameDefaultOverride()
+    {
+        BaseHierarchicalConfiguration config =
+                new BaseHierarchicalConfiguration();
+        config.addProperty(KEY + "[@config-class]", getClass().getName());
+        XMLBeanDeclaration decl =
+                new XMLBeanDeclaration(config, KEY, false,
+                        "someDefaultClassName");
+        assertEquals("Wrong class name", getClass().getName(),
+                decl.getBeanClassName());
+    }
+
+    /**
      * Tests fetching the name of the bean factory.
      */
     @Test


Reply via email to