KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > retrotranslator > transformer > RetrotranslatorTask


1 /***
2  * Retrotranslator: a Java bytecode transformer that translates Java classes
3  * compiled with JDK 5.0 into classes that can be run on JVM 1.4.
4  *
5  * Copyright (c) 2005 - 2007 Taras Puchko
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in the
15  * documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the copyright holders nor the names of its
17  * contributors may be used to endorse or promote products derived from
18  * this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30  * THE POSSIBILITY OF SUCH DAMAGE.
31  */

32 package net.sf.retrotranslator.transformer;
33
34 import java.io.File JavaDoc;
35 import java.util.*;
36 import org.apache.tools.ant.*;
37 import org.apache.tools.ant.types.*;
38
39 /**
40  * @author Taras Puchko
41  */

42 public class RetrotranslatorTask extends Task implements MessageLogger {
43
44     private File JavaDoc srcdir;
45     private File JavaDoc srcjar;
46     private File JavaDoc destdir;
47     private File JavaDoc destjar;
48     private List<FileSet> fileSets = new ArrayList<FileSet>();
49     private List<FileSet> jarFileSets = new ArrayList<FileSet>();
50     private List<DirSet> dirSets = new ArrayList<DirSet>();
51     private boolean verbose;
52     private boolean stripsign;
53     private boolean retainapi;
54     private boolean retainflags;
55     private boolean lazy;
56     private boolean advanced;
57     private boolean verify;
58     private boolean failonwarning = true;
59     private String JavaDoc srcmask;
60     private String JavaDoc embed;
61     private String JavaDoc backport;
62     private String JavaDoc target;
63     private Path classpath;
64
65     public RetrotranslatorTask() {
66     }
67
68     public void setSrcdir(File JavaDoc srcdir) {
69         this.srcdir = srcdir;
70     }
71
72     public void setSrcjar(File JavaDoc srcjar) {
73         this.srcjar = srcjar;
74     }
75
76     public void setDestdir(File JavaDoc destdir) {
77         this.destdir = destdir;
78     }
79
80     public void setDestjar(File JavaDoc destjar) {
81         this.destjar = destjar;
82     }
83
84     public void addConfiguredFileset(FileSet fileSet) {
85         fileSets.add(fileSet);
86     }
87
88     public void addConfiguredJarfileset(FileSet fileSet) {
89         jarFileSets.add(fileSet);
90     }
91
92     public void addConfiguredDirset(DirSet dirSet) {
93         dirSets.add(dirSet);
94     }
95
96     public void setVerbose(boolean verbose) {
97         this.verbose = verbose;
98     }
99
100     public void setStripsign(boolean stripsign) {
101         this.stripsign = stripsign;
102     }
103
104     public void setRetainapi(boolean retainapi) {
105         this.retainapi = retainapi;
106     }
107
108     public void setRetainflags(boolean retainflags) {
109         this.retainflags = retainflags;
110     }
111
112     public void setLazy(boolean lazy) {
113         this.lazy = lazy;
114     }
115
116     public void setAdvanced(boolean advanced) {
117         this.advanced = advanced;
118     }
119
120     public void setVerify(boolean verify) {
121         this.verify = verify;
122     }
123
124     public void setFailonwarning(boolean failonwarning) {
125         this.failonwarning = failonwarning;
126     }
127
128     public void setSrcmask(String JavaDoc srcmask) {
129         this.srcmask = srcmask;
130     }
131
132     public void setEmbed(String JavaDoc embed) {
133         this.embed = embed;
134     }
135
136     public void setBackport(String JavaDoc backport) {
137         this.backport = backport;
138     }
139
140     public void setTarget(String JavaDoc target) {
141         this.target = target;
142     }
143
144     public void setClasspathref(Reference classpathref) {
145         createClasspath().setRefid(classpathref);
146     }
147
148     public void setClasspath(Path classpath) {
149         this.getClasspath().append(classpath);
150     }
151
152     public Path createClasspath() {
153         return getClasspath().createPath();
154     }
155
156     private Path getClasspath() {
157         return classpath != null ? classpath : (classpath = new Path(getProject()));
158     }
159
160     public void log(Message message) {
161         log(message.toString(), message.getLevel().isCritical() ? Project.MSG_WARN : Project.MSG_INFO);
162     }
163
164     public void execute() throws BuildException {
165         Retrotranslator retrotranslator = new Retrotranslator();
166         if (srcdir != null) retrotranslator.addSrcdir(srcdir);
167         if (srcjar != null) retrotranslator.addSrcjar(srcjar);
168         if (destdir != null) retrotranslator.setDestdir(destdir);
169         if (destjar != null) retrotranslator.setDestjar(destjar);
170         for (FileSet fileSet : fileSets) {
171             DirectoryScanner scanner = fileSet.getDirectoryScanner(getProject());
172             retrotranslator.addSourceFiles(scanner.getBasedir(), Arrays.asList(scanner.getIncludedFiles()));
173         }
174         for (FileSet jarFileSet : jarFileSets) {
175             DirectoryScanner scanner = jarFileSet.getDirectoryScanner(getProject());
176             File JavaDoc basedir = scanner.getBasedir();
177             for (String JavaDoc jarFile : scanner.getIncludedFiles()) {
178                 retrotranslator.addSrcjar(new File JavaDoc(basedir, jarFile));
179             }
180         }
181         for (DirSet dirSet : dirSets) {
182             DirectoryScanner scanner = dirSet.getDirectoryScanner(getProject());
183             File JavaDoc basedir = scanner.getBasedir();
184             for (String JavaDoc subdirectory : scanner.getIncludedDirectories()) {
185                 retrotranslator.addSrcdir(new File JavaDoc(basedir, subdirectory));
186             }
187         }
188         retrotranslator.setVerbose(verbose);
189         retrotranslator.setStripsign(stripsign);
190         retrotranslator.setRetainapi(retainapi);
191         retrotranslator.setRetainflags(retainflags);
192         retrotranslator.setLazy(lazy);
193         retrotranslator.setAdvanced(advanced);
194         retrotranslator.setVerify(verify);
195         retrotranslator.setSrcmask(srcmask);
196         retrotranslator.setEmbed(embed);
197         retrotranslator.setBackport(backport);
198         if (target != null) retrotranslator.setTarget(target);
199         for (String JavaDoc fileName : getClasspath().list()) {
200             retrotranslator.addClasspathElement(getProject().resolveFile(fileName));
201         }
202         retrotranslator.setLogger(this);
203         boolean success = retrotranslator.run();
204         if (!success && failonwarning) {
205             throw new BuildException("Translation failed.", getLocation());
206         }
207     }
208 }
209
Popular Tags