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]