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 }