gmazza      2004/12/05 21:37:17

  Modified:    .        fop.bat
               src/java/org/apache/fop/area AreaTreeHandler.java
                        CachedRenderPagesModel.java Page.java
                        PageViewport.java RenderPagesModel.java
                        StorePagesModel.java
  Log:
  Removed pretend "resolution" of still-unresolved idrefs at ATH.endDocument(). 
 This was apparently done to force page rendering of remaining unresolved pages 
at RenderPagesModel.checkPreparedPages() (which requires a page to be 
completely resolved before rendering).  Replacement code keeps unresolved 
idrefs unresolved, but explicitly forces page rendering for calls to 
checkPreparedPages() that originate from ATH.endDocument().  Comments welcome.
  
  Revision  Changes    Path
  1.21      +1 -1      xml-fop/fop.bat
  
  Index: fop.bat
  ===================================================================
  RCS file: /home/cvs/xml-fop/fop.bat,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- fop.bat   16 Aug 2004 04:11:41 -0000      1.20
  +++ fop.bat   6 Dec 2004 05:37:17 -0000       1.21
  @@ -25,7 +25,7 @@
   rem The default commons logger for JDK1.4 is JDK1.4Logger.
   rem To use a different logger, uncomment the one desired below
   rem set 
LOGCHOICE=-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
  -rem set 
LOGCHOICE=-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
  +set 
LOGCHOICE=-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
   rem set 
LOGCHOICE=-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
   
   set LOGLEVEL=
  
  
  
  1.22      +3 -19     xml-fop/src/java/org/apache/fop/area/AreaTreeHandler.java
  
  Index: AreaTreeHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/area/AreaTreeHandler.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- AreaTreeHandler.java      2 Dec 2004 01:59:40 -0000       1.21
  +++ AreaTreeHandler.java      6 Dec 2004 05:37:17 -0000       1.22
  @@ -31,6 +31,8 @@
   import org.xml.sax.SAXException;
   
   // Apache
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.apps.FOUserAgent;
   import org.apache.fop.fo.FOEventHandler;
  @@ -38,8 +40,6 @@
   import org.apache.fop.fo.extensions.Bookmarks;
   import org.apache.fop.fo.pagination.PageSequence;
   import org.apache.fop.layoutmgr.PageSequenceLayoutManager;
  -import org.apache.commons.logging.Log;
  -import org.apache.commons.logging.LogFactory;
   
   /**
    * Area tree handler for formatting objects.
  @@ -193,22 +193,6 @@
        * @throws SAXException if there is some error
        */
       public void endDocument() throws SAXException {
  -        /* 
  -         * inform Resolveable objects that certain idrefs
  -         * could not be found
  -         * @todo unsure if this block is needed. 
  -         */
  -        for (Iterator iter = unresolvedIDRefs.keySet().iterator(); 
  -                iter.hasNext();) {
  -            String idref = (String) iter.next();
  -            Set list = (Set) unresolvedIDRefs.get(idref);
  -            for (Iterator resIter = list.iterator(); resIter.hasNext();) {
  -                Resolvable res = (Resolvable) resIter.next();
  -                if (!res.isResolved()) {
  -                    res.resolveIDRef(idref, null);
  -                }
  -            }
  -        }
           model.endDocument();
   
           if (outputStatistics) {
  
  
  
  1.6       +11 -10    
xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java
  
  Index: CachedRenderPagesModel.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CachedRenderPagesModel.java       7 Sep 2004 20:47:09 -0000       1.5
  +++ CachedRenderPagesModel.java       6 Dec 2004 05:37:17 -0000       1.6
  @@ -54,19 +54,12 @@
       }
   
       /**
  -     * Check prepared pages
  -     * If a page is resolved it loads the page contents from
  -     * the file.
  -     *
  -     * @param newpage the new page being added
  -     * @return true if the current page should be rendered
  -     *         false if the renderer doesn't support out of order
  -     *         rendering and there are pending pages
  +     * @see 
org.apache.fop.area.RenderPagesModel#checkPreparedPages(PageViewport, boolean)
        */
  -    protected boolean checkPreparedPages(PageViewport newpage) {
  +    protected boolean checkPreparedPages(PageViewport newpage, boolean 
renderUnresolved) {
           for (Iterator iter = prepared.iterator(); iter.hasNext();) {
               PageViewport p = (PageViewport)iter.next();
  -            if (p.isResolved()) {
  +            if (p.isResolved() || renderUnresolved) {
                   if (p != newpage) {
                       try {
                           // load page from cache
  @@ -87,6 +80,14 @@
   
                   try {
                       renderer.renderPage(p);
  +                    if (!p.isResolved()) {
  +                        String[] idrefs = p.getIDs();
  +                        for (int count = 0; count < idrefs.length; count++) {
  +                            log.warn("Page " + p.getPageNumber() + 
  +                                ": Unresolved id reference \"" + 
idrefs[count] 
  +                                + "\" found.");
  +                        }
  +                    }
                   } catch (Exception e) {
                       // use error handler to handle this FOP or IO Exception
                       e.printStackTrace();
  
  
  
  1.8       +6 -6      xml-fop/src/java/org/apache/fop/area/Page.java
  
  Index: Page.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/Page.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Page.java 10 Nov 2004 11:13:33 -0000      1.7
  +++ Page.java 6 Dec 2004 05:37:17 -0000       1.8
  @@ -19,7 +19,7 @@
   package org.apache.fop.area;
   
   import java.io.Serializable;
  -import java.util.Map;
  +import java.util.HashMap;
   
   import org.apache.fop.fo.Constants;
   
  @@ -43,7 +43,7 @@
       private RegionViewport regionAfter = null;
   
       // temporary map of unresolved objects used when serializing the page
  -    private Map unresolved = null;
  +    private HashMap unresolved = null;
   
       /**
        * Set the region on this page.
  @@ -132,9 +132,9 @@
       /**
        * Set the unresolved references on this page for serializing.
        *
  -     * @param unres the map of unresolved objects
  +     * @param unres the HashMap of unresolved objects
        */
  -    public void setUnresolvedReferences(Map unres) {
  +    public void setUnresolvedReferences(HashMap unres) {
           unresolved = unres;
       }
   
  @@ -143,9 +143,9 @@
        * This should be called after deserializing to retrieve
        * the map of unresolved references that were serialized.
        *
  -     * @return the de-serialized map of unresolved objects
  +     * @return the de-serialized HashMap of unresolved objects
        */
  -    public Map getUnresolvedReferences() {
  +    public HashMap getUnresolvedReferences() {
           return unresolved;
       }
   }
  
  
  
  1.9       +17 -16    xml-fop/src/java/org/apache/fop/area/PageViewport.java
  
  Index: PageViewport.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/PageViewport.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- PageViewport.java 4 Dec 2004 06:51:13 -0000       1.8
  +++ PageViewport.java 6 Dec 2004 05:37:17 -0000       1.9
  @@ -50,10 +50,8 @@
       // this keeps a list of currently unresolved areas or extensions
       // once an idref is resolved it is removed
       // when this is empty the page can be rendered
  -    private Map unresolvedIDRefs = new HashMap();
  +    private HashMap unresolvedIDRefs = new HashMap();
       
  -    private Map unresolved = null;
  -
       private Map pendingResolved = null;
   
       // hashmap of markers for this page
  @@ -126,12 +124,14 @@
       }
   
       /**
  -     * Add an unresolved id to this page.
  -     * All unresolved ids for the contents of this page are
  -     * added to this page. This is so that the resolvers can be
  -     * serialized with the page to preserve the proper function.
  -     * @param id the id of the reference
  -     * @param res the resolver of the reference
  +     * Add an idref to this page.
  +     * All idrefs found for child areas of this PageViewport are added
  +     * to unresolvedIDRefs, for subsequent resolution by AreaTreeHandler
  +     * calls to this object's resolveIDRef().
  +     *
  +     * @param id the idref
  +     * @param res the child element of this page that needs this
  +     *      idref resolved
        */
       public void addUnresolvedIDRef(String idref, Resolvable res) {
           if (unresolvedIDRefs == null) {
  @@ -154,11 +154,12 @@
       }
   
       /**
  -     * Get the id references for this page.
  -     * @return always null
  +     * Get the unresolved idrefs for this page.
  +     * @return String array of idref's that still have not been resolved
        */
       public String[] getIDs() {
  -        return null;
  +        return (unresolvedIDRefs == null) ? null :
  +            (String[]) unresolvedIDRefs.keySet().toArray(new String[] {});
       }
   
       /**
  @@ -181,7 +182,7 @@
                   }
               }
           }
  -        if (unresolvedIDRefs != null) {
  +        if (unresolvedIDRefs != null && pages != null) {
               unresolvedIDRefs.remove(id);
               if (unresolvedIDRefs.isEmpty()) {
                   unresolvedIDRefs = null;
  @@ -315,7 +316,7 @@
        */
       public void savePage(ObjectOutputStream out) throws Exception {
           // set the unresolved references so they are serialized
  -        page.setUnresolvedReferences(unresolved);
  +        page.setUnresolvedReferences(unresolvedIDRefs);
           out.writeObject(page);
           page = null;
       }
  @@ -330,8 +331,8 @@
        */
       public void loadPage(ObjectInputStream in) throws Exception {
           page = (Page) in.readObject();
  -        unresolved = page.getUnresolvedReferences();
  -        if (unresolved != null && pendingResolved != null) {
  +        unresolvedIDRefs = page.getUnresolvedReferences();
  +        if (unresolvedIDRefs != null && pendingResolved != null) {
               for (Iterator iter = pendingResolved.keySet().iterator();
                            iter.hasNext();) {
                   String id = (String) iter.next();
  
  
  
  1.10      +15 -4     
xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java
  
  Index: RenderPagesModel.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- RenderPagesModel.java     28 Oct 2004 00:06:46 -0000      1.9
  +++ RenderPagesModel.java     6 Dec 2004 05:37:17 -0000       1.10
  @@ -123,7 +123,7 @@
   
   
           // check prepared pages
  -        boolean cont = checkPreparedPages(page);
  +        boolean cont = checkPreparedPages(page, false);
   
           if (cont) {
               processOffDocumentItems(pendingODI);
  @@ -135,16 +135,27 @@
        * Check prepared pages
        *
        * @param newpage the new page being added
  +     * @param renderUnresolved render pages with unresolved idref's
  +     *          (done at end-of-document processing)
        * @return true if the current page should be rendered
        *         false if the renderer doesn't support out of order
        *         rendering and there are pending pages
        */
  -    protected boolean checkPreparedPages(PageViewport newpage) {
  +    protected boolean checkPreparedPages(PageViewport newpage, boolean
  +        renderUnresolved) {
           for (Iterator iter = prepared.iterator(); iter.hasNext();) {
               PageViewport p = (PageViewport)iter.next();
  -            if (p.isResolved()) {
  +            if (p.isResolved() || renderUnresolved) {
                   try {
                       renderer.renderPage(p);
  +                    if (!p.isResolved()) {
  +                        String[] idrefs = p.getIDs();
  +                        for (int count = 0; count < idrefs.length; count++) {
  +                            log.warn("Page " + p.getPageNumber() + 
  +                                ": Unresolved id reference \"" + 
idrefs[count] 
  +                                + "\" found.");
  +                        }
  +                    }
                   } catch (Exception e) {
                       // use error handler to handle this FOP or IO Exception
                       e.printStackTrace();
  @@ -204,7 +215,7 @@
        */
       public void endDocument() throws SAXException {
           // render any pages that had unresolved ids
  -        checkPreparedPages(null);
  +        checkPreparedPages(null, true);
   
           processOffDocumentItems(pendingODI);
           pendingODI.clear();
  
  
  
  1.13      +5 -0      xml-fop/src/java/org/apache/fop/area/StorePagesModel.java
  
  Index: StorePagesModel.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/area/StorePagesModel.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- StorePagesModel.java      28 Oct 2004 00:06:46 -0000      1.12
  +++ StorePagesModel.java      6 Dec 2004 05:37:17 -0000       1.13
  @@ -24,6 +24,9 @@
   // XML
   import org.xml.sax.SAXException;
   
  +// Apache
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
   
   /**
    * This class stores all the pages in the document
  @@ -34,6 +37,8 @@
       private List pageSequence = null;
       private List currSequence;
       private List offDocumentItems = new java.util.ArrayList();
  +
  +    protected static Log log = LogFactory.getLog(StorePagesModel.class);
   
       /**
        * Create a new store pages model
  
  
  

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

Reply via email to