1 18 19 package org.apache.tools.ant.types; 20 21 import java.io.File ; 22 import java.util.StringTokenizer ; 23 import java.util.Vector ; 24 import java.util.Iterator ; 25 26 import org.apache.tools.ant.Project; 27 import org.apache.tools.ant.BuildException; 28 import org.apache.tools.ant.types.resources.FileResourceIterator; 29 30 37 public class FileList extends DataType implements ResourceCollection { 38 39 private Vector filenames = new Vector (); 40 private File dir; 41 42 46 public FileList() { 47 super(); 48 } 49 50 55 protected FileList(FileList filelist) { 56 this.dir = filelist.dir; 57 this.filenames = filelist.filenames; 58 setProject(filelist.getProject()); 59 } 60 61 70 public void setRefid(Reference r) throws BuildException { 71 if ((dir != null) || (filenames.size() != 0)) { 72 throw tooManyAttributes(); 73 } 74 super.setRefid(r); 75 } 76 77 83 public void setDir(File dir) throws BuildException { 84 checkAttributesAllowed(); 85 this.dir = dir; 86 } 87 88 92 public File getDir(Project p) { 93 if (isReference()) { 94 return getRef(p).getDir(p); 95 } 96 return dir; 97 } 98 99 105 public void setFiles(String filenames) { 106 checkAttributesAllowed(); 107 if (filenames != null && filenames.length() > 0) { 108 StringTokenizer tok = new StringTokenizer ( 109 filenames, ", \t\n\r\f", false); 110 while (tok.hasMoreTokens()) { 111 this.filenames.addElement(tok.nextToken()); 112 } 113 } 114 } 115 116 121 public String [] getFiles(Project p) { 122 if (isReference()) { 123 return getRef(p).getFiles(p); 124 } 125 126 if (dir == null) { 127 throw new BuildException("No directory specified for filelist."); 128 } 129 130 if (filenames.size() == 0) { 131 throw new BuildException("No files specified for filelist."); 132 } 133 134 String [] result = new String [filenames.size()]; 135 filenames.copyInto(result); 136 return result; 137 } 138 139 145 protected FileList getRef(Project p) { 146 return (FileList) getCheckedRef(p); 147 } 148 149 152 public static class FileName { 153 private String name; 154 155 160 public void setName(String name) { 161 this.name = name; 162 } 163 164 167 public String getName() { 168 return name; 169 } 170 } 171 172 178 public void addConfiguredFile(FileName name) { 179 if (name.getName() == null) { 180 throw new BuildException( 181 "No name specified in nested file element"); 182 } 183 filenames.addElement(name.getName()); 184 } 185 186 191 public Iterator iterator() { 192 if (isReference()) { 193 return ((FileList) getRef(getProject())).iterator(); 194 } 195 return new FileResourceIterator(dir, 196 (String []) (filenames.toArray(new String [filenames.size()]))); 197 } 198 199 204 public int size() { 205 if (isReference()) { 206 return ((FileList) getRef(getProject())).size(); 207 } 208 return filenames.size(); 209 } 210 211 216 public boolean isFilesystemOnly() { 217 return true; 218 } 219 220 } 221 | Popular Tags |