package com.canoo.webtest.plugins.pdftest.htmlunit.pdfbox; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; import com.canoo.webtest.plugins.pdftest.htmlunit.PDFBookmark; /** * Implementation of {@link PDFBookmark} based on * <a href="http://www.pdfbox.org/">PDFBox</a>. * @author Etienne Studer * @author Marc Guillemot */ public class PdfBoxPDFBookmark implements PDFBookmark { private final PDOutlineItem nativeBookmark_; private final PdfBoxPDFBookmark parent_; private final List<PdfBoxPDFBookmark> children_; public PdfBoxPDFBookmark(final PDOutlineItem nativeBookmark, final PdfBoxPDFBookmark parent) { nativeBookmark_ = nativeBookmark; parent_ = parent; children_ = readChildren(); } protected List<PdfBoxPDFBookmark> readChildren() { final List<PdfBoxPDFBookmark> children = new ArrayList<PdfBoxPDFBookmark>(); PDOutlineItem nativeChild = nativeBookmark_.getFirstChild(); while (nativeChild != null) { children.add(new PdfBoxPDFBookmark(nativeChild, this)); nativeChild = nativeChild.getNextSibling(); } return children; } public String getTitle() { return nativeBookmark_.getTitle(); } public PDFBookmark getParent() { return parent_; } public List<PdfBoxPDFBookmark> getchildren() { return children_; } /** * Get all children deep first * @return a list of {@link PDFBookmark} */ public List<PdfBoxPDFBookmark> getAllChildren() { final List<PdfBoxPDFBookmark> results = new ArrayList<PdfBoxPDFBookmark>(); for (final Iterator iter = getchildren().iterator(); iter.hasNext();) { final PdfBoxPDFBookmark child = (PdfBoxPDFBookmark) iter.next(); results.add(child); results.addAll(child.getAllChildren()); } return results; } }