KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tirsen > nanning > attribute > AttributesCompiler


1 /*
2  * Nanning Aspects
3  *
4  * Distributable under LGPL license.
5  * See terms of license at gnu.org.
6  */

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 JavaDoc;
17 import java.util.Iterator JavaDoc;
18
19 /**
20  * TODO document AttributesCompiler
21  *
22  * <!-- $Id: AttributesCompiler.java,v 1.9 2003/06/12 14:18:17 lecando Exp $ -->
23  *
24  * @author $Author: lecando $
25  * @version $Revision: 1.9 $
26  */

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 JavaDoc[] 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 JavaDoc[] getJavaFiles() {
61         DirectoryScanner scanner = new DirectoryScanner();
62         scanner.setBasedir(src);
63         scanner.setIncludes(new String JavaDoc[]{"**/*.java"});
64         scanner.scan();
65         return scanner.getIncludedFiles();
66     }
67
68     private File getAttributeFile(String JavaDoc 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 JavaDoc result = parseClassAttribute(javaFile);
77         for (Iterator JavaDoc iterator = result.iterator(); iterator.hasNext();) {
78             ClassPropertiesHelper properties = (ClassPropertiesHelper) iterator.next();
79             properties.store(dest);
80         }
81     }
82
83     List JavaDoc 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