aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlen Mazza <gmazza@apache.org>2004-12-14 23:16:44 +0000
committerGlen Mazza <gmazza@apache.org>2004-12-14 23:16:44 +0000
commit4f3152f59a020eda3dae7c56fa68c2063eeb084e (patch)
treee47dce8b885a943921a64a07b32fcef2db85109f
parent2af2cba13556ff9360ddabd7c7f06547cc1d235d (diff)
downloadxmlgraphics-fop-4f3152f59a020eda3dae7c56fa68c2063eeb084e.tar.gz
xmlgraphics-fop-4f3152f59a020eda3dae7c56fa68c2063eeb084e.zip
PR:
Obtained from: Submitted by: Reviewed by: AreaTreeModel detached from BookmarkData; more code commenting. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198200 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/area/AreaTreeHandler.java19
-rw-r--r--src/java/org/apache/fop/area/BookmarkData.java49
-rw-r--r--src/java/org/apache/fop/area/OffDocumentItem.java6
3 files changed, 46 insertions, 28 deletions
diff --git a/src/java/org/apache/fop/area/AreaTreeHandler.java b/src/java/org/apache/fop/area/AreaTreeHandler.java
index 3439baa54..186ae558f 100644
--- a/src/java/org/apache/fop/area/AreaTreeHandler.java
+++ b/src/java/org/apache/fop/area/AreaTreeHandler.java
@@ -249,8 +249,7 @@ public class AreaTreeHandler extends FOEventHandler {
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 @@ public class AreaTreeHandler extends FOEventHandler {
* 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);
}
}
}
diff --git a/src/java/org/apache/fop/area/BookmarkData.java b/src/java/org/apache/fop/area/BookmarkData.java
index 70bc1fa36..5384a7cdf 100644
--- a/src/java/org/apache/fop/area/BookmarkData.java
+++ b/src/java/org/apache/fop/area/BookmarkData.java
@@ -23,29 +23,32 @@ import java.util.List;
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 class BookmarkData extends OffDocumentItem implements Resolvable {
*/
public BookmarkData(String id) {
idRef = id;
- idRefs.put(idRef, this);
+ unresolvedIDRefs.put(idRef, this);
}
/**
@@ -78,10 +81,10 @@ public class BookmarkData extends OffDocumentItem implements Resolvable {
*/
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 @@ public class BookmarkData extends OffDocumentItem implements Resolvable {
* @return true if this has been resolved
*/
public boolean isResolved() {
- return idRefs == null;
+ return unresolvedIDRefs == null;
}
/**
@@ -148,7 +151,7 @@ public class BookmarkData extends OffDocumentItem implements Resolvable {
* @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 class BookmarkData extends OffDocumentItem implements Resolvable {
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 @@ public class BookmarkData extends OffDocumentItem implements Resolvable {
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";
+ }
}
diff --git a/src/java/org/apache/fop/area/OffDocumentItem.java b/src/java/org/apache/fop/area/OffDocumentItem.java
index 8f740bb1a..72f3b2e37 100644
--- a/src/java/org/apache/fop/area/OffDocumentItem.java
+++ b/src/java/org/apache/fop/area/OffDocumentItem.java
@@ -54,4 +54,10 @@ public abstract class OffDocumentItem {
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();
}