001 package org.shiftone.jrat.inject.ant;
002
003
004 import org.apache.tools.ant.BuildException;
005 import org.apache.tools.ant.DirectoryScanner;
006 import org.apache.tools.ant.Task;
007 import org.apache.tools.ant.types.FileSet;
008
009 import java.io.File;
010 import java.util.Iterator;
011 import java.util.Set;
012 import java.util.TreeSet;
013 import java.util.Vector;
014
015
016 /**
017 * @author jeff@shiftone.org (Jeff Drost)
018 */
019 public abstract class AbstractFileTask extends Task {
020
021 protected Vector filesets = new Vector();
022 protected File file = null;
023
024 /**
025 * called by Ant
026 */
027 public void addFileset(FileSet set) {
028 filesets.addElement(set);
029 }
030
031
032 /**
033 * called by Ant
034 */
035 public void setFile(File file) {
036 this.file = file;
037 }
038
039
040 protected abstract void validateFile(File file) throws BuildException;
041
042
043 protected abstract void processFile(File file) throws BuildException;
044
045
046 private void processFiles(Set fileNames) throws BuildException {
047
048 Iterator iterator = fileNames.iterator();
049
050 while (iterator.hasNext()) {
051 processFile((File) iterator.next());
052 }
053 }
054
055
056 /**
057 * called by Ant
058 */
059 public void execute() throws BuildException {
060
061 Set files = new TreeSet();
062 String fileName = null;
063 File fileToAdd = null;
064
065 try {
066
067 // single file
068 if (this.file != null) {
069 validateFile(this.file);
070 files.add(this.file);
071 }
072
073 // FileSet(s)
074 for (int i = 0; i < filesets.size(); i++) {
075 FileSet fs = (FileSet) filesets.elementAt(i);
076 DirectoryScanner ds = fs.getDirectoryScanner(getProject());
077 File fromDir = fs.getDir(getProject());
078 String[] srcFiles = ds.getIncludedFiles();
079
080 for (int x = 0; x < srcFiles.length; x++) {
081 fileName = fromDir + File.separator + srcFiles[x];
082 fileToAdd = new File(fileName);
083
084 validateFile(fileToAdd);
085 files.add(fileToAdd);
086 }
087 }
088
089 processFiles(files);
090 }
091 catch (Throwable e) {
092 e.printStackTrace();
093
094 throw new BuildException("file task failed", e);
095 }
096 }
097 }