Author: acumiskey
Date: Thu Apr 17 09:30:02 2008
New Revision: 649175

URL: http://svn.apache.org/viewvc?rev=649175&view=rev
Log:
Merged revisions 648985,649012,649091,649119,649146,649149,649160 via svnmerge 
from 
https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk

........
  r648985 | jeremias | 2008-04-17 08:01:19 +0100 (Thu, 17 Apr 2008) | 1 line
  
  HeadURL was missing in the properties.
........
  r649012 | jeremias | 2008-04-17 09:59:48 +0100 (Thu, 17 Apr 2008) | 2 lines
  
  Bugfix: Avoid stopping early when no EmbedFontInfos are found during font 
detection.
  Submitted by: Raphael Parree <rparree.at.gmail.com>
........
  r649091 | jeremias | 2008-04-17 14:33:07 +0100 (Thu, 17 Apr 2008) | 7 lines
  
  Bugzilla #44678:
  Added ability to pass in the PrinterJob instance through the renderer options.
  Submitted by: Antti Karanta <Antti.Karanta.at.napa.fi>
  
  Modifications/Additions to patch:
  - Don't remove the contructor with the PrinterJob parameter, just deprecate 
it.
  - Adjust old-style print example to use renderer options
........
  r649119 | vhennebert | 2008-04-17 15:10:04 +0100 (Thu, 17 Apr 2008) | 2 lines
  
  Fixed minor typo
........
  r649146 | jeremias | 2008-04-17 16:12:23 +0100 (Thu, 17 Apr 2008) | 2 lines
  
  Bugzilla #41687:
  Restored ability to specify from/to and odd/even pages as well as the number 
of copies for printing from the command-line. Note that this is no longer done 
via system properties but through the renderer options. Syntax is slightly 
different. See "fop -print help".
........
  r649149 | jeremias | 2008-04-17 16:14:26 +0100 (Thu, 17 Apr 2008) | 2 lines
  
  Bugzilla #43383:
  Made sure the pages don't appear out of order in AWT preview.
........
  r649160 | jeremias | 2008-04-17 17:01:41 +0100 (Thu, 17 Apr 2008) | 3 lines
  
  Now tunneling all events through a special event listener in tests. This 
serves two purposes:
  - Better readability of the test output.
  - Identification of messages that are not sent through the event subsystem, 
yet.
........

Added:
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/print/PagesMode.java
      - copied unchanged from r649160, 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/print/PagesMode.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/util/ConsoleEventListenerForTests.java
      - copied unchanged from r649160, 
xmlgraphics/fop/trunk/test/java/org/apache/fop/util/ConsoleEventListenerForTests.java
Modified:
    xmlgraphics/fop/branches/Temp_AFPGOCAResources/   (props changed)
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/documentation/content/xdocs/trunk/embedding.xml
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/Version.java
   (contents, props changed)
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/CommandLineOptions.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/Main.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/PrintRendererConfigurator.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/awt/AWTRenderer.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/print/PrintRenderer.java
    xmlgraphics/fop/branches/Temp_AFPGOCAResources/status.xml
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTestSuite.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTester.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeUnitTester.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java

Propchange: xmlgraphics/fop/branches/Temp_AFPGOCAResources/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Thu Apr 17 09:30:02 2008
@@ -1 +1 @@
-/xmlgraphics/fop/trunk:1-648608
+/xmlgraphics/fop/trunk:1-649169

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/examples/embedding/java/embedding/ExampleFO2OldStylePrint.java
 Thu Apr 17 09:30:02 2008
@@ -24,21 +24,18 @@
 import java.io.File;
 import java.io.IOException;
 
-//JAXP
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Source;
-import javax.xml.transform.Result;
-import javax.xml.transform.stream.StreamSource;
 import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.stream.StreamSource;
 
-
-// FOP
+import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
-import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FopFactory;
-import org.apache.fop.render.print.PrintRenderer;
+import org.apache.fop.apps.MimeConstants;
 
 /**
  * This class demonstrates printing an FO file to a PrinterJob instance.
@@ -63,15 +60,10 @@
         try {
             //Set up a custom user agent so we can supply our own renderer 
instance
             FOUserAgent userAgent = fopFactory.newFOUserAgent();
+            userAgent.getRendererOptions().put("printerjob", printerJob);
 
-            //Set up our own PrintRenderer instance so we can supply a special 
PrinterJob instance.
-            PrintRenderer renderer = new PrintRenderer(printerJob);
-            renderer.setUserAgent(userAgent);
-            
-            userAgent.setRendererOverride(renderer);
-            
-            // Construct fop with desired output format (here, it is set 
through the user agent)
-            Fop fop = fopFactory.newFop(userAgent);
+            // Construct FOP with desired output format
+            Fop fop = fopFactory.newFop(MimeConstants.MIME_FOP_PRINT, 
userAgent);
 
             // Setup JAXP using identity transformer
             TransformerFactory factory = TransformerFactory.newInstance();

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/documentation/content/xdocs/trunk/embedding.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/documentation/content/xdocs/trunk/embedding.xml?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/documentation/content/xdocs/trunk/embedding.xml
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/documentation/content/xdocs/trunk/embedding.xml
 Thu Apr 17 09:30:02 2008
@@ -183,7 +183,7 @@
         how to configure alternative backends.
       </p>
       <p>
-        As a result of the above we differentiate between to kinds of 
"logging":
+        As a result of the above we differentiate between two kinds of 
"logging":
       </p>
       <ul>
         <li>(FOP-)Developer-oriented logging</li>

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/Version.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/Version.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/Version.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/Version.java
 Thu Apr 17 09:30:02 2008
@@ -41,7 +41,7 @@
         if (version == null) {
             //Fallback if FOP is used in a development environment
             String headURL 
-                = "$HeadURL: 
http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/src/java/org/apache/fop/Version.java
 $";
+                = "$HeadURL$";
             version = headURL;
             final String pathPrefix = "/xmlgraphics/fop/";
             int pos = version.indexOf(pathPrefix); 

Propchange: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/Version.java
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Thu Apr 17 09:30:02 2008
@@ -1 +1 @@
-Id
+Id HeadURL

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/CommandLineOptions.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/CommandLineOptions.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/CommandLineOptions.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/CommandLineOptions.java
 Thu Apr 17 09:30:02 2008
@@ -46,6 +46,8 @@
 import org.apache.fop.render.Renderer;
 import org.apache.fop.render.awt.AWTRenderer;
 import org.apache.fop.render.pdf.PDFRenderer;
+import org.apache.fop.render.print.PagesMode;
+import org.apache.fop.render.print.PrintRenderer;
 import org.apache.fop.render.xml.XMLRenderer;
 import org.apache.fop.util.CommandLineLogger;
 
@@ -133,8 +135,9 @@
      * @throws FOPException for general errors
      * @throws FileNotFoundException if an input file wasn't found
      * @throws IOException if the the configuration file could not be loaded
+     * @return true if the processing can continue, false to abort
      */
-    public void parse(String[] args)
+    public boolean parse(String[] args)
             throws FOPException, IOException {
         boolean optionsParsed = true;
 
@@ -155,6 +158,8 @@
                 }
                 addXSLTParameter("fop-output-format", getOutputFormat());
                 addXSLTParameter("fop-version", Version.getVersion());
+            } else {
+                return false;
             }
         } catch (FOPException e) {
             printUsage();
@@ -193,6 +198,7 @@
             //Make sure the prepared XMLRenderer is used
             foUserAgent.setRendererOverride(xmlRenderer);
         }
+        return true;
     }
 
     /**
@@ -268,7 +274,6 @@
             } else if (args[i].equals("-png")) {
                 i = i + parsePNGOutputOption(args, i);
             } else if (args[i].equals("-print")) {
-                i = i + parsePrintOutputOption(args, i);
                 // show print help
                 if (i + 1 < args.length) {
                     if (args[i + 1].equals("help")) {
@@ -276,6 +281,9 @@
                         return false;
                     }
                 }
+                i = i + parsePrintOutputOption(args, i);
+            } else if (args[i].equals("-copies")) {
+                i = i + parseCopiesOption(args, i);
             } else if (args[i].equals("-pcl")) {
                 i = i + parsePCLOutputOption(args, i);
             } else if (args[i].equals("-ps")) {
@@ -302,7 +310,7 @@
                       String expression = args[++i];
                       addXSLTParameter(name, expression);
                   } else {
-                    throw new FOPException("invalid param usage: use -param 
<name> <value>");
+                      throw new FOPException("invalid param usage: use -param 
<name> <value>");
                   }
             } else if (args[i].equals("-o")) {
                 i = i + parsePDFOwnerPassword(args, i);
@@ -461,7 +469,37 @@
 
     private int parsePrintOutputOption(String[] args, int i) throws 
FOPException {
         setOutputMode(MimeConstants.MIME_FOP_PRINT);
-        return 0;
+        if ((i + 1 <= args.length)
+                && (args[i + 1].charAt(0) != '-')) {
+            String arg = args[i + 1];
+            String[] parts = arg.split(",");
+            for (int j = 0; j < parts.length; j++) {
+                String s = parts[j];
+                if (s.matches("\\d+")) {
+                    renderingOptions.put(PrintRenderer.START_PAGE, new 
Integer(s));
+                } else if (s.matches("\\d+-\\d+")) {
+                    String[] startend = s.split("-");
+                    renderingOptions.put(PrintRenderer.START_PAGE, new 
Integer(startend[0]));
+                    renderingOptions.put(PrintRenderer.END_PAGE, new 
Integer(startend[1]));
+                } else {
+                    PagesMode mode = PagesMode.byName(s);
+                    renderingOptions.put(PrintRenderer.PAGES_MODE, mode);
+                }
+            }
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    private int parseCopiesOption(String[] args, int i) throws FOPException {
+        if ((i + 1 == args.length)
+                || (args[i + 1].charAt(0) == '-')) {
+            throw new FOPException("you must specify the number of copies");
+        } else {
+            renderingOptions.put(PrintRenderer.COPIES, new Integer(args[i + 
1]));
+            return 1;
+        }
     }
 
     private int parsePCLOutputOption(String[] args, int i) throws FOPException 
{
@@ -991,18 +1029,21 @@
             + "  Fop -xml foo.xml -xsl foo.xsl -foout foo.fo\n"
             + "  Fop foo.fo -mif foo.mif\n"
             + "  Fop foo.fo -rtf foo.rtf\n"
-            + "  Fop foo.fo -print or Fop -print foo.fo \n"
-            + "  Fop foo.fo -awt \n");
+            + "  Fop foo.fo -print\n"
+            + "  Fop foo.fo -awt\n");
     }
 
     /**
      * shows the options for print output
      */
     private void printUsagePrintOutput() {
-        System.err.println("USAGE: -print [-Dstart=i] [-Dend=i] [-Dcopies=i] 
[-Deven=true|false] "
-                           + " org.apache.fop.apps.Fop (..) -print \n"
-                           + "Example:\n"
-                           + "java -Dstart=1 -Dend=2 org.apache.Fop.apps.Fop 
infile.fo -print ");
+        System.err.println("USAGE: -print [from[-to][,even|odd]] [-copies 
numCopies]\n\n"
+           + "Example:\n"
+           + "all pages:                        Fop infile.fo -print\n"
+           + "all pages with two copies:        Fop infile.fo -print -copies 
2\n"
+           + "all pages starting with page 7:   Fop infile.fo -print 7\n"
+           + "pages 2 to 3:                     Fop infile.fo -print 2-3\n"
+           + "only even page between 10 and 20: Fop infile.fo -print 
10-20,even\n");
     }
 
     /**

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/Main.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/Main.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/Main.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/cli/Main.java
 Thu Apr 17 09:30:02 2008
@@ -28,6 +28,7 @@
 import java.util.List;
 
 import org.apache.commons.io.IOUtils;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
 
@@ -151,7 +152,9 @@
 
         try {
             options = new CommandLineOptions();
-            options.parse(args);
+            if (!options.parse(args)) {
+                System.exit(1);
+            }
             
             foUserAgent = options.getFOUserAgent();
             String outputFormat = options.getOutputFormat();

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/PrintRendererConfigurator.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/PrintRendererConfigurator.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/PrintRendererConfigurator.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/PrintRendererConfigurator.java
 Thu Apr 17 09:30:02 2008
@@ -236,7 +236,7 @@
             EmbedFontInfo[] embedFontInfos = finder.find(fontUrl, resolver, 
fontCache);
 
             if (embedFontInfos == null) {
-                return;
+                continue;
             }
 
             for (int i = 0, c = embedFontInfos.length; i < c; i++) {

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/awt/AWTRenderer.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/awt/AWTRenderer.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/awt/AWTRenderer.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/awt/AWTRenderer.java
 Thu Apr 17 09:30:02 2008
@@ -43,8 +43,8 @@
 import org.apache.fop.area.Area;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.render.awt.viewer.PreviewDialog;
-import org.apache.fop.render.awt.viewer.StatusListener;
 import org.apache.fop.render.awt.viewer.Renderable;
+import org.apache.fop.render.awt.viewer.StatusListener;
 import org.apache.fop.render.java2d.Java2DRenderer;
 
 /**
@@ -202,7 +202,7 @@
 
     /** [EMAIL PROTECTED] */
     public boolean supportsOutOfOrder() {
-        return true; // TODO true?
+        return false;
     }
 
     /** [EMAIL PROTECTED] */

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/java2d/Java2DRenderer.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
 Thu Apr 17 09:30:02 2008
@@ -121,9 +121,6 @@
     /** The 0-based current page number */
     private int currentPageNumber = 0;
 
-    /** The 0-based total number of rendered pages */
-    private int numberOfPages;
-
     /** true if antialiasing is set */
     protected boolean antialiasing = true;
 
@@ -208,7 +205,7 @@
     public void stopRenderer() throws IOException {
         log.debug("Java2DRenderer stopped");
         renderingDone = true;
-        numberOfPages = currentPageNumber;
+        int numberOfPages = currentPageNumber;
         // TODO set all vars to null for gc
         if (numberOfPages == 0) {
             new FOPException("No page could be rendered");
@@ -238,7 +235,7 @@
      * @return The 0-based total number of rendered pages
      */
     public int getNumberOfPages() {
-            return numberOfPages;
+        return pageViewportList.size();
     }
 
     /**

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/print/PrintRenderer.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/print/PrintRenderer.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/print/PrintRenderer.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/print/PrintRenderer.java
 Thu Apr 17 09:30:02 2008
@@ -27,9 +27,11 @@
 import java.awt.print.PrinterException;
 import java.awt.print.PrinterJob;
 import java.io.IOException;
+import java.util.Map;
 import java.util.Vector;
 
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.render.java2d.Java2DRenderer;
 
 /**
@@ -40,59 +42,155 @@
  */
 public class PrintRenderer extends Java2DRenderer implements Pageable {
 
-    private static final int EVEN_AND_ALL = 0;
-
-    private static final int EVEN = 1;
+    /**
+     * Printing parameter: the preconfigured PrinterJob to use,
+     * datatype: java.awt.print.PrinterJob
+     */
+    public static final String PRINTER_JOB = "printerjob";
+  
+    /**
+     * Printing parameter: the pages to be printed (all, even or odd),
+     * datatype: the strings "all", "even" or "odd" or one of PagesMode.*
+     */
+    public static final String PAGES_MODE = "even-odd";
 
-    private static final int ODD = 2;
+    /**
+     * Printing parameter: the page number (1-based) of the first page to be 
printed,
+     * datatype: a positive Integer
+     */
+    public static final String START_PAGE = "start-page";
 
+    /**
+     * Printing parameter: the page number (1-based) of the last page to be 
printed,
+     * datatype: a positive Integer
+     */
+    public static final String END_PAGE = "end-page";
+    
+    /**
+     * Printing parameter: the number of copies of the document to be printed,
+     * datatype: a positive Integer
+     */
+    public static final String COPIES = "copies";
+    
+    
     private int startNumber = 0;
-
     private int endNumber = -1;
 
-    private int mode = EVEN_AND_ALL;
+    private PagesMode mode = PagesMode.ALL;
 
     private int copies = 1;
 
     private PrinterJob printerJob;
 
     /**
-     * Creates a new PrintRenderer with the options set from system properties.
+     * Creates a new PrintRenderer with the options set from system properties 
if a custom
+     * PrinterJob is not given in FOUserAgent's renderer options.
      */
     public PrintRenderer() {
-        initializePrinterJob();
+        setupFromSystemProperties();
     }
-
+    
     /**
      * Creates a new PrintRenderer and allows you to pass in a specific 
PrinterJob instance
      * that this renderer should work with.
      * @param printerJob the PrinterJob instance
+     * @deprecated Please use the rendering options on the user agent to pass 
in the PrinterJob!
      */
     public PrintRenderer(PrinterJob printerJob) {
+        this();
         this.printerJob = printerJob;
         printerJob.setPageable(this);
     }
     
-    private void initializePrinterJob() throws IllegalArgumentException {
+    private void initializePrinterJob() {
+        if (this.printerJob == null) {
+            printerJob = PrinterJob.getPrinterJob();
+            printerJob.setJobName("FOP Document");
+            printerJob.setCopies(copies);
+            if (System.getProperty("dialog") != null) {
+                if (!printerJob.printDialog()) {
+                    throw new RuntimeException(
+                            "Printing cancelled by operator");
+                }
+            }
+            printerJob.setPageable(this);
+        }
+    }
+
+    private void setupFromSystemProperties() {
+        //TODO Remove me! This is not a beautiful way to do this.
         // read from command-line options
         copies = getIntProperty("copies", 1);
-        startNumber = getIntProperty("start", 1) - 1;
+        startNumber = getIntProperty("start", 1);
         endNumber = getIntProperty("end", -1);
         String str = System.getProperty("even");
         if (str != null) {
-            mode = Boolean.valueOf(str).booleanValue() ? EVEN : ODD;
+            mode = Boolean.valueOf(str).booleanValue() ? PagesMode.EVEN : 
PagesMode.ODD;
+        }
+    }
+    
+    /** [EMAIL PROTECTED] */
+    public void setUserAgent(FOUserAgent agent) {
+        super.setUserAgent(agent);
+        
+        Map rendererOptions = agent.getRendererOptions();
+        
+        Object printerJobO = rendererOptions.get(PrintRenderer.PRINTER_JOB);
+        if (printerJobO != null) {
+            if (!(printerJobO instanceof PrinterJob)) {
+                throw new IllegalArgumentException(
+                    "Renderer option " + PrintRenderer.PRINTER_JOB
+                    + " must be an instance of java.awt.print.PrinterJob, but 
an instance of "
+                    + printerJobO.getClass().getName() + " was given.");
+            }
+            printerJob = (PrinterJob)printerJobO;
+            printerJob.setPageable(this);
+        }
+        Object o = rendererOptions.get(PrintRenderer.PAGES_MODE);
+        if (o != null) {
+            if (o instanceof PagesMode) {
+                this.mode = (PagesMode)o;
+            } else if (o instanceof String) {
+                this.mode = PagesMode.byName((String)o);
+            } else {
+                throw new IllegalArgumentException(
+                        "Renderer option " + PrintRenderer.PAGES_MODE
+                        + " must be an 'all', 'even', 'odd' or a PagesMode 
instance.");
+            }
         }
+        
+        o = rendererOptions.get(PrintRenderer.START_PAGE);
+        if (o != null) {
+            this.startNumber = getPositiveInteger(o);
+        }
+        o = rendererOptions.get(PrintRenderer.END_PAGE);
+        if (o != null) {
+            this.endNumber = getPositiveInteger(o);
+        }
+        if (this.endNumber >= 0 && this.endNumber < this.endNumber) {
+            this.endNumber = this.startNumber;
+        }
+        o = rendererOptions.get(PrintRenderer.COPIES);
+        if (o != null) {
+            this.copies = getPositiveInteger(o);
+        }
+        initializePrinterJob();
+    }
 
-        printerJob = PrinterJob.getPrinterJob();
-        printerJob.setJobName("FOP Document");
-        printerJob.setCopies(copies);
-        if (System.getProperty("dialog") != null) {
-            if (!printerJob.printDialog()) {
+    private int getPositiveInteger(Object o) {
+        if (o instanceof Integer) {
+            Integer i = (Integer)o;
+            if (i.intValue() < 1) {
                 throw new IllegalArgumentException(
-                        "Printing cancelled by operator");
+                        "Value must be a positive Integer");
             }
+            return i.intValue();
+        } else if (o instanceof String) {
+            return Integer.parseInt((String)o);
+        } else {
+            throw new IllegalArgumentException(
+                    "Value must be a positive integer");
         }
-        printerJob.setPageable(this);
     }
     
     /** @return the PrinterJob instance that this renderer prints to */
@@ -126,6 +224,7 @@
         this.startNumber = start;
     }
     
+    /** [EMAIL PROTECTED] */
     public void stopRenderer() throws IOException {
         super.stopRenderer();
 
@@ -136,7 +235,8 @@
 
         Vector numbers = getInvalidPageNumbers();
         for (int i = numbers.size() - 1; i > -1; i--) {
-            // removePage(Integer.parseInt((String)numbers.elementAt(i)));
+            int page = ((Integer)numbers.elementAt(i)).intValue();
+            pageViewportList.remove(page - 1);
         }
 
         try {
@@ -149,7 +249,7 @@
         clearViewportList();
     }
 
-    public static int getIntProperty(String name, int def) {
+    private static int getIntProperty(String name, int def) {
         String propValue = System.getProperty(name);
         if (propValue != null) {
             try {
@@ -166,20 +266,20 @@
         Vector vec = new Vector();
         int max = getNumberOfPages();
         boolean isValid;
-        for (int i = 0; i < max; i++) {
+        for (int i = 1; i <= max; i++) {
             isValid = true;
             if (i < startNumber || i > endNumber) {
                 isValid = false;
-            } else if (mode != EVEN_AND_ALL) {
-                if (mode == EVEN && ((i + 1) % 2 != 0)) {
+            } else if (mode != PagesMode.ALL) {
+                if (mode == PagesMode.EVEN && (i % 2 != 0)) {
                     isValid = false;
-                } else if (mode == ODD && ((i + 1) % 2 != 1)) {
+                } else if (mode == PagesMode.ODD && (i % 2 == 0)) {
                     isValid = false;
                 }
             }
 
             if (!isValid) {
-                vec.add(Integer.toString(i));
+                vec.add(new Integer(i));
             }
         }
         return vec;
@@ -219,6 +319,7 @@
         }
     }
 
+    /** [EMAIL PROTECTED] */
     public Printable getPrintable(int pageIndex)
             throws IndexOutOfBoundsException {
         return this;

Modified: xmlgraphics/fop/branches/Temp_AFPGOCAResources/status.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/status.xml?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_AFPGOCAResources/status.xml (original)
+++ xmlgraphics/fop/branches/Temp_AFPGOCAResources/status.xml Thu Apr 17 
09:30:02 2008
@@ -59,6 +59,14 @@
       <action context="Renderers" dev="AC" importance="high" type="add">
         Added de-duplication and externalization support for IOCA and GOCA 
data resource objects.
       </action>
+      <action context="Renderers" dev="JM" type="add" fixes-bug="41687">
+        Restored ability to specify from/to and odd/even pages as well as the 
number of copies
+        for printing from the command-line.
+      </action>
+      <action context="Renderers" dev="JM" type="add" fixes-bug="44678" 
due-to="Antti Karanta">
+        Added ability to pass a preconfigured PrinterJob instance to the 
PrintRenderer via
+        the rendering options map.
+      </action>
       <action context="Renderers" dev="JM" type="add" fixes-bug="44743" 
due-to="Yegor Kozlov">
         Added a public accessor for reference to the current page to 
PDFGraphics2D.
       </action>

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTestSuite.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTestSuite.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTestSuite.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTestSuite.java
 Thu Apr 17 09:30:02 2008
@@ -35,6 +35,7 @@
 import org.apache.commons.io.filefilter.PrefixFileFilter;
 import org.apache.commons.io.filefilter.SuffixFileFilter;
 import org.apache.commons.io.filefilter.TrueFileFilter;
+
 import org.apache.fop.DebugHelper;
 import org.apache.fop.fo.flow.table.CollapsedConditionalBorderTestCase;
 import org.apache.fop.fo.flow.table.IllegalRowSpanTestCase;
@@ -104,9 +105,14 @@
                 final FOTreeTester tester, final File f) {
         suite.addTest(new FOTreeTestCase(f.getName()) {
             public void runTest() throws Exception {
-                
org.apache.commons.logging.LogFactory.getLog(this.getClass()).info("Starting " 
+ f.getName());
-                prepare(tester, f);
-                testMain();
+                try {
+                    prepare(tester, f);
+                    testMain();
+                } catch (Exception e) {
+                    
org.apache.commons.logging.LogFactory.getLog(this.getClass()).info(
+                            "Error on " + f.getName());
+                    throw e;
+                }
             }
         });
     }

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTester.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTester.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTester.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeTester.java
 Thu Apr 17 09:30:02 2008
@@ -25,14 +25,15 @@
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLFilterImpl;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
-
 import org.apache.fop.fotreetest.ext.TestElementMapping;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLFilterImpl;
+import org.apache.fop.util.ConsoleEventListenerForTests;
 
 /**
  * Test driver class for FO tree tests.
@@ -66,6 +67,8 @@
         FOUserAgent ua = fopFactory.newFOUserAgent();
         ua.setBaseURL(testFile.getParentFile().toURL().toString());
         ua.setFOEventHandlerOverride(new DummyFOEventHandler(ua));
+        ua.getEventBroadcaster().addEventListener(
+                new ConsoleEventListenerForTests(testFile.getName()));
 
         //Used to set values in the user agent through processing instructions
         reader = new PIListener(reader, ua);

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeUnitTester.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeUnitTester.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeUnitTester.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/fotreetest/FOTreeUnitTester.java
 Thu Apr 17 09:30:02 2008
@@ -26,11 +26,13 @@
 
 import junit.framework.TestCase;
 
+import org.xml.sax.XMLReader;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.fo.FOEventHandler;
-import org.xml.sax.XMLReader;
+import org.apache.fop.util.ConsoleEventListenerForTests;
 
 
 /**
@@ -82,6 +84,8 @@
     public void setUp(String filename, FOEventHandlerFactory factory) throws 
Exception {
         FOUserAgent ua = fopFactory.newFOUserAgent();
         ua.setFOEventHandlerOverride(factory.createFOEventHandler(ua));
+        ua.getEventBroadcaster().addEventListener(
+                new ConsoleEventListenerForTests(filename));
 
         Fop fop = fopFactory.newFop(ua);
 

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/AreaTreeParserTestCase.java
 Thu Apr 17 09:30:02 2008
@@ -50,6 +50,7 @@
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.render.Renderer;
 import org.apache.fop.render.xml.XMLRenderer;
+import org.apache.fop.util.ConsoleEventListenerForTests;
 
 //XML Unit 1.0: See http://xmlunit.sourceforge.net (BSD-style License)
 import org.custommonkey.xmlunit.XMLTestCase;
@@ -170,6 +171,8 @@
         FOUserAgent userAgent = fopFactory.newFOUserAgent();
         try {
             userAgent.setBaseURL(testDir.toURL().toExternalForm());
+            userAgent.getEventBroadcaster().addEventListener(
+                    new ConsoleEventListenerForTests(testFile.getName()));
         } catch (MalformedURLException e) {
             //ignore, won't happen
         }

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/intermediate/IntermediateFormatTestSuite.java
 Thu Apr 17 09:30:02 2008
@@ -56,10 +56,14 @@
             final File f) {
         suite.addTest(new AreaTreeParserTestCase(f) {
             public void runTest() throws Exception {
-                org.apache.commons.logging.LogFactory.getLog(
-                        this.getClass()).info("Starting " + f.getName());
-                testParserToAT();
-                testParserToPDF();
+                try {
+                    testParserToAT();
+                    testParserToPDF();
+                } catch (Exception e) {
+                    org.apache.commons.logging.LogFactory.getLog(
+                            this.getClass()).error("Error on " + f.getName());
+                    throw e;
+                }
             }
         });
     }

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTestSuite.java
 Thu Apr 17 09:30:02 2008
@@ -34,6 +34,14 @@
 import javax.xml.transform.sax.SAXResult;
 import javax.xml.transform.stream.StreamSource;
 
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.filefilter.AndFileFilter;
 import org.apache.commons.io.filefilter.IOFileFilter;
@@ -42,15 +50,8 @@
 import org.apache.commons.io.filefilter.PrefixFileFilter;
 import org.apache.commons.io.filefilter.SuffixFileFilter;
 import org.apache.commons.io.filefilter.TrueFileFilter;
-import org.apache.fop.DebugHelper;
 
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.apache.fop.DebugHelper;
 
 /**
  * JUnit test suit for running layout engine test under JUnit control.
@@ -187,10 +188,14 @@
                 final LayoutEngineTester tester, final File f) {
         suite.addTest(new LayoutEngineTestCase(f.getName()) {
             public void runTest() throws Exception {
-                org.apache.commons.logging.LogFactory.getLog(
-                        this.getClass()).info("Starting " + f.getName());
-                prepare(tester, f);
-                testMain();
+                try {
+                    prepare(tester, f);
+                    testMain();
+                } catch (Exception e) {
+                    org.apache.commons.logging.LogFactory.getLog(
+                            this.getClass()).error("Error on " + f.getName());
+                    throw e;
+                }
             }
         });
     }

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java?rev=649175&r1=649174&r2=649175&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/test/java/org/apache/fop/layoutengine/LayoutEngineTester.java
 Thu Apr 17 09:30:02 2008
@@ -43,19 +43,23 @@
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.xml.sax.SAXException;
+
+import org.apache.xpath.XPathAPI;
+import org.apache.xpath.objects.XObject;
+
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.apps.FormattingResults;
 import org.apache.fop.layoutmgr.ElementListObserver;
 import org.apache.fop.render.xml.XMLRenderer;
-import org.apache.xpath.XPathAPI;
-import org.apache.xpath.objects.XObject;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
+import org.apache.fop.util.ConsoleEventListenerForTests;
 
 /**
  * Class for testing the FOP's layout engine using testcases specified in XML
@@ -154,6 +158,9 @@
             //Setup FOP for area tree rendering
             FOUserAgent ua = effFactory.newFOUserAgent();
             ua.setBaseURL(testFile.getParentFile().toURL().toString());
+            ua.getEventBroadcaster().addEventListener(
+                    new ConsoleEventListenerForTests(testFile.getName()));
+            
             XMLRenderer atrenderer = new XMLRenderer();
             atrenderer.setUserAgent(ua);
             atrenderer.setContentHandler(athandler);



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to