1 5 package versioncheck; 6 7 import java.io.File ; 8 import java.io.FileInputStream ; 9 import java.io.FileNotFoundException ; 10 import java.io.FileOutputStream ; 11 import java.io.FileWriter ; 12 import java.io.IOException ; 13 import java.io.OutputStream ; 14 import java.io.PrintWriter ; 15 import java.io.StringWriter ; 16 import java.util.ArrayList ; 17 import java.util.HashSet ; 18 import java.util.Iterator ; 19 import java.util.List ; 20 import java.util.Properties ; 21 import java.util.Set ; 22 23 import org.apache.tools.ant.BuildException; 24 import org.apache.tools.ant.DirectoryScanner; 25 import org.apache.tools.ant.Project; 26 import org.apache.tools.ant.Task; 27 import org.apache.tools.ant.types.FileSet; 28 29 33 public class VersionCheckTask extends Task { 34 35 private File file; 36 private List filesets = new ArrayList (); 37 private File output; 38 39 public void setVersionFile(File file) { 40 this.file = file; 41 } 42 43 public File getVersionFile() { 44 return file; 45 } 46 47 public void setOutput(File file) { 48 output=file; 49 } 50 51 public void addFileSet(FileSet fileset) { 52 filesets.add(fileset); 53 } 54 55 void logWarn(String message) { 56 log(message, Project.MSG_WARN); 57 } 58 59 public void execute() throws BuildException { 60 try { 61 boolean failed = false; 62 StringWriter result = new StringWriter (); 63 PrintWriter writer = new PrintWriter (result); 64 Properties props = new Properties (); 65 props.load(new FileInputStream (file)); 66 67 Set set = locateLibraryKeys(props); 68 69 List availableLibraries = getAvailableLibraries(); 70 71 Iterator iterator = set.iterator(); 72 73 while (iterator.hasNext()) { 75 String name = (String ) iterator.next(); 76 String key = name + ".lib"; 77 String library = props.getProperty(key); 78 79 if(availableLibraries.remove(library)) { 80 writer.println(); 81 writer.println(props.getProperty(key) + " (" + props.getProperty(name + ".version","unknown") +")"); 82 writer.println("- " + props.getProperty(name + ".name", "unknown name")); 83 writer.println("- " + props.getProperty(name + ".when", "unknown requirement")); 84 } else { 86 if(!Boolean.valueOf((String ) props.getProperty(name + ".ignorecheck")).booleanValue()) { 87 logWarn(library + " not found in fileset of libraries!"); 89 failed = true; 90 } 91 } 92 } 93 94 95 iterator = availableLibraries.iterator(); 96 while(iterator.hasNext()) { 98 String leftover = (String ) iterator.next(); 99 100 logWarn("Library " + leftover + " not listed in " + file); 101 failed = true; 102 } 103 104 105 106 if(failed) throw new BuildException("Warning/Errors found during versioncheck."); 107 108 if(output!=null) { 109 FileWriter stream = new FileWriter (output); 110 stream.write(result.getBuffer().toString()); 111 stream.flush(); 112 log("Wrote info file to " + output); 113 } 114 115 } catch (FileNotFoundException e) { 116 throw new BuildException("Problems when loading " + file,e); 117 } catch (IOException e) { 118 throw new BuildException("Problems when loading " + file,e); 119 } 120 121 122 super.execute(); 123 } 124 125 private List getAvailableLibraries() { 126 List l = new java.util.ArrayList (); 127 for (int i = 0; i < filesets.size(); i++) { 129 FileSet fs = (FileSet) filesets.get(i); 130 DirectoryScanner ds = fs.getDirectoryScanner(getProject()); 131 String [] files = ds.getIncludedFiles(); 132 for (int j = 0; j < files.length; j++) { 133 l.add( files[j]); 134 } 135 } 136 137 return l; 139 } 140 141 145 private Set locateLibraryKeys(Properties props) { 146 Set libraries = new HashSet (); 147 Iterator iterator = props.keySet().iterator(); 148 while (iterator.hasNext()) { 149 String key = (String ) iterator.next(); 150 if(key.endsWith(".lib")) { 151 String libname = key.substring(0,key.length()-4); 152 if(!libraries.add(libname)) { 153 logWarn(libname + " defined multiple times!"); 154 } 155 } 156 } 157 return libraries; 158 } 159 } 160
| Popular Tags
|