KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > jasperreports > engine > design > JRJdk13Compiler


1 /*
2  * ============================================================================
3  * GNU Lesser General Public License
4  * ============================================================================
5  *
6  * JasperReports - Free Java report-generating library.
7  * Copyright (C) 2001-2006 JasperSoft Corporation http://www.jaspersoft.com
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22  *
23  * JasperSoft Corporation
24  * 303 Second Street, Suite 450 North
25  * San Francisco, CA 94107
26  * http://www.jaspersoft.com
27  */

28 package net.sf.jasperreports.engine.design;
29
30 //import java.io.ByteArrayOutputStream;
31
import java.io.File JavaDoc;
32 import java.io.PrintWriter JavaDoc;
33 import java.io.ByteArrayOutputStream JavaDoc;
34 import java.lang.reflect.Method JavaDoc;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38
39 import net.sf.jasperreports.engine.JRException;
40 import net.sf.jasperreports.engine.util.JRClassLoader;
41
42
43 /**
44  * @author Teodor Danciu (teodord@users.sourceforge.net)
45  * @version $Id: JRJdk13Compiler.java 1229 2006-04-19 13:27:35 +0300 (Wed, 19 Apr 2006) teodord $
46  */

47 public class JRJdk13Compiler extends JRAbstractMultiClassCompiler
48 {
49
50
51     /**
52      *
53      */

54     static final Log log = LogFactory.getLog(JRJdk13Compiler.class);
55
56     /**
57      *
58      */

59     private static final int MODERN_COMPILER_SUCCESS = 0;
60
61
62     /**
63      *
64      */

65     public String JavaDoc compileClasses(File JavaDoc[] sourceFiles, String JavaDoc classpath) throws JRException
66     {
67         String JavaDoc[] source = new String JavaDoc[sourceFiles.length + 2];
68         for (int i = 0; i < sourceFiles.length; i++)
69         {
70             source[i] = sourceFiles[i].getPath();
71         }
72         source[sourceFiles.length] = "-classpath";
73         source[sourceFiles.length + 1] = classpath;
74         
75         String JavaDoc errors = null;
76         
77         
78
79         try
80         {
81             Class JavaDoc clazz = JRClassLoader.loadClassForName("com.sun.tools.javac.Main");
82             Object JavaDoc compiler = clazz.newInstance();
83             
84             try
85             {
86                 Method JavaDoc compileMethod = clazz.getMethod("compile", new Class JavaDoc[] {String JavaDoc[].class, PrintWriter JavaDoc.class});
87                 ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
88                 int result = ((Integer JavaDoc)compileMethod.invoke(compiler, new Object JavaDoc[] {source, new PrintWriter JavaDoc(baos)})).intValue();
89                 
90                 if (result != MODERN_COMPILER_SUCCESS)
91                 {
92                     errors = baos.toString();
93                 }
94                 else
95                 {
96                     if (log.isInfoEnabled() && baos.size() > 0)
97                         log.info(baos.toString());
98                 }
99             }
100             catch (NoSuchMethodException JavaDoc ex)
101             {
102                 Method JavaDoc compileMethod = clazz.getMethod("compile", new Class JavaDoc[] {String JavaDoc[].class});
103
104                 int result = ((Integer JavaDoc)compileMethod.invoke(compiler, new Object JavaDoc[] {source})).intValue();
105                 if (result != MODERN_COMPILER_SUCCESS)
106                 {
107                     errors = "See error messages above.";
108                 }
109             }
110         }
111         catch (Exception JavaDoc e)
112         {
113             StringBuffer JavaDoc files = new StringBuffer JavaDoc();
114             for (int i = 0; i < sourceFiles.length; ++i)
115             {
116                 files.append(sourceFiles[i].getPath());
117                 files.append(' ');
118             }
119             throw new JRException("Error compiling report java source files : " + files, e);
120         }
121         
122         return errors;
123     }
124 }
125
Popular Tags