epugh       2004/03/13 09:04:04

  Modified:    configuration/src/java/org/apache/commons/configuration
                        HierarchicalConfiguration.java
                        CompositeConfiguration.java
               configuration/src/test/org/apache/commons/configuration
                        TestHierarchicalConfiguration.java
  Log:
  Fix the HierarchicalConfiguration with regards to subset..
  
  Revision  Changes    Path
  1.5       +44 -1     
jakarta-commons/configuration/src/java/org/apache/commons/configuration/HierarchicalConfiguration.java
  
  Index: HierarchicalConfiguration.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/configuration/src/java/org/apache/commons/configuration/HierarchicalConfiguration.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HierarchicalConfiguration.java    9 Mar 2004 10:31:31 -0000       1.4
  +++ HierarchicalConfiguration.java    13 Mar 2004 17:04:04 -0000      1.5
  @@ -290,7 +290,50 @@
       {
           return !nodeDefined(getRoot());
       }
  +    
  +    /**
  +     * Creates a new <code>Configuration</code> object containing all keys
  +     * that start with the specified prefix. This implementation will return
  +     * a <code>HierarchicalConfiguration</code> object so that the structure
  +     * of the keys will be saved.
  +     * @param prefix the prefix of the keys for the subset
  +     * @return a new configuration object representing the selected subset
  +     */
  +    public Configuration subset(String prefix)
  +    {
  +        Collection nodes = fetchNodeList(prefix);
  +        if (nodes.isEmpty())
  +        {
  +            return new HierarchicalConfiguration();
  +        } /* if */
   
  +        HierarchicalConfiguration result = new HierarchicalConfiguration();
  +        CloneVisitor visitor = new CloneVisitor();
  +
  +        for (Iterator it = nodes.iterator(); it.hasNext();)
  +        {
  +            Node nd = (Node) it.next();
  +            nd.visit(visitor, null);
  +
  +            Container children = visitor.getClone().getChildren();
  +            if (children.size() > 0)
  +            {
  +                for (int i = 0; i < children.size(); i++)
  +                {
  +                    result.getRoot().addChild((Node) children.get(i));
  +                } /* for */
  +            } /* if */
  +            else
  +            {
  +                // In this case we cannot shorten the key because only
  +                // values are found without further child nodes.
  +                // result.getRoot().addChild(visitor.getClone());
  +            } /* else */
  +        } /* for */
  +
  +        return (result.isEmpty()) ? new HierarchicalConfiguration() : result;
  +    }
  +    
       /**
        * Checks if the specified key is contained in this configuration.
        * Note that for this configuration the term &quot;contained&quot; means
  
  
  
  1.10      +27 -1     
jakarta-commons/configuration/src/java/org/apache/commons/configuration/CompositeConfiguration.java
  
  Index: CompositeConfiguration.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/configuration/src/java/org/apache/commons/configuration/CompositeConfiguration.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- CompositeConfiguration.java       9 Mar 2004 10:31:31 -0000       1.9
  +++ CompositeConfiguration.java       13 Mar 2004 17:04:04 -0000      1.10
  @@ -249,6 +249,32 @@
       }
    
       /**
  +     * Create a CompositeConfiguration object that is a subset
  +     * of this one. Cycles over all the config objects, and calls
  +     * their subset method and then just adds that.
  +     *
  +     * @param prefix
  +     */
  +    public Configuration subset(String prefix)
  +    {
  +        CompositeConfiguration subsetCompositeConfiguration =
  +            new CompositeConfiguration();
  +        Configuration subConf = null;
  +        int count = 0;
  +        for (ListIterator i = configList.listIterator(); i.hasNext();)
  +        {
  +            Configuration config = (Configuration) i.next();
  +            Configuration subset = config.subset(prefix);
  +            if (subset != null && !subset.isEmpty())
  +            {
  +                subsetCompositeConfiguration.addConfiguration(subset);
  +                subConf = subset;
  +                count++;
  +            }
  +        }
  +        return (count == 1) ? subConf : subsetCompositeConfiguration;
  +    }
  +    /**
        * Get a List of strings associated with the given configuration key.
        *
        * @param key The configuration key.
  
  
  
  1.5       +4 -1      
jakarta-commons/configuration/src/test/org/apache/commons/configuration/TestHierarchicalConfiguration.java
  
  Index: TestHierarchicalConfiguration.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/configuration/src/test/org/apache/commons/configuration/TestHierarchicalConfiguration.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestHierarchicalConfiguration.java        9 Mar 2004 10:31:31 -0000       1.4
  +++ TestHierarchicalConfiguration.java        13 Mar 2004 17:04:04 -0000      1.5
  @@ -242,5 +242,8 @@
           prop = conf.getProperty("name");
           assertTrue("prop is not a collection", prop instanceof Collection);
           assertEquals(10, ((Collection) prop).size());
  +        
  +        conf = config.subset("tables.table.fields.field.name");
  +        assertTrue("subset is not empty", conf.isEmpty());
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to