[FOray-commit] SF.net SVN: foray: [9680] trunk/foray
Modular XSL-FO Implementation for Java.
Status: Alpha
Brought to you by:
victormote
|
From: <vic...@us...> - 2007-06-01 18:07:51
|
Revision: 9680
http://svn.sourceforge.net/foray/?rev=9680&view=rev
Author: victormote
Date: 2007-06-01 11:07:53 -0700 (Fri, 01 Jun 2007)
Log Message:
-----------
1. Conform to axsl changes renaming and repurposing the contentComplete() method in AreaTree.
2. Move the decisions about whether a page is actually ready to be rendered from the Core module to the AreaTree module.
Modified Paths:
--------------
trunk/foray/foray-areatree/src/java/org/foray/area/AreaTree.java
trunk/foray/foray-core/src/java/org/foray/core/FOrayTarget.java
Modified: trunk/foray/foray-areatree/src/java/org/foray/area/AreaTree.java
===================================================================
--- trunk/foray/foray-areatree/src/java/org/foray/area/AreaTree.java 2007-06-01 15:56:25 UTC (rev 9679)
+++ trunk/foray/foray-areatree/src/java/org/foray/area/AreaTree.java 2007-06-01 18:07:53 UTC (rev 9680)
@@ -32,8 +32,8 @@
import org.axsl.areaW.AreaTreeEvent;
import org.axsl.areaW.AreaTreeListener;
import org.axsl.areaW.AreaWException;
+import org.axsl.foR.Fo;
import org.axsl.foR.FoNode;
-import org.axsl.foR.Fo;
import org.axsl.foR.fo.Bookmark;
import org.axsl.foR.fo.BookmarkTree;
import org.axsl.foR.fo.Marker;
@@ -98,6 +98,13 @@
= new ArrayList<AreaTreeListener>();
/**
+ * The list of pages waiting to be renderered. In general, pages waiting
+ * to be rendered are doing so because they have unresolved "ref-id" items
+ * on them.
+ */
+ private List<PageRA> renderQueue = new ArrayList<PageRA>();
+
+ /**
* Private Constructor.
* @param fontConsumer The Font Consumer.
* @param textServer The Text Server.
@@ -188,7 +195,8 @@
/**
* {@inheritDoc}
*/
- public void createDocumentNodes() {
+ public void contentComplete() {
+ this.processQueue(true);
layoutBookmarkTree(this.getRoot());
}
@@ -284,6 +292,39 @@
* @param page The PageArea instance that was just completed.
*/
protected void notifyPageComplete(final PageRA page) {
+ /* Add the newly laid-out page to the queue. It may or may not be ready
+ * to process because of unresolved references or other factors that
+ * require looking ahead at future pages. */
+ renderQueue.add(page);
+
+ processQueue(false);
+ }
+
+ /**
+ * Try to process the queue of pages from the first entry forward.
+ * If an entry can't be processed, then the queue can't move forward, so
+ * return.
+ * @param force Set to true if pages should be processed regardless of
+ * whether they have unresolved references.
+ */
+ private synchronized void processQueue(final boolean force) {
+ while (renderQueue.size() > 0) {
+ final PageRA queuedPage = renderQueue.get(0);
+ if (force
+ || queuedPage.firstUnresolvedRefId() == null) {
+ releasePage(queuedPage);
+ renderQueue.remove(0);
+ } else {
+ return;
+ }
+ }
+ }
+
+ /**
+ * Releases a given page by firing a "Page Complete" event.
+ * @param page The page to be released.
+ */
+ private void releasePage(final PageRA page) {
/* If nobody wants these events, don't waste resources creating
* them. */
if (areaTreeListeners.size() < 1) {
Modified: trunk/foray/foray-core/src/java/org/foray/core/FOrayTarget.java
===================================================================
--- trunk/foray/foray-core/src/java/org/foray/core/FOrayTarget.java 2007-06-01 15:56:25 UTC (rev 9679)
+++ trunk/foray/foray-core/src/java/org/foray/core/FOrayTarget.java 2007-06-01 18:07:53 UTC (rev 9680)
@@ -31,7 +31,6 @@
import org.foray.common.WKConstants;
import org.axsl.areaR.AreaRException;
-import org.axsl.areaR.PageArea;
import org.axsl.areaW.AreaTreeEvent;
import org.axsl.areaW.AreaTreeFactory;
import org.axsl.areaW.AreaTreeListener;
@@ -54,8 +53,6 @@
import java.io.IOException;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
/**
This class acts as a bridge between the XML:FO parser
@@ -100,13 +97,6 @@
private OutputTarget outputTarget;
/**
- * The list of pages waiting to be renderered. In general, pages waiting
- * to be rendered are doing so because they have unresolved "ref-id" items
- * on them.
- */
- private List<PageArea> renderQueue = new ArrayList<PageArea>();
-
- /**
* Keeps track of how many page-sequence objects have been processed.
* Used in messages to the users.
*/
@@ -213,15 +203,8 @@
* @throws SAXException For errors during cleanup.
*/
public void stopRenderer() throws SAXException {
- /*
- Force the processing of any more queue elements,
- even if they are not resolved.
- */
try {
- processQueue(true);
outputTarget.stopOutput();
- } catch (final AreaRException e) {
- throw new SAXException(e);
} catch (final IOException e) {
throw new SAXException(e);
}
@@ -264,9 +247,9 @@
*/
public void render(final PageSequence pageSequence) throws FOrayException {
pageSequenceCount ++;
- getLogger().info("Starting layout of page-sequence "
- + pageSequenceCount + ".");
if (this.outputTarget instanceof Renderer) {
+ getLogger().info("Starting layout of page-sequence "
+ + pageSequenceCount + ".");
final Renderer renderer = (Renderer) this.outputTarget;
final org.axsl.areaR.AreaTree areaTreeR = getRenderedAreaTree();
renderer.setAreaTree(areaTreeR);
@@ -279,15 +262,8 @@
} catch (final LayoutException e) {
throw new FOrayException(e);
}
- try {
- processQueue(false);
- } catch (final AreaRException e1) {
- throw new FOrayException(e1);
- } catch (final IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- getLogger().info("Ending page-sequence " + pageSequenceCount + ": "
+ getLogger().info("Ending layout of page-sequence "
+ + pageSequenceCount + ": "
+ pageCollection.getPageCount() + " pages produced.");
}
}
@@ -323,72 +299,19 @@
* {@inheritDoc}
*/
public void pageComplete(final AreaTreeEvent event) {
- final org.axsl.areaW.PageArea page = event.getPage();
- final org.axsl.areaR.PageArea pageToRender = (PageArea) page;
+ final org.axsl.areaR.PageArea page = event.getPage();
+ final Renderer renderer = (Renderer) this.outputTarget;
try {
- queuePage(pageToRender);
- } catch (final AreaWException e) {
- /* TODO: Do something better with this. */
- e.printStackTrace();
+ renderer.render(page);
+ } catch (final IOException e) {
+ this.getLogger().error("Rendering error", e);
+ } catch (final AreaRException e) {
+ this.getLogger().error("Rendering error", e);
}
- }
-
- /**
- * Adds a page to the queue of pages to be rendered.
- * @param page The page to add to the queue of unrendered pages.
- * @throws AreaWException For errors during ouput.
- */
- public synchronized void queuePage(final PageArea page)
- throws AreaWException {
- /* TODO: Resolve whether the queue should be rendered here or not.*/
-
- /*
- * We run the pages through a queue because any page page that contains
- * an unresolved ref-id prevents subsequent pages from being rendered.
- * So, first we add them to the queue. Then, we check to see if
- * anything in the queue can be processed.
- */
-// try {
- renderQueue.add(page);
- /*
- The just-added entry could (possibly) resolve the
- waiting entries, so we try to process the queue
- now to see.
- */
-// processQueue(false);
-// } catch (IOException e) {
-// throw new FOrayException(e);
-// }
pageCount++;
}
/**
- * Try to process the queue of pages from the first entry forward.
- * If an entry can't be processed, then the queue can't move forward, so
- * return.
- * @param force Set to true if pages should be processed regardless of
- * whether they have unresolved references.
- * @throws AreaRException For errors in the Area Tree.
- * @throws IOException For errors during output.
- */
- private synchronized void processQueue(final boolean force)
- throws AreaRException, IOException {
- if (! (this.outputTarget instanceof Renderer)) {
- return;
- }
- final Renderer renderer = (Renderer) this.outputTarget;
- while (renderQueue.size() > 0) {
- final PageArea page = renderQueue.get(0);
- if (force || page.firstUnresolvedRefId() == null) {
- renderer.render(page);
- renderQueue.remove(0);
- } else {
- return;
- }
- }
- }
-
- /**
* Returns the logger.
* @return The logger.
*/
@@ -428,7 +351,7 @@
* @param event the FOTreeEvent that was fired
*/
public void foDocumentComplete(final FoTreeEvent event) {
- getCreatedAreaTree().createDocumentNodes();
+ getCreatedAreaTree().contentComplete();
try {
stopRenderer();
} catch (final SAXException e) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|