1 19 20 25 26 package selectjars; 27 28 import java.io.File ; 29 import java.io.FileOutputStream ; 30 import java.io.IOException ; 31 import java.io.PrintStream ; 32 import java.util.ArrayList ; 33 import java.util.Collections ; 34 35 import java.util.Enumeration ; 36 import java.util.HashSet ; 37 import java.util.Iterator ; 38 import java.util.LinkedList ; 39 import java.util.List ; 40 import java.util.Set ; 41 import java.util.StringTokenizer ; 42 import java.util.Vector ; 43 import java.util.jar.JarFile ; 44 import java.util.zip.ZipEntry ; 45 46 import org.apache.tools.ant.*; 47 import org.apache.tools.ant.types.*; 48 49 52 public class SelectJars extends Task { 53 54 55 private Set includedJars = new HashSet (); 56 57 58 private String pathRefProp; 59 60 61 private String [] inclPackages; 62 63 64 private String inclPackagesOrig; 65 66 67 private List filesets = new LinkedList (); 68 69 70 private PrintStream logStream = null; 71 72 public void setPathrefprop(String s) { 73 pathRefProp = s; 74 } 75 76 public void setInclpackages(String s) { 77 inclPackagesOrig = new String (s); 78 Vector vecIncluded = new Vector (); 79 StringTokenizer st = new StringTokenizer (s, ","); 80 while (st.hasMoreTokens()) { 81 String incPkg = st.nextToken(); 82 if (incPkg.endsWith(".*")) { 84 incPkg = incPkg.substring(0, incPkg.length() - 2); 85 } else if (incPkg.endsWith(".")) { 86 incPkg = incPkg.substring(0, incPkg.length() - 1); 87 } 88 log("Included package: " + incPkg, Project.MSG_VERBOSE); 89 vecIncluded.add(incPkg); 90 } 91 inclPackages = (String []) vecIncluded.toArray(new String [] {}); 92 } 93 94 public void addFileset(FileSet fs) { 95 filesets.add(fs); 96 } 97 98 public void setLogfile(File lgfl) { 99 try { 100 logStream = new PrintStream (new FileOutputStream (lgfl)); 101 } catch (IOException ioe) { 102 throw new BuildException(ioe.getLocalizedMessage()); 103 } 104 } 105 106 public void execute() throws BuildException { 107 108 Iterator it = filesets.iterator(); 109 while (it.hasNext()) { 110 111 FileSet fs = (FileSet) it.next(); 112 DirectoryScanner ds = fs.getDirectoryScanner(project); 113 File basedir = ds.getBasedir(); 114 String [] files = ds.getIncludedFiles(); 115 116 for (int i = 0; i < files.length; i++) { 117 118 String jarFileName = basedir + File.separator + files[i]; 120 JarFile jarFile = null; 121 try { 122 jarFile = new JarFile (jarFileName); 123 } catch (IOException ioe) { 124 ioe.printStackTrace(); 125 } 126 127 log(jarFileName, Project.MSG_DEBUG); 128 Enumeration entries = jarFile.entries(); 129 while (entries.hasMoreElements()) { 130 ZipEntry zipEntry = (ZipEntry ) entries.nextElement(); 131 if (zipEntry.isDirectory()) { 132 log(zipEntry.toString(), Project.MSG_DEBUG); 133 String pkgFromJar = zipEntry.toString().replace('/', '.'); 134 if (pkgFromJar.endsWith(".")) { 136 pkgFromJar = pkgFromJar.substring(0, pkgFromJar.length() - 1); 137 } 138 for (int j = 0; j < inclPackages.length; j++) { 139 if (inclPackages[j].compareTo(pkgFromJar) == 0) { 140 log("Selected jar: " + jarFileName , Project.MSG_VERBOSE); 141 log(" " + inclPackages[j] + " == " + pkgFromJar, Project.MSG_VERBOSE); 142 includedJars.add(jarFileName); 143 } 144 } 145 } 146 } 147 148 } 149 150 } 151 152 List listIncluded = new ArrayList (includedJars); 153 Collections.sort(listIncluded); 154 Iterator iter = listIncluded.iterator(); 155 156 log("Found " + includedJars.size() + " jar files.", Project.MSG_VERBOSE); 157 158 if (logStream != null) { 159 logStream.println("Instrumented Packages:"); 160 logStream.println(inclPackagesOrig); 161 logStream.println("--------------------------------------------------------------------------------"); 162 logStream.println("Included JAR files:"); 163 } 164 165 Path path = new Path(getProject()); 166 getProject().addReference(pathRefProp, path); 167 while (iter.hasNext()) { 168 String fileName = (String ) iter.next(); 169 path.createPathElement().setLocation(new File (fileName)); 170 if (logStream != null) { 171 logStream.println(fileName); 172 } 173 } 174 if (logStream != null) { 175 logStream.println("Found " + includedJars.size() + " jar files."); 176 logStream.close(); 177 } 178 } 179 180 } 181 | Popular Tags |