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]