pbwest 2003/07/05 12:04:51
Added: src/java/org/apache/fop/apps Tag: FOP_0-20-0_Alt-Design
Fop.java FOPException.java CommandLineStarter.java
package.html InputHandler.java ErrorHandler.java
Options.java FOInputHandler.java Driver.java
Log:
Moved from src to src/java.
Revision Changes Path
No revision
No revision
1.1.2.1 +81 -45 xml-fop/src/java/org/apache/fop/apps/Fop.java
Index: Fop.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/Fop.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- Fop.java 11 Mar 2003 13:05:28 -0000 1.1
+++ Fop.java 5 Jul 2003 19:04:50 -0000 1.1.2.1
@@ -1,7 +1,8 @@
/*
* $Id$
+ *
* ============================================================================
- * The Apache Software License, Version 1.1
+ * The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
@@ -9,7 +10,7 @@
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
- * 1. Redistributions of source code must retain the above copyright notice,
+ * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
@@ -17,72 +18,107 @@
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
- * include the following acknowledgment: "This product includes software
- * developed by the Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself, if
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- * endorse or promote products derived from this software without prior
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
- * 5. Products derived from this software may not be called "Apache", nor may
- * "Apache" appear in their name, without prior written permission of the
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
*
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ *
+ */
+
package org.apache.fop.apps;
-/**
- * The main application class for the FOP command line interface (CLI).
- */
+import org.apache.fop.messaging.MessageHandler;
+
public class Fop {
- /**
- * The main routine for the command line interface
- * @param args the command line parameters
- */
+ public static Runtime runtime;
+ public static long startTotal;
+ public static long startFree;
+ public static long startTime;
+ public static long startPCi;
+ public static long endPCi;
+
public static void main(String[] args) {
- CommandLineOptions options = null;
+
+ long endtotal, endfree, gctotal, gcfree;
+ Driver driver;
+ Boolean bool = null;
+
+ runtime = Runtime.getRuntime();
+ startTotal = runtime.totalMemory();
+ startFree = runtime.freeMemory();
+ startTime = System.currentTimeMillis();
try {
- options = new CommandLineOptions(args);
- Starter starter = options.getStarter();
- starter.run();
+ Options.configure(args);
+ driver = new Driver();
+ driver.run();
+ System.out.println("Back from driver.run()");
+ System.out.println("Elapsed time: " +
+ (System.currentTimeMillis() - startTime));
+ endtotal = runtime.totalMemory();
+ endfree = runtime.freeMemory();
+ System.gc();
+ gctotal = runtime.totalMemory();
+ gcfree = runtime.freeMemory();
+ System.out.println("Total memory before run : " + startTotal);
+ System.out.println("Total memory after run : " + endtotal);
+ System.out.println("Total memory after GC : " + gctotal);
+ System.out.println("Diff before/after total : "
+ + (endtotal - startTotal));
+ System.out.println("Diff before/GC total : "
+ + (gctotal - startTotal));
+ System.out.println("Diff after/GC total : "
+ + (gctotal - endtotal));
+ System.out.println("Free memory before run : " + startFree);
+ System.out.println("Free memory after run : " + endfree);
+ System.out.println("Free memory after GC : " + gcfree);
+ System.out.println("Diff before/after free : "
+ + (endfree - startFree));
+ System.out.println("Diff before/GC free : "
+ + (gcfree - startFree));
+ System.out.println("Diff after/GC free : "
+ + (gcfree - endfree));
+ System.out.println("cg() freed : "
+ + (gcfree - endfree));
+ //System.out.println("PC time : " + (endPCi - startPCi));
+
} catch (FOPException e) {
- if (e.getMessage() == null) {
- System.err.println("Exception occured with a null error message");
- } else {
- System.err.println("" + e.getMessage());
- }
- if (options != null && options.getLogger().isDebugEnabled()) {
+ MessageHandler.errorln("ERROR: " + e.getMessage());
+ if ((bool = Options.isDebugMode()) != null
+ && bool.booleanValue()) {
e.printStackTrace();
- } else {
- System.err.println("Turn on debugging for more information");
}
} catch (java.io.FileNotFoundException e) {
- System.err.println("" + e.getMessage());
- if (options != null && options.getLogger().isDebugEnabled()) {
+ MessageHandler.errorln("ERROR: " + e.getMessage());
+ if ((bool = Options.isDebugMode()) != null
+ && bool.booleanValue()) {
e.printStackTrace();
- } else {
- System.err.println("Turn on debugging for more information");
}
}
}
1.2.2.1 +50 -72 xml-fop/src/java/org/apache/fop/apps/FOPException.java
Index: FOPException.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/FOPException.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- FOPException.java 5 Jul 2003 09:28:34 -0000 1.2
+++ FOPException.java 5 Jul 2003 19:04:50 -0000 1.2.2.1
@@ -1,65 +1,70 @@
/*
* $Id$
+ *
* ============================================================================
- * The Apache Software License, Version 1.1
+ * The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
- * include the following acknowledgment: "This product includes software
- * developed by the Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself, if
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- * endorse or promote products derived from this software without prior
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
- *
- * 5. Products derived from this software may not be called "Apache", nor may
- * "Apache" appear in their name, without prior written permission of the
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
- *
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
+ *
*/
+
package org.apache.fop.apps;
import org.xml.sax.SAXException;
+
/**
- * Exception thrown when FOP has a problem.
+ * Exception thrown when FOP has a problem
*/
public class FOPException extends Exception {
+ private static final String tag = "$Name$";
+ private static final String revision = "$Revision$";
private static final String EXCEPTION_SEPARATOR = "\n---------\n";
- private Throwable exception;
+ private Throwable _exception;
/**
* create a new FOP Exception
@@ -70,43 +75,26 @@
super(message);
}
- /**
- *
- * @param e Throwable object
- */
public FOPException(Throwable e) {
super(e.getMessage());
setException(e);
}
- /**
- *
- * @param message descriptive message
- * @param e Throwable object
- */
public FOPException(String message, Throwable e) {
super(message);
setException(e);
}
- /**
- * Sets exception
- * @param t Throwable object
- */
protected void setException(Throwable t) {
- exception = t;
+ _exception = t;
}
- /**
- * Accessor for exception
- * @return exception
- */
public Throwable getException() {
- return exception;
+ return _exception;
}
protected Throwable getRootException() {
- Throwable result = exception;
+ Throwable result = _exception;
if (result instanceof SAXException) {
result = ((SAXException)result).getException();
@@ -115,21 +103,19 @@
result =
((java.lang.reflect.InvocationTargetException)result).getTargetException();
}
- if (result != exception) {
+ if (result != _exception) {
return result;
}
return null;
}
- /**
- * Write stack trace to stderr
- */
+
public void printStackTrace() {
synchronized (System.err) {
super.printStackTrace();
- if (exception != null) {
+ if (_exception != null) {
System.err.println(EXCEPTION_SEPARATOR);
- exception.printStackTrace();
+ _exception.printStackTrace();
}
if (getRootException() != null) {
System.err.println(EXCEPTION_SEPARATOR);
@@ -138,37 +124,29 @@
}
}
- /**
- * write stack trace on a PrintStream
- * @param stream PrintStream on which to write stack trace
- */
public void printStackTrace(java.io.PrintStream stream) {
synchronized (stream) {
super.printStackTrace(stream);
- if (exception != null) {
+ if (_exception != null) {
stream.println(EXCEPTION_SEPARATOR);
- exception.printStackTrace(stream);
+ _exception.printStackTrace(stream);
}
if (getRootException() != null) {
- stream.println(EXCEPTION_SEPARATOR);
+ System.err.println(EXCEPTION_SEPARATOR);
getRootException().printStackTrace(stream);
}
}
}
- /**
- * Write stack trace on a PrintWriter
- * @param writer PrintWriter on which to write stack trace
- */
public void printStackTrace(java.io.PrintWriter writer) {
synchronized (writer) {
super.printStackTrace(writer);
- if (exception != null) {
+ if (_exception != null) {
writer.println(EXCEPTION_SEPARATOR);
- exception.printStackTrace(writer);
+ _exception.printStackTrace(writer);
}
if (getRootException() != null) {
- writer.println(EXCEPTION_SEPARATOR);
+ System.err.println(EXCEPTION_SEPARATOR);
getRootException().printStackTrace(writer);
}
}
1.3.2.1 +25 -86 xml-fop/src/java/org/apache/fop/apps/CommandLineStarter.java
Index: CommandLineStarter.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/CommandLineStarter.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- CommandLineStarter.java 17 Jun 2003 16:35:57 -0000 1.3
+++ CommandLineStarter.java 5 Jul 2003 19:04:50 -0000 1.3.2.1
@@ -1,7 +1,8 @@
/*
* $Id$
+ *
* ============================================================================
- * The Apache Software License, Version 1.1
+ * The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
@@ -9,7 +10,7 @@
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
- * 1. Redistributions of source code must retain the above copyright notice,
+ * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
@@ -17,105 +18,43 @@
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
- * include the following acknowledgment: "This product includes software
- * developed by the Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself, if
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- * endorse or promote products derived from this software without prior
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
- * 5. Products derived from this software may not be called "Apache", nor may
- * "Apache" appear in their name, without prior written permission of the
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
*
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
-package org.apache.fop.apps;
-
-// SAX
-import org.xml.sax.XMLReader;
-
-// Java
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-
-
-/**
- * super class for all classes which start Fop from the commandline
- *
- * Modified to use new streaming API by Mark Lillywhite, [EMAIL PROTECTED]
+ *
*/
-public class CommandLineStarter extends Starter {
-
- /** the command-line options associated with this starter */
- protected CommandLineOptions commandLineOptions;
-
- /**
- * Main constructor
- * @param commandLineOptions command-line options to use
- * @throws FOPException In case of failure
- */
- public CommandLineStarter(CommandLineOptions commandLineOptions)
- throws FOPException {
- this.commandLineOptions = commandLineOptions;
- super.setInputHandler(commandLineOptions.getInputHandler());
- }
- /**
- * Run the format.
- * @exception FOPException if there is an error during processing
- */
- public void run() throws FOPException {
- String version = Version.getVersion();
-
- getLogger().info(version);
-
- XMLReader parser = inputHandler.getParser();
- setParserFeatures(parser);
+package org.apache.fop.apps;
- Driver driver = new Driver();
- setupLogger(driver);
- driver.initialize();
+public class CommandLineStarter {
- try {
- driver.setRenderer(commandLineOptions.getRenderer());
- BufferedOutputStream bos = new BufferedOutputStream(new
FileOutputStream(
- commandLineOptions.getOutputFile()));
- try {
- driver.setOutputStream(bos);
- if (driver.getRenderer() != null) {
- driver.getRenderer().setOptions(
- commandLineOptions.getRendererOptions());
- }
- driver.render(parser, inputHandler.getInputSource());
- } finally {
- bos.close();
- }
- System.exit(0);
- } catch (Exception e) {
- if (e instanceof FOPException) {
- throw (FOPException) e;
- }
- throw new FOPException(e);
- }
+ public CommandLineStarter() throws FOPException {
}
}
1.1.2.1 +1 -1 xml-fop/src/java/org/apache/fop/apps/package.html
Index: package.html
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/package.html,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- package.html 11 Mar 2003 13:05:28 -0000 1.1
+++ package.html 5 Jul 2003 19:04:50 -0000 1.1.2.1
@@ -4,4 +4,4 @@
<P>Application classes used for running FOP both on the command line and
embedded in other applications.</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
1.4.2.1 +61 -80 xml-fop/src/java/org/apache/fop/apps/InputHandler.java
Index: InputHandler.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/InputHandler.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- InputHandler.java 17 Jun 2003 16:35:57 -0000 1.4
+++ InputHandler.java 5 Jul 2003 19:04:50 -0000 1.4.2.1
@@ -1,7 +1,8 @@
/*
* $Id$
+ *
* ============================================================================
- * The Apache Software License, Version 1.1
+ * The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
@@ -9,7 +10,7 @@
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
- * 1. Redistributions of source code must retain the above copyright notice,
+ * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
@@ -17,94 +18,71 @@
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
- * include the following acknowledgment: "This product includes software
- * developed by the Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself, if
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- * endorse or promote products derived from this software without prior
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
- * 5. Products derived from this software may not be called "Apache", nor may
- * "Apache" appear in their name, without prior written permission of the
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
*
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ *
+ */
+
package org.apache.fop.apps;
// SAX
+import java.io.File;
+import java.net.URL;
+
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
-import org.xml.sax.SAXException;
-// Java
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.net.URL;
-import java.io.File;
+import org.apache.fop.messaging.MessageHandler;
-/**
- * Abstract super class for input handlers.
- * Should be used to abstract the various possibilities on how input
- * can be provided to FOP (but actually isn't).
- */
-public abstract class InputHandler {
- /**
- * Get the input source associated with this input handler.
- * @return the input source
- */
- public abstract InputSource getInputSource();
+abstract public class InputHandler {
- /**
- * Get the SAX parser associated with this input handler.
- * @return the SAX parser
- * @throws FOPException in case of an error determining the SAX parser
- */
- public abstract XMLReader getParser() throws FOPException;
- /**
- * Creates an InputSource from a URL.
- * @param url URL to use
- * @return the newly created InputSource
- */
- public static InputSource urlInputSource(URL url) {
- return new InputSource(url.toString());
- }
+ abstract public InputSource getInputSource();
+ abstract public XMLReader getParser() throws FOPException;
+
/**
- * Creates an <code>InputSource</code> from a <code>File</code>
- * @param file the <code>File</code>
- * @return the <code>InputSource</code> created
+ * create an InputSource from a File
+ *
+ * @param file the File
+ * @return the InputSource created
*/
- public static InputSource fileInputSource(File file) {
+ static public InputSource fileInputSource(File file) {
/* this code adapted from James Clark's in XT */
String path = file.getAbsolutePath();
String fSep = System.getProperty("file.separator");
- if (fSep != null && fSep.length() == 1) {
+ if (fSep != null && fSep.length() == 1)
path = path.replace(fSep.charAt(0), '/');
- }
- if (path.length() > 0 && path.charAt(0) != '/') {
+ if (path.length() > 0 && path.charAt(0) != '/')
path = '/' + path;
- }
try {
return new InputSource(new URL("file", null, path).toString());
} catch (java.net.MalformedURLException e) {
@@ -113,29 +91,32 @@
}
/**
- * Creates <code>XMLReader</code> object using default
- * <code>SAXParserFactory</code>
- * @return the created <code>XMLReader</code>
- * @throws FOPException if the parser couldn't be created or configured for
proper operation.
+ * creates a SAX parser, using the value of org.xml.sax.parser
+ * defaulting to org.apache.xerces.parsers.SAXParser
+ *
+ * @return the created SAX parser
*/
protected static XMLReader createParser() throws FOPException {
+ String parserClassName = System.getProperty("org.xml.sax.parser");
+ if (parserClassName == null) {
+ parserClassName = "org.apache.xerces.parsers.SAXParser";
+ }
+ MessageHandler.logln("using SAX parser " + parserClassName);
+
try {
- SAXParserFactory factory = SAXParserFactory.newInstance();
- factory.setNamespaceAware(true);
- return factory.newSAXParser().getXMLReader();
- } catch (SAXException se) {
- throw new FOPException("Coudn't create XMLReader", se);
- } catch (ParserConfigurationException pce) {
- throw new FOPException("Coudn't create XMLReader", pce);
+ return (XMLReader)Class.forName(parserClassName).newInstance();
+ } catch (ClassNotFoundException e) {
+ throw new FOPException(e);
+ } catch (InstantiationException e) {
+ throw new FOPException("Could not instantiate "
+ + parserClassName, e);
+ } catch (IllegalAccessException e) {
+ throw new FOPException("Could not access " + parserClassName, e);
+ } catch (ClassCastException e) {
+ throw new FOPException(parserClassName + " is not a SAX driver",
+ e);
}
}
-
- /**
- * Runs this InputHandler through the Driver.
- * @param driver Driver instance to use
- * @throws FOPException if processing this InputHandler fails
- */
- public abstract void run(Driver driver) throws FOPException;
-
+
}
1.1.2.1 +58 -0 xml-fop/src/java/org/apache/fop/apps/Attic/ErrorHandler.java
1.1.2.1 +918 -0 xml-fop/src/java/org/apache/fop/apps/Attic/Options.java
1.4.2.1 +31 -63 xml-fop/src/java/org/apache/fop/apps/FOInputHandler.java
Index: FOInputHandler.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/FOInputHandler.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- FOInputHandler.java 17 Jun 2003 16:35:57 -0000 1.4
+++ FOInputHandler.java 5 Jul 2003 19:04:50 -0000 1.4.2.1
@@ -1,7 +1,8 @@
/*
* $Id$
+ *
* ============================================================================
- * The Apache Software License, Version 1.1
+ * The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
@@ -9,7 +10,7 @@
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
- * 1. Redistributions of source code must retain the above copyright notice,
+ * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
@@ -17,96 +18,63 @@
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
- * include the following acknowledgment: "This product includes software
- * developed by the Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself, if
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- * endorse or promote products derived from this software without prior
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
- * 5. Products derived from this software may not be called "Apache", nor may
- * "Apache" appear in their name, without prior written permission of the
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
*
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ *
+ */
+
package org.apache.fop.apps;
// Imported SAX classes
+import java.io.File;
+
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
-// java
-import java.io.File;
-import java.net.URL;
-
/**
- * Manages input if it is an XSL-FO file.
+ * Manages input if it is an xsl:fo file
*/
public class FOInputHandler extends InputHandler {
-
- private File fofile = null;
- private URL foURL = null;
-
- /**
- * Create a FOInputHandler for a file.
- * @param fofile the file to read the FO document.
- */
+
+ File fofile;
public FOInputHandler(File fofile) {
this.fofile = fofile;
}
- /**
- * Create a FOInputHandler for an URL.
- * @param url the URL to read the FO document.
- */
- public FOInputHandler(URL url) {
- this.foURL = url;
- }
-
-
- /**
- * @see org.apache.fop.apps.InputHandler#getInputSource()
- */
- public InputSource getInputSource () {
- if (fofile != null) {
- return super.fileInputSource(fofile);
- }
- return super.urlInputSource(foURL);
+ public InputSource getInputSource() {
+ return super.fileInputSource(fofile);
}
- /**
- * @see org.apache.fop.apps.InputHandler#getParser()
- */
public XMLReader getParser() throws FOPException {
return super.createParser();
}
-
- /**
- * @see org.apache.fop.apps.InputHandler#run(Driver)
- */
- public void run(Driver driver) throws FOPException {
- throw new FOPException("not implemented: FOInputHandler.run(Driver)");
- }
-
}
1.9.2.1 +126 -591 xml-fop/src/java/org/apache/fop/apps/Driver.java
Index: Driver.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/Driver.java,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- Driver.java 5 Jul 2003 09:28:34 -0000 1.9
+++ Driver.java 5 Jul 2003 19:04:50 -0000 1.9.2.1
@@ -1,650 +1,185 @@
/*
* $Id$
+ *
* ============================================================================
- * The Apache Software License, Version 1.1
+ * The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
- * include the following acknowledgment: "This product includes software
- * developed by the Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself, if
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- * endorse or promote products derived from this software without prior
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* [EMAIL PROTECTED]
- *
- * 5. Products derived from this software may not be called "Apache", nor may
- * "Apache" appear in their name, without prior written permission of the
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
- *
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <[EMAIL PROTECTED]>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
+ *
*/
+
package org.apache.fop.apps;
// FOP
-import org.apache.fop.fo.ElementMapping;
-import org.apache.fop.fo.FOTreeBuilder;
-import org.apache.fop.fo.FOUserAgent;
-import org.apache.fop.fo.StructureHandler;
-import org.apache.fop.layoutmgr.LayoutHandler;
-import org.apache.fop.mif.MIFHandler;
-import org.apache.fop.render.Renderer;
-import org.apache.fop.rtf.renderer.RTFHandler;
-import org.apache.fop.tools.DocumentInputSource;
-import org.apache.fop.tools.DocumentReader;
-
-// Avalon
-import org.apache.avalon.framework.logger.ConsoleLogger;
-import org.apache.avalon.framework.logger.LogEnabled;
-import org.apache.avalon.framework.logger.Logger;
-
-// DOM
-import org.w3c.dom.Document;
-
-// SAX
-import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-
-// Java
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Primary class that drives overall FOP process.
- * <P>
- * The simplest way to use this is to instantiate it with the
- * InputSource and OutputStream, then set the renderer desired, and
- * calling run();
- * <P>
- * Here is an example use of Driver which outputs PDF:
- *
- * <PRE>
- * Driver driver = new Driver(new InputSource (args[0]),
- * new FileOutputStream(args[1]));
- * driver.enableLogging(myLogger); //optional
- * driver.setRenderer(RENDER_PDF);
- * driver.run();
- * </PRE>
- * If neccessary, calling classes can call into the lower level
- * methods to setup and
- * render. Methods can be called to set the
- * Renderer to use, the (possibly multiple) ElementMapping(s) to
- * use and the OutputStream to use to output the results of the
- * rendering (where applicable). In the case of the Renderer and
- * ElementMapping(s), the Driver may be supplied either with the
- * object itself, or the name of the class, in which case Driver will
- * instantiate the class itself. The advantage of the latter is it
- * enables runtime determination of Renderer and ElementMapping(s).
- * <P>
- * Once the Driver is set up, the render method
- * is called. Depending on whether DOM or SAX is being used, the
- * invocation of the method is either render(Document) or
- * buildFOTree(Parser, InputSource) respectively.
- * <P>
- * A third possibility may be used to build the FO Tree, namely
- * calling getContentHandler() and firing the SAX events yourself.
- * <P>
- * Once the FO Tree is built, the format() and render() methods may be
- * called in that order.
- * <P>
- * Here is an example use of Driver which outputs to AWT:
- *
- * <PRE>
- * Driver driver = new Driver();
- * driver.enableLogging(myLogger); //optional
- * driver.setRenderer(new org.apache.fop.render.awt.AWTRenderer(translator));
- * driver.render(parser, fileInputSource(args[0]));
- * </PRE>
- */
-public class Driver implements LogEnabled {
-
- /**
- * Render to PDF. OutputStream must be set
- */
- public static final int RENDER_PDF = 1;
-
- /**
- * Render to a GUI window. No OutputStream neccessary
- */
- public static final int RENDER_AWT = 2;
- /**
- * Render to MIF. OutputStream must be set
- */
- public static final int RENDER_MIF = 3;
-
- /**
- * Render to XML. OutputStream must be set
- */
- public static final int RENDER_XML = 4;
-
- /**
- * Render to PRINT. No OutputStream neccessary
- */
- public static final int RENDER_PRINT = 5;
-
- /**
- * Render to PCL. OutputStream must be set
- */
- public static final int RENDER_PCL = 6;
+import org.apache.fop.configuration.Configuration;
+import org.apache.fop.fo.FOTree;
+import org.apache.fop.layout.AreaTree;
+import org.apache.fop.messaging.MessageHandler;
+import org.apache.fop.version.Version;
+import org.apache.fop.xml.FoXMLSerialHandler;
+import org.apache.fop.xml.SyncedFoXmlEventsBuffer;
+public class Driver {
/**
- * Render to Postscript. OutputStream must be set
+ * If true, full error stacks are reported
*/
- public static final int RENDER_PS = 7;
+ private static boolean _errorDump = false;
- /**
- * Render to Text. OutputStream must be set
- */
- public static final int RENDER_TXT = 8;
-
- /**
- * Render to SVG. OutputStream must be set
- */
- public static final int RENDER_SVG = 9;
-
- /**
- * Render to RTF. OutputStream must be set
- */
- public static final int RENDER_RTF = 10;
-
- /**
- * the FO tree builder
- */
- private FOTreeBuilder treeBuilder;
-
- /**
- * the renderer type code given by setRenderer
- */
- private int rendererType;
-
- /**
- * the renderer to use to output the area tree
- */
- private Renderer renderer;
-
- /**
- * the structure handler
- */
- private StructureHandler structHandler;
-
- /**
- * the source of the FO file
- */
+ private InputHandler inputHandler;
+ private XMLReader parser;
private InputSource source;
- /**
- * the stream to use to output the results of the renderer
- */
- private OutputStream stream;
-
- /**
- * The XML parser to use when building the FO tree
- */
- private XMLReader reader;
+ private FoXMLSerialHandler xmlhandler;
+ private SyncedFoXmlEventsBuffer xmlevents;
+ private FOTree foTree;
+ private AreaTree areaTree = new AreaTree();
+
+ private Thread driverThread;
+ private Thread parserThread;
+ private Thread foThread;
+ private Thread areaThread;
+ private Thread renderThread;
- /**
- * the system resources that FOP will use
- */
- private Logger log = null;
- private FOUserAgent userAgent = null;
/**
- * Returns the fully qualified classname of the standard XML parser for FOP
- * to use.
- * @return the XML parser classname
- */
- public static final String getParserClassName() {
+ * What does the Driver do?
+ * When it has all of the ancillary requirements, it sets up the
+ * serialized components:
+ * XMLEventSource <=> FOTree <=> AreaTree ...
+ */
+ public Driver() throws FOPException {
+ _errorDump =
+ Configuration.getBooleanValue("debugMode").booleanValue();
+ String version = Version.getVersion();
+ MessageHandler.logln(version);
+ }
+
+ public void run () throws FOPException {
+ setInputHandler(Options.getInputHandler());
+ parser = inputHandler.getParser();
+ source = inputHandler.getInputSource();
+ setParserFeatures(parser);
+
+ xmlevents = new SyncedFoXmlEventsBuffer();
+ xmlhandler = new FoXMLSerialHandler(xmlevents, parser, source);
+ foTree = new FOTree(xmlevents);
+
+ driverThread = Thread.currentThread();
+ foThread = new Thread(foTree, "FOTreeBuilder");
+ foThread.setDaemon(true);
+ parserThread = new Thread(xmlhandler, "XMLSerialHandler");
+ parserThread.setDaemon(true);
+
+ xmlhandler.setFoThread(foThread);
+ foTree.setParserThread(parserThread);
+
+ System.out.println("Starting parserThread");
+ parserThread.start();
+ System.out.println("parserThread started");
+ foThread.start();
+ System.out.println("foThread started");
try {
- return javax.xml.parsers.SAXParserFactory.newInstance()
- .newSAXParser().getXMLReader().getClass().getName();
- } catch (javax.xml.parsers.ParserConfigurationException e) {
- return null;
- } catch (org.xml.sax.SAXException e) {
- return null;
- }
- }
-
- /**
- * Main constructor for the Driver class.
- */
- public Driver() {
- stream = null;
- }
-
- /**
- * Convenience constructor for directly setting input and output.
- * @param source InputSource to take the XSL-FO input from
- * @param stream Target output stream
- */
- public Driver(InputSource source, OutputStream stream) {
- this();
- this.source = source;
- this.stream = stream;
- }
-
- private boolean isInitialized() {
- return (treeBuilder != null);
- }
-
- /**
- * Initializes the Driver object.
- */
- public void initialize() {
- if (isInitialized()) {
- throw new IllegalStateException("Driver already initialized");
- }
- treeBuilder = new FOTreeBuilder();
- treeBuilder.setUserAgent(getUserAgent());
- }
-
- /**
- * Optionally sets the FOUserAgent instance for FOP to use. The Driver
- * class sets up its own FOUserAgent if none is set through this method.
- * @param agent FOUserAgent to use
- */
- public void setUserAgent(FOUserAgent agent) {
- userAgent = agent;
- }
-
- private FOUserAgent getUserAgent() {
- if (userAgent == null) {
- userAgent = new FOUserAgent();
- userAgent.enableLogging(getLogger());
- userAgent.setBaseURL("");
- }
- return userAgent;
- }
-
- /**
- * Provide the Driver instance with a logger. More information on Avalon
- * logging can be found at the
- * <a href="http://avalon.apache.org">Avalon site</a>.
- *
- * @param log the logger. Must not be <code>null</code>.
- * @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(Logger)
- */
- public void enableLogging(Logger log) {
- if (this.log == null) {
- this.log = log;
- } else {
- getLogger().warn("Logger is already set! Won't use the new logger.");
- }
- }
-
- /**
- * Provide the Driver instance with a logger.
- * @param log the logger. Must not be <code>null</code>.
- * @deprecated Use #enableLogging(Logger) instead.
- */
- public void setLogger(Logger log) {
- enableLogging(log);
- }
-
-
- /**
- * Returns the logger for use by FOP.
- * @return the logger
- * @see #enableLogging(Logger)
- */
- protected Logger getLogger() {
- if (this.log == null) {
- this.log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
- this.log.error("Logger not set. Using ConsoleLogger as default.");
- }
-
- return this.log;
- }
-
- /**
- * Resets the Driver so it can be reused. Property and element
- * mappings are reset to defaults.
- * The output stream is cleared. The renderer is cleared.
- */
- public synchronized void reset() {
- source = null;
- stream = null;
- reader = null;
- treeBuilder.reset();
- }
-
- /**
- * Indicates whether FOP has already received input data.
- * @return true, if input data was received
- */
- public boolean hasData() {
- return (treeBuilder.hasData());
- }
-
- /**
- * Set the OutputStream to use to output the result of the Renderer
- * (if applicable)
- * @param stream the stream to output the result of rendering to
- */
- public void setOutputStream(OutputStream stream) {
- this.stream = stream;
- }
-
- private void validateOutputStream() {
- if (this.stream == null) {
- throw new IllegalStateException("OutputStream has not been set");
- }
- }
-
- /**
- * Set the source for the FO document. This can be a normal SAX
- * InputSource, or an DocumentInputSource containing a DOM document.
- * @see DocumentInputSource
- */
- public void setInputSource(InputSource source) {
- this.source = source;
- }
-
- /**
- * Sets the reader used when reading in the source. If not set,
- * this defaults to a basic SAX parser.
- * @param reader the reader to use.
- */
- public void setXMLReader(XMLReader reader) {
- this.reader = reader;
- }
-
- /**
- * Shortcut to set the rendering type to use. Must be one of
- * <ul>
- * <li>RENDER_PDF</li>
- * <li>RENDER_AWT</li>
- * <li>RENDER_MIF</li>
- * <li>RENDER_XML</li>
- * <li>RENDER_PCL</li>
- * <li>RENDER_PS</li>
- * <li>RENDER_TXT</li>
- * <li>RENDER_SVG</li>
- * <li>RENDER_RTF</li>
- * </ul>
- * @param renderer the type of renderer to use
- * @throws IllegalArgumentException if an unsupported renderer type was
required.
- */
- public void setRenderer(int renderer) throws IllegalArgumentException {
- rendererType = renderer;
- switch (renderer) {
- case RENDER_PDF:
- setRenderer("org.apache.fop.render.pdf.PDFRenderer");
- break;
- case RENDER_AWT:
- throw new IllegalArgumentException("Use renderer form of setRenderer()
for AWT");
- case RENDER_PRINT:
- throw new IllegalArgumentException("Use renderer form of setRenderer()
for PRINT");
- case RENDER_PCL:
- setRenderer("org.apache.fop.render.pcl.PCLRenderer");
- break;
- case RENDER_PS:
- setRenderer("org.apache.fop.render.ps.PSRenderer");
- break;
- case RENDER_TXT:
- setRenderer("org.apache.fop.render.txt.TXTRenderer()");
- break;
- case RENDER_MIF:
- //structHandler will be set later
- break;
- case RENDER_XML:
- setRenderer("org.apache.fop.render.xml.XMLRenderer");
- break;
- case RENDER_SVG:
- setRenderer("org.apache.fop.render.svg.SVGRenderer");
- break;
- case RENDER_RTF:
- //structHandler will be set later
- break;
- default:
- throw new IllegalArgumentException("Unknown renderer type");
- }
- }
-
- /**
- * Set the Renderer to use.
- * @param renderer the renderer instance to use (Note: Logger must be set at
this point)
- */
- public void setRenderer(Renderer renderer) {
- renderer.setUserAgent(getUserAgent());
- this.renderer = renderer;
- }
-
- /**
- * Returns the currently active renderer.
- * @return the renderer
- */
- public Renderer getRenderer() {
- return renderer;
- }
-
- /**
- * Sets the renderer.
- * @param rendererClassName the fully qualified classname of the renderer
- * class to use.
- * @param version version number
- * @deprecated use renderer.setProducer(version) + setRenderer(renderer) or
- * just setRenderer(rendererType) which will use the default producer string.
- * @see #setRenderer(int)
- * @see #setRenderer(Renderer)
- */
- public void setRenderer(String rendererClassName, String version) {
- setRenderer(rendererClassName);
- }
-
- /**
- * Set the class name of the Renderer to use as well as the
- * producer string for those renderers that can make use of it.
- * @param rendererClassName classname of the renderer to use such as
- * "org.apache.fop.render.pdf.PDFRenderer"
- * @exception IllegalArgumentException if the classname was invalid.
- * @see #setRenderer(int)
- */
- public void setRenderer(String rendererClassName)
- throws IllegalArgumentException {
+ parserThread.join();
+ } catch (InterruptedException e) {}
+ //System.out.println("Joined to parser.");
try {
- renderer =
- (Renderer)Class.forName(rendererClassName).newInstance();
- if (renderer instanceof LogEnabled) {
- ((LogEnabled)renderer).enableLogging(getLogger());
- }
- renderer.setProducer(Version.getVersion());
- renderer.setUserAgent(getUserAgent());
- } catch (ClassNotFoundException e) {
- throw new IllegalArgumentException("Could not find "
- + rendererClassName);
- } catch (InstantiationException e) {
- throw new IllegalArgumentException("Could not instantiate "
- + rendererClassName);
- } catch (IllegalAccessException e) {
- throw new IllegalArgumentException("Could not access "
- + rendererClassName);
- } catch (ClassCastException e) {
- throw new IllegalArgumentException(rendererClassName
- + " is not a renderer");
- }
- }
+ foThread.join();
+ } catch (InterruptedException e) {}
- /**
- * Add the given element mapping.
- * An element mapping maps element names to Java classes.
- *
- * @param mapping the element mappingto add
- */
- public void addElementMapping(ElementMapping mapping) {
- treeBuilder.addElementMapping(mapping);
- }
-
- /**
- * Add the element mapping with the given class name.
- * @param mappingClassName the class name representing the element mapping.
- */
- public void addElementMapping(String mappingClassName) {
- treeBuilder.addElementMapping(mappingClassName);
}
- /**
- * Returns the tree builder (a SAX ContentHandler).
- *
- * Used in situations where SAX is used but not via a FOP-invoked
- * SAX parser. A good example is an XSLT engine that fires SAX
- * events but isn't a SAX Parser itself.
- * @return a content handler for handling the SAX events.
- */
- public ContentHandler getContentHandler() {
- if (!isInitialized()) {
- initialize();
- }
- validateOutputStream();
+ public static final String getParserClassName() {
+ String parserClassName = null;
+ try {
+ parserClassName = System.getProperty("org.xml.sax.parser");
+ } catch (SecurityException se) {}
- // TODO: - do this stuff in a better way
- // PIJ: I guess the structure handler should be created by the renderer.
- if (rendererType == RENDER_MIF) {
- structHandler = new MIFHandler(stream);
- } else if (rendererType == RENDER_RTF) {
- structHandler = new RTFHandler(stream);
- } else {
- if (renderer == null) {
- throw new IllegalStateException(
- "Renderer not set when using standard structHandler");
- }
- structHandler = new LayoutHandler(stream, renderer, true);
+ if (parserClassName == null) {
+ parserClassName = "org.apache.xerces.parsers.SAXParser";
}
-
- structHandler.enableLogging(getLogger());
-
- treeBuilder.setUserAgent(getUserAgent());
- treeBuilder.setStructHandler(structHandler);
-
- return treeBuilder;
+ return parserClassName;
}
- /**
- * Render the FO document read by a SAX Parser from an InputSource.
- * @param parser the SAX parser.
- * @param source the input source the parser reads from.
- * @throws FOPException if anything goes wrong.
- */
- public synchronized void render(XMLReader parser, InputSource source)
- throws FOPException {
- if (!isInitialized()) {
- initialize();
- }
- parser.setContentHandler(getContentHandler());
- try {
- parser.parse(source);
- } catch (SAXException e) {
- if (e.getException() instanceof FOPException) {
- // Undo exception tunneling.
- throw (FOPException)e.getException();
- } else {
- throw new FOPException(e);
- }
- } catch (IOException e) {
- throw new FOPException(e);
- }
+ public void setInputHandler(InputHandler inputHandler) {
+ this.inputHandler = inputHandler;
}
- /**
- * Render the FO ducument represented by a DOM Document.
- * @param document the DOM document to read from
- * @throws FOPException if anything goes wrong.
- */
- public synchronized void render(Document document)
- throws FOPException {
- if (!isInitialized()) {
- initialize();
- }
+ // setting the parser features
+ public void setParserFeatures(XMLReader parser) throws FOPException {
try {
- DocumentInputSource source = new DocumentInputSource(document);
- DocumentReader reader = new DocumentReader();
- reader.setContentHandler(getContentHandler());
- reader.parse(source);
+ parser.setFeature("http://xml.org/sax/features/namespace-prefixes",
+ true);
} catch (SAXException e) {
- if (e.getException() instanceof FOPException) {
- // Undo exception tunneling.
- throw (FOPException)e.getException();
- } else {
- throw new FOPException(e);
- }
- } catch (IOException e) {
- throw new FOPException(e);
+ throw new FOPException(
+ "Error in setting up parser feature namespace-prefixes\n"
+ + "You need a parser which supports SAX version 2", e);
}
-
}
/**
- * Runs the formatting and renderering process using the previously set
- * parser, input source, renderer and output stream.
- * If the renderer was not set, default to PDF.
- * If no parser was set, and the input source is not a dom document,
- * get a default SAX parser.
- * @throws IOException in case of IO errors.
- * @throws FOPException if anything else goes wrong.
+ * Dumps an error
*/
- public synchronized void run() throws IOException, FOPException {
- if (!isInitialized()) {
- initialize();
- }
- if (renderer == null) {
- setRenderer(RENDER_PDF);
- }
-
- if (source == null) {
- throw new FOPException("InputSource is not set.");
- }
-
- if (reader == null) {
- if (!(source instanceof DocumentInputSource)) {
- try {
- SAXParserFactory spf =
javax.xml.parsers.SAXParserFactory.newInstance();
- spf.setNamespaceAware(true);
- reader = spf.newSAXParser().getXMLReader();
- } catch (SAXException e) {
- throw new FOPException(e);
- } catch (ParserConfigurationException e) {
- throw new FOPException(e);
+ public static void dumpError(Exception e) {
+ if (_errorDump) {
+ if (e instanceof SAXException) {
+ e.printStackTrace();
+ if (((SAXException)e).getException() != null) {
+ ((SAXException)e).getException().printStackTrace();
+ }
+ } else if (e instanceof FOPException) {
+ e.printStackTrace();
+ if (((FOPException)e).getException() != null) {
+ ((FOPException)e).getException().printStackTrace();
}
+ } else {
+ e.printStackTrace();
}
- }
-
- if (source instanceof DocumentInputSource) {
- render(((DocumentInputSource)source).getDocument());
- } else {
- render(reader, source);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]