View Javadoc

1   package net.sf.jstp;
2   
3   import org.apache.tools.ant.Task;
4   import org.apache.tools.ant.Project;
5   import org.apache.tools.ant.BuildException;
6   import org.apache.tools.ant.DirectoryScanner;
7   import org.apache.tools.ant.types.*;
8   
9   import java.io.*;
10  import java.util.Vector;
11  
12  // copied from Ant Copy task
13  public class JstpAntTask extends Task
14  {
15      Vector filesets = new Vector();
16      File destDir = null;  
17      String encoding = null;
18      boolean autopkg = true;
19  
20      boolean forceOverwrite = false;
21      int verbosity = Project.MSG_INFO;
22      boolean failonerror = true;
23  
24      public void setDestdir(File destDir) 
25      {
26          this.destDir = destDir;
27      }
28      public void setOverwrite(boolean overwrite) 
29      {
30          this.forceOverwrite = overwrite;
31      }
32      public void setVerbose(boolean verbose) 
33      {
34          this.verbosity = verbose? Project.MSG_VERBOSE : Project.MSG_INFO; 
35      }
36      public void setFailOnError(boolean failonerror) 
37      {
38          this.failonerror = failonerror;
39      }
40      public void addFileset(FileSet set) 
41      {
42          filesets.addElement(set);
43      }
44      public void setEncoding(String encoding) 
45      {
46          this.encoding = encoding;
47      }
48      public void setAutoPackage(boolean autopkg)
49      {
50          this.autopkg = autopkg;
51      }
52  
53      public void execute() throws BuildException 
54      {
55          
56          if (filesets.size() == 0) 
57              throw new BuildException("No source files specified.");
58  
59          int total = 0;
60          for (int i = 0; i < filesets.size(); i++) 
61          {
62              FileSet fs = (FileSet) filesets.elementAt(i);
63              DirectoryScanner ds = null;
64              try 
65              {
66                  ds = fs.getDirectoryScanner(getProject());
67                  File fromDir = fs.getDir(getProject());
68                  String[] srcFiles = ds.getIncludedFiles();
69                  for(int x=0; x<srcFiles.length; x++)
70                  {
71                      total += translate(fromDir, srcFiles[x]);
72                  }
73              } 
74              catch (Exception e) 
75              {
76                  if (failonerror) 
77                      throw (e instanceof BuildException)? ((BuildException)e) : new BuildException(e);
78                  else 
79                      log(e.getMessage());
80              }
81          }
82          if(total>0 && verbosity>=Project.MSG_INFO)
83              log(""+total+" jstp "+(total==1?"file":"files")+" translated.");
84      }
85      
86      int translate(File parentDir, String fileRelName) throws Exception
87      {
88          String fileName = fileRelName;
89          String relDir = null;
90          
91          int x = fileRelName.lastIndexOf(File.separatorChar);
92          if(x!=-1)
93          {
94              relDir = fileRelName.substring(0, x);
95              fileName = fileRelName.substring(x+1);
96          }
97          
98          String className = fileName;
99          int y = className.indexOf('.');
100         if(y!=-1)
101             className = className.substring(0, y);
102         
103         String pkgName = null;
104         if(autopkg && relDir!=null)
105             pkgName = relDir.replace(File.separatorChar, '.');
106         
107         File srcFile = new File(parentDir, fileRelName);
108         
109         File desDir = destDir!=null? destDir : parentDir ;
110         if(relDir!=null)
111             desDir = new File(desDir, relDir);
112         desDir.mkdirs();
113         File desFile = new File(desDir, className+".java");
114         
115         if(!forceOverwrite && desFile.exists() &&desFile.lastModified()>srcFile.lastModified())
116             return 0; 
117         
118         InputStream in = null;
119         OutputStream out = null;
120         try
121         {
122             in = new BufferedInputStream(new FileInputStream(srcFile));
123             out = new BufferedOutputStream(new FileOutputStream(desFile));
124             Reader reader = encoding==null? new InputStreamReader(in) : new InputStreamReader(in, encoding);
125             Writer writer = encoding==null? new OutputStreamWriter(out) : new OutputStreamWriter(out, encoding);
126             
127             try
128             {
129                 JstpTranslator.translate(pkgName, className, reader, writer);
130             }
131             catch (JstpParserException e)
132             {
133                 throw new BuildException("error translating "+srcFile+" ("+e.row+":"+e.col+") "+e, e);
134             }
135             
136             writer.flush();
137             if(verbosity>=Project.MSG_VERBOSE)
138                 log("generated "+desFile.getPath());
139             return 1;
140         }
141         finally
142         {
143             if(out!=null) out.close();
144             if(in!=null) in.close();
145         }
146     }
147 }