Revision: 7872
http://svn.sourceforge.net/foray/?rev=7872&view=rev
Author: victormote
Date: 2006-09-03 14:06:28 -0700 (Sun, 03 Sep 2006)
Log Message:
-----------
Move the stateful logic in PageSequenceMaster to PageMasterResolver.
Modified Paths:
--------------
trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageMasterResolver.java
trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageSequenceMaster.java
Modified: trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageMasterResolver.java
===================================================================
--- trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageMasterResolver.java 2006-09-03 20:23:13 UTC (rev 7871)
+++ trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageMasterResolver.java 2006-09-03 21:06:28 UTC (rev 7872)
@@ -25,15 +25,10 @@
package org.foray.fotree.fo.obj;
import org.axsl.foR.FOTreeException;
-import org.axsl.foR.fo.Flow;
import org.axsl.foR.fo.SimplePageMaster;
/**
* Provides pages sequentially for a given {@link PageSequence}.
- * Implementations may keep track of state information, that is, what
- * sub-sequence specifiers have already been exhausted and partially exhausted.
- * Therefore, only one instance of {@link PageMasterResolver} should be used for
- * a given layout of a {@link PageSequence}.
*/
public class PageMasterResolver implements org.axsl.foR.fo.PageMasterResolver {
@@ -42,6 +37,13 @@
private int lastDocumentPageNumber = 0;
+ /** Current index into the PageSequenceMaster child sub-sequences.
+ * Used only for PageSequenceMaster */
+ private int currentSubSequenceNumber;
+
+ /** Current SubSequenceSpecifier. */
+ private SubSequenceSpecifier currentSubSequence;
+
public PageMasterResolver(final PageSequence pageSequence,
final int lastPageNumber) {
this.pageSequence = pageSequence;
@@ -63,22 +65,66 @@
if (psm == null) {
return null;
}
- final Flow flow = getFlow();
this.lastDocumentPageNumber ++;
final org.foray.fotree.fo.obj.SimplePageMaster spm =
- psm.getNextSimplePageMaster(
- ((this.lastDocumentPageNumber % 2) == 1), isBlank);
- final Region region = (Region) spm.getRegionBody();
- if (!flow.traitFlowName().equals(region.traitRegionName())) {
- throw new FOTreeException("Flow '" + flow.traitFlowName()
- + "' does not map to the region-body in page-master '"
- + spm.traitMasterName() + "'");
- }
+ getNextSimplePageMaster(
+ ((this.lastDocumentPageNumber % 2) == 1), isBlank, psm);
return spm;
}
- private Flow getFlow() {
- return this.pageSequence.getFlow();
+ private org.foray.fotree.fo.obj.SimplePageMaster getNextSimplePageMaster(
+ final boolean oddPage, final boolean blankPage,
+ final PageSequenceMaster psm) throws FOTreeException {
+ boolean firstPage = false;
+ if (currentSubSequence == null) {
+ currentSubSequence = getNextSubSequence(psm);
+ firstPage = true;
+ }
+ String pageMasterName = currentSubSequence.getNextPageMasterName(
+ oddPage, firstPage, blankPage);
+ boolean canRecover = true;
+ while (pageMasterName == null) {
+ final SubSequenceSpecifier nextSubSequence = getNextSubSequence(
+ psm);
+ firstPage = true;
+ if (nextSubSequence == null) {
+ if (!canRecover) {
+ psm.throwException("subsequences exhausted in "
+ + "page-sequence-master '" + psm.traitMasterName()
+ + "', cannot recover");
+ }
+ psm.getLogger().warn(
+ "subsequences exhausted in " + "page-sequence-master '"
+ + psm.traitMasterName()
+ + "', use previous subsequence");
+ currentSubSequence.reset();
+ canRecover = false;
+ } else {
+ currentSubSequence = nextSubSequence;
+ }
+ pageMasterName = currentSubSequence.getNextPageMasterName(oddPage,
+ firstPage, blankPage);
+ }
+ final org.foray.fotree.fo.obj.SimplePageMaster pageMaster =
+ psm.layoutMasterSet().getSimplePageMaster(pageMasterName);
+ if (pageMaster == null) {
+ psm.throwException("No simple-page-master matching '"
+ + pageMasterName
+ + "' in page-sequence-master '" + psm.traitMasterName()
+ + "'.");
+ }
+ return pageMaster;
}
+ protected SubSequenceSpecifier getNextSubSequence(
+ final PageSequenceMaster psm) {
+ currentSubSequenceNumber++;
+ if (currentSubSequenceNumber >= 0
+ && currentSubSequenceNumber < psm.getChildCount()) {
+ return (SubSequenceSpecifier) psm.getChildAt(
+ currentSubSequenceNumber);
+ }
+ return null;
+ }
+
}
Modified: trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageSequenceMaster.java
===================================================================
--- trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageSequenceMaster.java 2006-09-03 20:23:13 UTC (rev 7871)
+++ trunk/foray/foray-fotree/src/java/org/foray/fotree/fo/obj/PageSequenceMaster.java 2006-09-03 21:06:28 UTC (rev 7872)
@@ -41,10 +41,6 @@
*/
public class PageSequenceMaster extends FObj implements PageSequenceTemplate {
- private SubSequenceSpecifier currentSubSequence;
-
- private int currentSubSequenceNumber;
-
// The terminology may be confusing. A 'page-sequence-master' consists
// of a sequence of what the XSL spec refers to as
// 'sub-sequence-specifiers'. These are, in fact, simple or complex
@@ -84,8 +80,7 @@
* {@inheritDoc}
*/
public void setup() throws FOTreeException {
- currentSubSequenceNumber = -1;
- currentSubSequence = null;
+ return;
}
/**
@@ -122,64 +117,6 @@
return (LayoutMasterSet) this.parentFO();
}
- protected SubSequenceSpecifier getNextSubSequence() {
- currentSubSequenceNumber++;
- if (currentSubSequenceNumber >= 0
- && currentSubSequenceNumber < this.children.size()) {
- return (SubSequenceSpecifier) this.children
- .get(currentSubSequenceNumber);
- }
- return null;
- }
-
- public void reset() {
- currentSubSequenceNumber = -1;
- currentSubSequence = null;
- for (int i = 0; i < this.children.size(); i++) {
- ((SubSequenceSpecifier) this.children.get(i)).reset();
- }
- }
-
- public SimplePageMaster getNextSimplePageMaster(final boolean oddPage,
- final boolean blankPage) throws FOTreeException {
- boolean firstPage = false;
- if (currentSubSequence == null) {
- currentSubSequence = getNextSubSequence();
- firstPage = true;
- }
- String pageMasterName = currentSubSequence.getNextPageMasterName(
- oddPage, firstPage, blankPage);
- boolean canRecover = true;
- while (pageMasterName == null) {
- final SubSequenceSpecifier nextSubSequence = getNextSubSequence();
- firstPage = true;
- if (nextSubSequence == null) {
- if (!canRecover) {
- throwException("subsequences exhausted in "
- + "page-sequence-master '" + traitMasterName()
- + "', cannot recover");
- }
- getLogger().warn(
- "subsequences exhausted in " + "page-sequence-master '"
- + traitMasterName()
- + "', use previous subsequence");
- currentSubSequence.reset();
- canRecover = false;
- } else {
- currentSubSequence = nextSubSequence;
- }
- pageMasterName = currentSubSequence.getNextPageMasterName(oddPage,
- firstPage, blankPage);
- }
- final SimplePageMaster pageMaster = this.layoutMasterSet()
- .getSimplePageMaster(pageMasterName);
- if (pageMaster == null) {
- throwException("No simple-page-master matching '" + pageMasterName
- + "' in page-sequence-master '" + traitMasterName() + "'.");
- }
- return pageMaster;
- }
-
public String getName() {
return "page-sequence-master";
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|