1 62 package org.codehaus.groovy.ant; 63 64 import java.io.File ; 65 import java.util.Iterator ; 66 import java.util.NoSuchElementException ; 67 68 import org.apache.tools.ant.DirectoryScanner; 69 import org.apache.tools.ant.Project; 70 import org.apache.tools.ant.types.FileSet; 71 72 79 public class FileIterator implements Iterator { 80 81 82 private Iterator fileSetIterator; 83 84 85 private Project project; 86 87 88 private DirectoryScanner ds; 89 90 91 private String [] files; 92 93 94 private int fileIndex = -1; 95 96 97 private File nextFile; 98 99 100 private boolean nextObjectSet = false; 101 102 103 private boolean iterateDirectories = false; 104 105 public FileIterator(Project project, 106 Iterator fileSetIterator) { 107 this( project, fileSetIterator, false); 108 } 109 110 public FileIterator(Project project, 111 Iterator fileSetIterator, 112 boolean iterateDirectories) { 113 this.project = project; 114 this.fileSetIterator = fileSetIterator; 115 this.iterateDirectories = iterateDirectories; 116 } 117 118 121 122 public boolean hasNext() { 123 if ( nextObjectSet ) { 124 return true; 125 } 126 else { 127 return setNextObject(); 128 } 129 } 130 131 132 public Object next() { 133 if ( !nextObjectSet ) { 134 if (!setNextObject()) { 135 throw new NoSuchElementException (); 136 } 137 } 138 nextObjectSet = false; 139 return nextFile; 140 } 141 142 145 public void remove() { 146 throw new UnsupportedOperationException (); 147 } 148 149 152 156 private boolean setNextObject() { 157 while (true) { 158 while (ds == null) { 159 if ( ! fileSetIterator.hasNext() ) { 160 return false; 161 } 162 FileSet fs = (FileSet) fileSetIterator.next(); 163 ds = fs.getDirectoryScanner(project); 164 ds.scan(); 165 if (iterateDirectories) { 166 files = ds.getIncludedDirectories(); 167 } 168 else { 169 files = ds.getIncludedFiles(); 170 } 171 if ( files.length > 0 ) { 172 fileIndex = -1; 173 break; 174 } 175 else { 176 ds = null; 177 } 178 } 179 180 if ( ds != null && files != null ) { 181 if ( ++fileIndex < files.length ) { 182 nextFile = new File ( ds.getBasedir(), files[fileIndex] ); 183 nextObjectSet = true; 184 return true; 185 } 186 else { 187 ds = null; 188 } 189 } 190 } 191 } 192 } 193 194 195 | Popular Tags |