aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/area/BookmarkData.java
diff options
context:
space:
mode:
authorGlen Mazza <gmazza@apache.org>2004-10-28 00:06:47 +0000
committerGlen Mazza <gmazza@apache.org>2004-10-28 00:06:47 +0000
commit13fdba00ab86701f8e0b4057ecc5bc36375c8ee0 (patch)
treebece507b2aafa2d6a407b6350ecb9b21fb9ec535 /src/java/org/apache/fop/area/BookmarkData.java
parentd3e7160fc96f0314fc3da32043a94deff43c4a7e (diff)
downloadxmlgraphics-fop-13fdba00ab86701f8e0b4057ecc5bc36375c8ee0.tar.gz
xmlgraphics-fop-13fdba00ab86701f8e0b4057ecc5bc36375c8ee0.zip
PR:
Obtained from: Submitted by: Reviewed by: 1.) Changed OffDocumentItem from an interface to an abstract base class. 2.) Removed the "extensions" package. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198105 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/area/BookmarkData.java')
-rw-r--r--src/java/org/apache/fop/area/BookmarkData.java205
1 files changed, 205 insertions, 0 deletions
diff --git a/src/java/org/apache/fop/area/BookmarkData.java b/src/java/org/apache/fop/area/BookmarkData.java
new file mode 100644
index 000000000..6b1ad7c76
--- /dev/null
+++ b/src/java/org/apache/fop/area/BookmarkData.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.area;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.HashMap;
+
+/**
+ * This class holds the PDF bookmark OffDocumentItem
+ */
+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;
+
+ private String idRef;
+ private PageViewport pageRef = null;
+ private String label = null;
+
+ /**
+ * Create a new bookmark data object.
+ * This should only be call by the top level element as the
+ * id reference will be null.
+ */
+ public BookmarkData() {
+ idRef = null;
+ whenToProcess = IMMEDIATELY;
+ }
+
+ /**
+ * Create a new pdf bookmark data object.
+ * This is used by the outlines to create a data object
+ * with a id reference. The id reference is to be resolved.
+ *
+ * @param id the id reference
+ */
+ public BookmarkData(String id) {
+ idRef = id;
+ idRefs.put(idRef, this);
+ }
+
+ /**
+ * Set the area tree model
+ * This should only be called for the top level element.
+ * The area tree model is used once resolving is complete.
+ *
+ * @param atm the area tree model for the current document
+ */
+ public void setAreaTreeModel(AreaTreeModel atm) {
+ areaTreeModel = atm;
+ }
+
+ /**
+ * Get the id reference for this data.
+ *
+ * @return the id reference
+ */
+ public String getID() {
+ return idRef;
+ }
+
+ /**
+ * Add the child bookmark data object.
+ * This adds a child bookmark in the bookmark hierarchy.
+ *
+ * @param sub the child bookmark data
+ */
+ public void addSubData(BookmarkData sub) {
+ subData.add(sub);
+ idRefs.put(sub.getID(), sub);
+ String[] ids = sub.getIDs();
+ for (int count = 0; count < ids.length; count++) {
+ idRefs.put(ids[count], sub);
+ }
+ }
+
+ /**
+ * Set the label for this bookmark.
+ *
+ * @param l the string label
+ */
+ public void setLabel(String l) {
+ label = l;
+ }
+
+ /**
+ * Get the label for this bookmark object.
+ *
+ * @return the label string
+ */
+ public String getLabel() {
+ return label;
+ }
+
+ /**
+ * Get the size of child data objects.
+ *
+ * @return the number of child bookmark data
+ */
+ public int getCount() {
+ return subData.size();
+ }
+
+ /**
+ * Get the child data object.
+ *
+ * @param count the index to get
+ * @return the child bookmark data
+ */
+ public BookmarkData getSubData(int count) {
+ return (BookmarkData)subData.get(count);
+ }
+
+ /**
+ * Get the page that this resolves to.
+ *
+ * @return the PageViewport that this extension resolves to
+ */
+ public PageViewport getPage() {
+ return pageRef;
+ }
+
+ /**
+ * Check if this resolvable object has been resolved.
+ * Once the id reference is null then it has been resolved.
+ *
+ * @return true if this has been resolved
+ */
+ public boolean isResolved() {
+ return idRefs == null;
+ }
+
+ /**
+ * Get the id references held by this object.
+ * Also includes all id references of all children.
+ *
+ * @return the array of id references
+ */
+ public String[] getIDs() {
+ return (String[])idRefs.keySet().toArray(new String[] {});
+ }
+
+ /**
+ * Resolve this resolvable object.
+ * This resolves the id reference and if possible also
+ * resolves id references of child elements that have the same
+ * id reference.
+ *
+ * @param id the id reference being resolved
+ * @param pages the list of pages the the id reference resolves to
+ */
+ public void resolve(String id, List pages) {
+ // this method is buggy
+
+ if (!id.equals(idRef)) {
+ BookmarkData bd = (BookmarkData)idRefs.get(id);
+ idRefs.remove(id);
+ if (bd != null) {
+ bd.resolve(id, pages);
+ if (bd.isResolved()) {
+ checkFinish();
+ }
+ } else if (idRef == null) {
+ checkFinish();
+ }
+ } else {
+ if (pages != null) {
+ pageRef = (PageViewport)pages.get(0);
+ }
+ // TODO get rect area of id on page
+
+ idRefs.remove(idRef);
+ checkFinish();
+ }
+ }
+
+ private void checkFinish() {
+ if (idRefs.size() == 0) {
+ idRefs = null;
+ if (areaTreeModel != null) {
+ areaTreeModel.handleOffDocumentItem(this);
+ }
+ }
+ }
+}
+