]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
--Validation for fo:wrapper added.
authorGlen Mazza <gmazza@apache.org>
Sun, 24 Apr 2005 23:54:34 +0000 (23:54 +0000)
committerGlen Mazza <gmazza@apache.org>
Sun, 24 Apr 2005 23:54:34 +0000 (23:54 +0000)
--Made LayoutManagerMapping.initialize() protected to facilitate
subclassing of this class.
--For direct requests of particular LayoutManager overrides, switched
from FOPException to IllegalStateException when the mapping is
missing or duplicate.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_KnuthStylePageBreaking@198591 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/area/AreaTreeHandler.java
src/java/org/apache/fop/fo/flow/Wrapper.java
src/java/org/apache/fop/layoutmgr/LayoutManagerMaker.java
src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java
src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java

index 2d6328f132af654683007be9c173e21a096eb5cc..16e60b176c0812b6f7e91c15c9437a4d05992bb2 100644 (file)
@@ -230,15 +230,8 @@ public class AreaTreeHandler extends FOEventHandler {
         // If no main flow, nothing to layout!
         if (pageSequence.getMainFlow() != null) {
             PageSequenceLayoutManager pageSLM;
-            try {
-                pageSLM = (PageSequenceLayoutManager)
+            pageSLM = (PageSequenceLayoutManager)
                 getLayoutManagerMaker().makeLayoutManager(pageSequence);
-            } catch (FOPException e) {
-                log.error("Failed to create a PageSequenceLayoutManager; "
-                        + "no pages will be laid out:");
-                log.error(e.getMessage());
-                return;
-            }
             pageSLM.setAreaTreeHandler(this);
             pageSLM.activateLayout();
         }
index 1de4327e20ac44d262fc27a120feda5303175422..c8bb26f738a2d2ef2f0c55461e8c26e2afc4cadb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 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.
 package org.apache.fop.fo.flow;
 
 // Java
-import java.util.List;
-import java.util.ListIterator;
-
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObjMixed;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.ValidationException;
+import org.xml.sax.Locator;
 
 /**
  * Implementation for fo:wrapper formatting object.
  * The wrapper object serves as
  * a property holder for its child node objects.
- *
- * Content: (#PCDATA|%inline;|%block;)*
- * Properties: id
- * @todo implement validateChildNode()
  */
 public class Wrapper extends FObjMixed {
     // The value of properties relevant for fo:wrapper.
     private String id;
     // End of property values
     
+    // used for FO validation
+    private boolean blockOrInlineItemFound = false;
+
     /**
      * @param parent FONode that is the parent of this object
      */
@@ -62,6 +60,27 @@ public class Wrapper extends FObjMixed {
         checkId(id);
     }
 
+    /**
+     * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
+     * XSL Content Model: marker* (#PCDATA|%inline;|%block;)*
+     * Additionally (unimplemented): "An fo:wrapper that is a child of an 
+     * fo:multi-properties is only permitted to have children that would 
+     * be permitted in place of the fo:multi-properties."
+     */
+    protected void validateChildNode(Locator loc, String nsURI, String localName) 
+        throws ValidationException {
+        if (nsURI == FO_URI && localName.equals("marker")) {
+            if (blockOrInlineItemFound) {
+               nodesOutOfOrderError(loc, "fo:marker", 
+                    "(#PCDATA|%inline;|%block;)");
+            }
+        } else if (isBlockOrInlineItem(nsURI, localName)) {
+            blockOrInlineItemFound = true;
+        } else {
+            invalidChildError(loc, nsURI, localName);
+        }
+    }
+
     /**
      * Return the "id" property.
      */
index 43b62d6c6468037ebbe94eaa0bd09fc1521fe822..9f344ed82a6d99cb95a15916711b13f11701c379 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
+ * Copyright 2004-2005 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.
@@ -19,7 +19,7 @@ package org.apache.fop.layoutmgr;
 
 import java.util.List;
 import org.apache.fop.fo.FONode;
-import org.apache.fop.apps.FOPException;
+
 
 /**
  * The interface for all LayoutManager makers
@@ -34,14 +34,15 @@ public interface LayoutManagerMaker {
     public void makeLayoutManagers(FONode node, List lms);
 
     /**
-     * Make the LayoutManager for the node.
-     * If not exactly one LayoutManagers is made,
-     * a FOPException is thrown.
+     * Make a specific LayoutManager for the node.
+     * If not exactly one LayoutManagers is available,
+     * an IllegalStateException is thrown.
      * @param node the FO node for which the LayoutManagers are made
      * @return The created LayoutManager
+     * @throws IllegalStateException if not exactly one
+     *    LayoutManager is available for the requested node
      */
-    public LayoutManager makeLayoutManager(FONode node)
-        throws FOPException;
+    public LayoutManager makeLayoutManager(FONode node);
 
 }
 
index ae7be8cba7dcb6560f5b4803b2d00cefe532cbb7..821d369444cd81e962599062dcf45edaa8b4b5b8 100644 (file)
@@ -21,14 +21,11 @@ import java.util.ArrayList;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.List;
-import java.util.ListIterator;
 import java.util.Iterator;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.apache.fop.apps.FOPException;
-
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FOText;
 import org.apache.fop.fo.FObjMixed;
@@ -64,10 +61,10 @@ import org.apache.fop.fo.pagination.Title;
 
 import org.apache.fop.layoutmgr.list.ListBlockLayoutManager;
 import org.apache.fop.layoutmgr.list.ListItemLayoutManager;
-import org.apache.fop.layoutmgr.table.Body;
+/*import org.apache.fop.layoutmgr.table.Body;
 import org.apache.fop.layoutmgr.table.Cell;
 import org.apache.fop.layoutmgr.table.Column;
-import org.apache.fop.layoutmgr.table.Row;
+import org.apache.fop.layoutmgr.table.Row;*/
 import org.apache.fop.layoutmgr.table.TableLayoutManager;
 
 /**
@@ -88,7 +85,7 @@ public class LayoutManagerMapping implements LayoutManagerMaker {
     /**
      * Initializes the set of maker objects associated with this LayoutManagerMapping
      */
-    private void initialize() {
+    protected void initialize() {
         makers.put(FOText.class, new FOTextLayoutManagerMaker());
         makers.put(FObjMixed.class, new Maker());
         makers.put(BidiOverride.class, new BidiOverrideLayoutManagerMaker());
@@ -141,18 +138,17 @@ public class LayoutManagerMapping implements LayoutManagerMaker {
     /**
      * @see org.apache.fop.layoutmgr.LayoutManagerMaker#makeLayoutManager(FONode)
      */
-    public LayoutManager makeLayoutManager(FONode node)
-        throws FOPException {
+    public LayoutManager makeLayoutManager(FONode node) {
         List lms = new ArrayList();
         makeLayoutManagers(node, lms);
         if (lms.size() == 0) {
-            throw new FOPException("No LayoutManager for class "
+            throw new IllegalStateException("LayoutManager for class "
                                    + node.getClass()
-                                   + "; 1 was required");
+                                   + " is missing.");
         } else if (lms.size() > 1) {
-            throw new FOPException("More than 1 LayoutManager for class "
+            throw new IllegalStateException("Duplicate LayoutManagers for class "
                                    + node.getClass()
-                                   + "; 1 was required"); 
+                                   + " found, only one may be declared."); 
         }
         return (LayoutManager) lms.get(0);
     }
index 8f6c9a903bb3da73badc97e801929bcdcadf7571..71967aff07d8e949f2e5baf7163907e05c7fd6f4 100644 (file)
@@ -446,14 +446,8 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager {
         
         RegionViewport rv = curPage.getPage().getRegionViewport(regionID);
         StaticContentLayoutManager lm;
-        try {
-            lm = (StaticContentLayoutManager)
-                areaTreeHandler.getLayoutManagerMaker().makeLayoutManager(sc);
-        } catch (FOPException e) { // severe error
-            throw new IllegalStateException(
-                "Internal error:  Failed to create a StaticContentLayoutManager "
-                + "for flow " + sc.getFlowName());
-        }
+        lm = (StaticContentLayoutManager)
+            areaTreeHandler.getLayoutManagerMaker().makeLayoutManager(sc);
         lm.initialize();
         lm.setRegionReference(rv.getRegionReference());
         lm.setParent(this);