KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > versioncheck > VersionCheckTask


1 /*
2  * Created on 12-Nov-2004
3  *
4  */

5 package versioncheck;
6
7 import java.io.File JavaDoc;
8 import java.io.FileInputStream JavaDoc;
9 import java.io.FileNotFoundException JavaDoc;
10 import java.io.FileOutputStream JavaDoc;
11 import java.io.FileWriter JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.io.OutputStream JavaDoc;
14 import java.io.PrintWriter JavaDoc;
15 import java.io.StringWriter JavaDoc;
16 import java.util.ArrayList JavaDoc;
17 import java.util.HashSet JavaDoc;
18 import java.util.Iterator JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Properties JavaDoc;
21 import java.util.Set JavaDoc;
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 /**
30  * @author max
31  *
32  */

33 public class VersionCheckTask extends Task {
34
35     private File JavaDoc file;
36     private List JavaDoc filesets = new ArrayList JavaDoc();
37     private File JavaDoc output;
38     
39     public void setVersionFile(File JavaDoc file) {
40         this.file = file;
41     }
42     
43     public File JavaDoc getVersionFile() {
44         return file;
45     }
46     
47     public void setOutput(File JavaDoc file) {
48         output=file;
49     }
50     
51     public void addFileSet(FileSet fileset) {
52         filesets.add(fileset);
53     }
54     
55     void logWarn(String JavaDoc message) {
56         log(message, Project.MSG_WARN);
57     }
58     
59     public void execute() throws BuildException {
60         try {
61             boolean failed = false;
62             StringWriter JavaDoc result = new StringWriter JavaDoc();
63             PrintWriter JavaDoc writer = new PrintWriter JavaDoc(result);
64             Properties JavaDoc props = new Properties JavaDoc();
65             props.load(new FileInputStream JavaDoc(file));
66             
67             Set JavaDoc set = locateLibraryKeys(props);
68             
69             List JavaDoc availableLibraries = getAvailableLibraries();
70             
71             Iterator JavaDoc iterator = set.iterator();
72
73             // check if all keys has their lib available...
74
while (iterator.hasNext()) {
75                 String JavaDoc name = (String JavaDoc) iterator.next();
76                 String JavaDoc key = name + ".lib";
77                 String JavaDoc 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                     // a-ok ...we found it
85
} else {
86                     if(!Boolean.valueOf((String JavaDoc) props.getProperty(name + ".ignorecheck")).booleanValue()) {
87                         // otherwise: complain
88
logWarn(library + " not found in fileset of libraries!");
89                         failed = true;
90                     }
91                 }
92             }
93
94
95             iterator = availableLibraries.iterator();
96             // report about libraries not mentioned in properties file!
97
while(iterator.hasNext()) {
98                 String JavaDoc leftover = (String JavaDoc) 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 JavaDoc stream = new FileWriter JavaDoc(output);
110                 stream.write(result.getBuffer().toString());
111                 stream.flush();
112                 log("Wrote info file to " + output);
113             }
114             
115         } catch (FileNotFoundException JavaDoc e) {
116             throw new BuildException("Problems when loading " + file,e);
117         } catch (IOException JavaDoc e) {
118             throw new BuildException("Problems when loading " + file,e);
119         }
120         
121         
122         super.execute();
123     }
124
125     private List JavaDoc getAvailableLibraries() {
126         List JavaDoc l = new java.util.ArrayList JavaDoc();
127         // deal with the filesets
128
for (int i = 0; i < filesets.size(); i++) {
129             FileSet fs = (FileSet) filesets.get(i);
130             DirectoryScanner ds = fs.getDirectoryScanner(getProject());
131             String JavaDoc[] files = ds.getIncludedFiles();
132             for (int j = 0; j < files.length; j++) {
133                 l.add( files[j]);
134             }
135         }
136         
137         //System.out.println("Available libraries:" + l);
138
return l;
139     }
140
141     /**
142      * @param props
143      * @return
144      */

145     private Set JavaDoc locateLibraryKeys(Properties JavaDoc props) {
146         Set JavaDoc libraries = new HashSet JavaDoc();
147         Iterator JavaDoc iterator = props.keySet().iterator();
148         while (iterator.hasNext()) {
149             String JavaDoc key = (String JavaDoc) iterator.next();
150             if(key.endsWith(".lib")) {
151                 String JavaDoc 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