1 7 package com.tirsen.nanning.attribute; 8 9 import com.thoughtworks.qdox.parser.impl.JFlexLexer; 10 import com.thoughtworks.qdox.parser.impl.Parser; 11 import org.apache.tools.ant.BuildException; 12 import org.apache.tools.ant.DirectoryScanner; 13 import org.apache.tools.ant.Task; 14 15 import java.io.*; 16 import java.util.List ; 17 import java.util.Iterator ; 18 19 27 public class AttributesCompiler extends Task { 28 private File src; 29 private File dest; 30 31 public void setSrc(File src) { 32 this.src = src; 33 } 34 35 public void setDest(File dest) { 36 this.dest = dest; 37 } 38 39 public void execute() { 40 try { 41 boolean hasCompiled = false; 42 43 String [] files = getJavaFiles(); 44 for (int i = 0; i < files.length; i++) { 45 final File javaFile = new File(src, files[i]); 46 final File attributeFile = getAttributeFile(files[i]); 47 if (!attributeFile.exists() || attributeFile.lastModified() < javaFile.lastModified()) { 48 createAttributeFiles(javaFile); 49 if (!hasCompiled) { 50 System.out.println("Compiling attributes for " + src + " into " + dest); 51 hasCompiled = true; 52 } 53 } 54 } 55 } catch (IOException e) { 56 throw new BuildException(e); 57 } 58 } 59 60 private String [] getJavaFiles() { 61 DirectoryScanner scanner = new DirectoryScanner(); 62 scanner.setBasedir(src); 63 scanner.setIncludes(new String []{"**/*.java"}); 64 scanner.scan(); 65 return scanner.getIncludedFiles(); 66 } 67 68 private File getAttributeFile(String javaFileName) { 69 File result = new File(dest, javaFileName.substring(0, javaFileName.length() - 5) + 70 PropertyFileAttributeLoader.ATTRIBUTE_FILE_SUFFIX); 71 result.getParentFile().mkdirs(); 72 return result; 73 } 74 75 private void createAttributeFiles(File javaFile) throws IOException { 76 List result = parseClassAttribute(javaFile); 77 for (Iterator iterator = result.iterator(); iterator.hasNext();) { 78 ClassPropertiesHelper properties = (ClassPropertiesHelper) iterator.next(); 79 properties.store(dest); 80 } 81 } 82 83 List parseClassAttribute(File javaFile) throws IOException { 84 InputStream input = new FileInputStream(javaFile); 85 try { 86 AttributesBuilder builder = new AttributesBuilder(); 87 new Parser(new JFlexLexer(input), builder).parse(); 88 return builder.getClassPropertiesHelpers(); 89 } finally { 90 input.close(); 91 } 92 } 93 94 }
| Popular Tags
|