aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java
blob: 6d8849ced9cf4e389d89374e2305c9b9443a2539 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You 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.
 *
 */
package org.apache.tools.ant.types.resources;

import java.io.File;
import java.util.Iterator;
import java.util.NoSuchElementException;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Resource;

/**
 * Iterator of FileResources from filenames.
 * @since Ant 1.7
 */
public class FileResourceIterator implements Iterator<Resource> {
    private Project project;
    private File basedir;
    private String[] files;
    private int pos = 0;

    /**
     * Construct a new FileResourceIterator.
     * @deprecated in favor of {@link FileResourceIterator#FileResourceIterator(Project)}
     */
    public FileResourceIterator() {
    }

    /**
     * Create a new FileResourceIterator.
     * @param project associated Project instance
     * @since Ant 1.8
     */
    public FileResourceIterator(Project project) {
        this.project = project;
    }

    /**
     * Construct a new FileResourceIterator relative to the specified
     * base directory.
     * @param basedir the base directory of this instance.
     * @deprecated in favor of {@link FileResourceIterator#FileResourceIterator(Project, File)}
     */
    public FileResourceIterator(File basedir) {
        this(null, basedir);
    }

    /**
     * Construct a new FileResourceIterator relative to the specified
     * base directory.
     * @param project associated Project instance
     * @param basedir the base directory of this instance.
     * @since Ant 1.8
     */
    public FileResourceIterator(Project project, File basedir) {
        this(project);
        this.basedir = basedir;
    }

    /**
     * Construct a new FileResourceIterator over the specified filenames,
     * relative to the specified base directory.
     * @param basedir the base directory of this instance.
     * @param filenames the String[] of filenames.
     * @deprecated in favor of {@link FileResourceIterator#FileResourceIterator(Project, File, String[])}
     */
    public FileResourceIterator(File basedir, String[] filenames) {
        this(null, basedir, filenames);
    }

    /**
     * Construct a new FileResourceIterator over the specified filenames,
     * relative to the specified base directory.
     * @param project associated Project instance
     * @param basedir the base directory of this instance.
     * @param filenames the String[] of filenames.
     * @since Ant 1.8
     */
    public FileResourceIterator(Project project, File basedir, String[] filenames) {
        this(project, basedir);
        addFiles(filenames);
    }

    /**
     * Add an array of filenames to this FileResourceIterator.
     * @param s the filenames to add.
     */
    public void addFiles(String[] s) {
        int start = (files == null) ? 0 : files.length;
        String[] newfiles = new String[start + s.length];
        if (start > 0) {
            System.arraycopy(files, 0, newfiles, 0, start);
        }
        files = newfiles;
        System.arraycopy(s, 0, files, start, s.length);
    }

    /**
     * Find out whether this FileResourceIterator has more elements.
     * @return whether there are more Resources to iterate over.
     */
    public boolean hasNext() {
        return pos < files.length;
    }

    /**
     * Get the next element from this FileResourceIterator.
     * @return the next Object.
     */
    public Resource next() {
        return nextResource();
    }

    /**
     * Not implemented.
     */
    public void remove() {
        throw new UnsupportedOperationException();
    }

    /**
     * Convenience method to return the next resource.
     * @return the next File.
     */
    public FileResource nextResource() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        }
        FileResource result = new FileResource(basedir, files[pos++]);
        result.setProject(project);
        return result;
    }

}