<?xml version="1.0"?>
<!--
  Copyright 2002,2004 The Apache Software Foundation.
  
  Licensed 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.
-->
<j:jelly xmlns:j="jelly:core" xmlns="jelly:ant">

  <fileScanner var="scanner">
    <fileset dir="src/test" includes="**/*.jelly"/>
  </fileScanner>
    
  Iterating through build files
  
  <j:forEach var="file" items="${scanner.iterator()}">
  
    <!-- here we could parse the file or process it in some way -->
    <!-- such as by calling <ant> with the given build.xml file -->
      
    Found ${file.absolutePath}
  </j:forEach>

  <fileScanner var="dirscanner">
    <fileset dir="src/test" includes="org/apache/commons/jelly/**"/>
  </fileScanner>

  Iterating through test directories

  <j:forEach var="dir" items="${dirscanner.directories()}">
    <!-- here we could process the directory in some way -->
    <!-- such as creating a similar directory in a different base path -->
      
    Found ${dir.absolutePath}
  </j:forEach>

</j:jelly>
