001    /*
002     * $Header$
003     * $Revision: 3819 $
004     * $Date: 2006-06-07 14:44:42 +0200 (Wed, 07 Jun 2006) $
005     *
006     * ====================================================================
007     *
008     * The Apache Software License, Version 1.1
009     *
010     * Copyright (c) 2002 The Apache Software Foundation.  All rights
011     * reserved.
012     *
013     * Redistribution and use in source and binary forms, with or without
014     * modification, are permitted provided that the following conditions
015     * are met:
016     *
017     * 1. Redistributions of source code must retain the above copyright
018     *    notice, this list of conditions and the following disclaimer.
019     *
020     * 2. Redistributions in binary form must reproduce the above copyright
021     *    notice, this list of conditions and the following disclaimer in
022     *    the documentation and/or other materials provided with the
023     *    distribution.
024     *
025     * 3. The end-user documentation included with the redistribution, if
026     *    any, must include the following acknowlegement:
027     *       "This product includes software developed by the
028     *        Apache Software Foundation (http://www.apache.org/)."
029     *    Alternately, this acknowlegement may appear in the software itself,
030     *    if and wherever such third-party acknowlegements normally appear.
031     *
032     * 4. The names "The Jakarta Project", "Commons", and "Apache Software
033     *    Foundation" must not be used to endorse or promote products derived
034     *    from this software without prior written permission. For written
035     *    permission, please contact apache@apache.org.
036     *
037     * 5. Products derived from this software may not be called "Apache"
038     *    nor may "Apache" appear in their names without prior written
039     *    permission of the Apache Group.
040     *
041     * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
042     * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
043     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
044     * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
045     * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
046     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
047     * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
048     * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
049     * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
050     * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
051     * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
052     * SUCH DAMAGE.
053     * ====================================================================
054     *
055     * This software consists of voluntary contributions made by many
056     * individuals on behalf of the Apache Software Foundation.  For more
057     * information on the Apache Software Foundation, please see
058     * <http://www.apache.org/>.
059     * 
060     * $Id: FileScanner.java 3819 2006-06-07 12:44:42Z dierk $
061     */
062    package org.codehaus.groovy.ant;
063    
064    import java.util.ArrayList;
065    import java.util.Iterator;
066    import java.util.List;
067    
068    import org.apache.tools.ant.Project;
069    import org.apache.tools.ant.Task;
070    import org.apache.tools.ant.types.FileSet;
071    
072    /** 
073     * <p><code>FileScanner</code> is a bean which allows the iteration
074     * over a number of files from a colleciton of FileSet instances.
075     *
076     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
077     * @author Marc Guillemot
078     * @version $Revision: 3819 $
079     */
080    public class FileScanner extends Task {
081    
082        /** FileSets */
083        private List filesets = new ArrayList();
084    
085        public FileScanner() {
086        }
087        
088        public FileScanner(final Project project) {
089            setProject(project);
090        }
091        
092        public Iterator iterator() {
093            return new FileIterator(getProject(), filesets.iterator());
094        }
095    
096        public Iterator directories() {
097            return new FileIterator(getProject(), filesets.iterator(), true);
098        }
099    
100        public boolean hasFiles() {
101            return filesets.size() > 0;
102        }
103    
104        /**
105         * Clears any file sets that have been added to this scanner
106         */
107        public void clear() {
108            filesets.clear();
109        }
110    
111        // Properties
112        //-------------------------------------------------------------------------
113    
114        /**
115         * Adds a set of files (nested fileset attribute).
116         */
117        public void addFileset(FileSet set) {
118            filesets.add(set);
119        }
120    
121    }