gmazza      2004/12/14 15:16:44

  Modified:    src/java/org/apache/fop/area AreaTreeHandler.java
                        BookmarkData.java OffDocumentItem.java
  Log:
  AreaTreeModel detached from BookmarkData; more code commenting.
  
  Revision  Changes    Path
  1.24      +13 -8     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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- AreaTreeHandler.java      12 Dec 2004 14:14:56 -0000      1.23
  +++ AreaTreeHandler.java      14 Dec 2004 23:16:43 -0000      1.24
  @@ -249,8 +249,7 @@
               return;
           }
   
  -        log.debug("adding bookmarks to area tree");
  -        BookmarkData data = new BookmarkData(model);
  +        BookmarkData data = new BookmarkData();
           for (int count = 0; count < bookmarks.getOutlines().size(); count++) 
{
               Outline out = (Outline)(bookmarks.getOutlines()).get(count);
               data.addSubData(createBookmarkData(out));
  @@ -281,21 +280,27 @@
        * Add a OffDocumentItem to the area tree model
        * This checks if the OffDocumentItem is resolvable and attempts
        * to resolve or add the resolvable ids for later resolution.
  -     * @param ext the OffDocumentItem to add.
  +     * @param odi the OffDocumentItem to add.
        */
  -    private void addOffDocumentItem(OffDocumentItem ext) {
  -        if (ext instanceof Resolvable) {
  -            Resolvable res = (Resolvable) ext;
  +    private void addOffDocumentItem(OffDocumentItem odi) {
  +        if (odi instanceof Resolvable) {
  +            Resolvable res = (Resolvable) odi;
               String[] ids = res.getIDs();
               for (int count = 0; count < ids.length; count++) {
                   if (idLocations.containsKey(ids[count])) {
                       res.resolveIDRef(ids[count], (List) 
idLocations.get(ids[count]));
                   } else {
  +                    log.warn(odi.getName() + ": Unresolved id reference \"" 
  +                        + ids[count] + "\" found.");
                       addUnresolvedIDRef(ids[count], res);
                   }
               }
  +            // check to see if ODI is now fully resolved, if so process it
  +            if (res.isResolved()) {
  +                model.handleOffDocumentItem(odi);
  +            }
           } else {
  -            model.handleOffDocumentItem(ext);
  +            model.handleOffDocumentItem(odi);
           }
       }
   }
  
  
  
  1.6       +29 -22    xml-fop/src/java/org/apache/fop/area/BookmarkData.java
  
  Index: BookmarkData.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/BookmarkData.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BookmarkData.java 9 Dec 2004 01:03:24 -0000       1.5
  +++ BookmarkData.java 14 Dec 2004 23:16:44 -0000      1.6
  @@ -23,29 +23,32 @@
   import java.util.HashMap;
   
   /**
  - * This class holds the PDF bookmark OffDocumentItem
  + * An instance of this class is either a PDF bookmark OffDocumentItem and
  + * its child bookmarks.
    */
   public class BookmarkData extends OffDocumentItem implements Resolvable {
       private ArrayList subData = new ArrayList();
  -    private HashMap idRefs = new HashMap();
   
  -    // area tree model for the top level object to activate when resolved
  -    private AreaTreeModel areaTreeModel = null;
  +    // bookmark label
  +    private String label = null;
   
  +    // ID Reference for this bookmark
       private String idRef;
  +
  +    // PageViewport that the idRef item refers to
       private PageViewport pageRef = null;
  -    private String label = null;
  +
  +    // unresolved idrefs by this bookmark and child bookmarks below it
  +    private HashMap unresolvedIDRefs = new HashMap();
   
       /**
        * Create a new bookmark data object.
        * This should only be call by the top level element as its
        * idref will be null.
        *
  -     * @param model the AreaTreeModel for this object
        */
  -    public BookmarkData(AreaTreeModel model) {
  +    public BookmarkData() {
           idRef = null;
  -        areaTreeModel = model;
           whenToProcess = END_OF_DOC;
       }
   
  @@ -58,7 +61,7 @@
        */
       public BookmarkData(String id) {
           idRef = id;
  -        idRefs.put(idRef, this);
  +        unresolvedIDRefs.put(idRef, this);
       }
   
       /**
  @@ -78,10 +81,10 @@
        */
       public void addSubData(BookmarkData sub) {
           subData.add(sub);
  -        idRefs.put(sub.getID(), sub);
  +        unresolvedIDRefs.put(sub.getID(), sub);
           String[] ids = sub.getIDs();
           for (int count = 0; count < ids.length; count++) {
  -            idRefs.put(ids[count], sub);
  +            unresolvedIDRefs.put(ids[count], sub);
           }
       }
   
  @@ -138,7 +141,7 @@
        * @return true if this has been resolved
        */
       public boolean isResolved() {
  -        return idRefs == null;
  +        return unresolvedIDRefs == null;
       }
   
       /**
  @@ -148,7 +151,7 @@
        * @return the array of id references
        */
       public String[] getIDs() {
  -        return (String[])idRefs.keySet().toArray(new String[] {});
  +        return (String[])unresolvedIDRefs.keySet().toArray(new String[] {});
       }
   
       /**
  @@ -164,8 +167,8 @@
       public void resolveIDRef(String id, List pages) {
           // this method is buggy
           if (!id.equals(idRef)) {
  -            BookmarkData bd = (BookmarkData)idRefs.get(id);
  -            idRefs.remove(id);
  +            BookmarkData bd = (BookmarkData)unresolvedIDRefs.get(id);
  +            unresolvedIDRefs.remove(id);
               if (bd != null) {
                   bd.resolveIDRef(id, pages);
                   if (bd.isResolved()) {
  @@ -179,18 +182,22 @@
                   pageRef = (PageViewport)pages.get(0);
               }
               // TODO get rect area of id on page
  -            idRefs.remove(idRef);
  +            unresolvedIDRefs.remove(idRef);
               checkFinish();
           }
       }
   
       private void checkFinish() {
  -        if (idRefs.size() == 0) {
  -            idRefs = null;
  -            if (areaTreeModel != null) {
  -                areaTreeModel.handleOffDocumentItem(this);
  -            }
  +        if (unresolvedIDRefs.size() == 0) {
  +            unresolvedIDRefs = null;
           }
  +    }
  +    
  +    /**
  +     * @see org.apache.fop.area.OffDocumentItem#getName()
  +     */
  +    public String getName() {
  +        return "Bookmarks";
       }
   }
   
  
  
  
  1.3       +7 -1      xml-fop/src/java/org/apache/fop/area/OffDocumentItem.java
  
  Index: OffDocumentItem.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/area/OffDocumentItem.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- OffDocumentItem.java      28 Oct 2004 00:06:46 -0000      1.2
  +++ OffDocumentItem.java      14 Dec 2004 23:16:44 -0000      1.3
  @@ -54,4 +54,10 @@
       public int getWhenToProcess() {
           return whenToProcess;
       }
  +
  +    /**
  +     * Return a human-readable name for this ODI (for error messages, etc.)
  +     * @return String name of ODI
  +     */
  +    public abstract String getName();
   }
  
  
  

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

Reply via email to