You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ad...@apache.org on 2008/05/13 09:58:32 UTC

svn commit: r655766 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/fo/FOEventHandler.java src/java/org/apache/fop/fo/FOPropertyMapping.java src/java/org/apache/fop/fo/properties/StringProperty.java test/fotree/testcases/id_auto.fo

Author: adelmelle
Date: Tue May 13 00:58:31 2008
New Revision: 655766

URL: http://svn.apache.org/viewvc?rev=655766&view=rev
Log:
Added support for auto-generated initial value for the "id" property.

Added:
    xmlgraphics/fop/trunk/test/fotree/testcases/id_auto.fo   (with props)
Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/StringProperty.java

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java?rev=655766&r1=655765&r2=655766&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOEventHandler.java Tue May 13 00:58:31 2008
@@ -96,6 +96,11 @@
     private boolean inMarker = false;
     
     /**
+     * Keeps track of automatically generated ids in the current document
+     */
+    private long lastGeneratedId = 1;
+    
+    /**
      * Main constructor
      * @param foUserAgent the apps.FOUserAgent instance for this process
      */
@@ -169,6 +174,13 @@
     }
     
     /**
+     * Return the next value for automatically generated ids
+     */
+    public long getNextId() {
+        return this.lastGeneratedId++;
+    }
+    
+    /**
      * This method is called to indicate the start of a new document run.
      * @throws SAXException In case of a problem
      */

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java?rev=655766&r1=655765&r2=655766&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/FOPropertyMapping.java Tue May 13 00:58:31 2008
@@ -2503,7 +2503,7 @@
         addPropertyMaker("content-type", m);
 
         // id
-        m  = new StringProperty.Maker(PR_ID);
+        m  = new StringProperty.IdMaker(PR_ID);
         m.setInherited(false);
         m.setDefault("");
         addPropertyMaker("id", m);

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/StringProperty.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/StringProperty.java?rev=655766&r1=655765&r2=655766&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/StringProperty.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/properties/StringProperty.java Tue May 13 00:58:31 2008
@@ -21,6 +21,11 @@
 
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.FOValidationEventProducer;
+import org.apache.fop.fo.ValidationException;
+import org.apache.fop.fo.expr.PropertyException;
+
+import java.util.Set;
 
 /**
  * Exists primarily as a container for its Maker inner class, which is
@@ -77,6 +82,48 @@
 
     }
 
+    /**
+     * Inner class dedicated to the "id" property, which should provide a random
+     * unique identifier as an initial value.
+     * The values for "id" are never cached, as they're typically valid for one
+     * document.
+     */
+    public static class IdMaker extends PropertyMaker {
+
+        /**
+         * @param propId    the id of the property for which the maker should be created
+         */
+        public IdMaker(int propId) {
+            super(propId);
+        }
+
+        /** {@inheritDoc} */
+        public Property make(PropertyList propertyList) throws PropertyException {
+            String newId = "FO#";
+            newId += propertyList.getFObj().getFOEventHandler().getNextId();
+            return new StringProperty(newId);
+        }
+        
+        /** {@inheritDoc} */
+        public Property make(PropertyList propertyList, 
+                             String value,
+                             FObj fo) throws PropertyException {
+            
+            Property idProp;
+            
+            //no parsing necessary; just return a new StringProperty
+            //TODO: Should we move validation here? (see FObj#checkId())
+            if ("".equals(value)) {
+                //if an empty string was specified, return the default
+                idProp = this.make(propertyList);
+            } else {
+                idProp = new StringProperty(value);
+            }
+            
+            return idProp;
+        }
+    }
+
     /** cache containing all canonical StringProperty instances */
     private static final PropertyCache cache = new PropertyCache(StringProperty.class);
     

Added: xmlgraphics/fop/trunk/test/fotree/testcases/id_auto.fo
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/fotree/testcases/id_auto.fo?rev=655766&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/fotree/testcases/id_auto.fo (added)
+++ xmlgraphics/fop/trunk/test/fotree/testcases/id_auto.fo Tue May 13 00:58:31 2008
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test">
+  <test:assert property="id" expected="FO#1" />
+  <fo:layout-master-set>
+    <test:assert property="id" expected="FO#2" />
+    <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
+      <test:assert property="id" expected="FO#3" />
+      <fo:region-body>
+        <test:assert property="id" expected="FO#4" />
+      </fo:region-body>
+    </fo:simple-page-master>
+  </fo:layout-master-set>
+  <fo:page-sequence master-reference="simpleA4">
+    <test:assert property="id" expected="FO#5" />
+    <fo:flow flow-name="xsl-region-body">
+      <test:assert property="id" expected="FO#6" />
+      <fo:block font-size="14pt" id="block">Hello
+        <test:assert property="id" expected="block"/>
+        <fo:inline> World!
+          <test:assert property="id" expected="FO#7" />
+        </fo:inline>
+      </fo:block>
+      <fo:block font-family="ZapfDingbats">&#2702;
+        <test:assert property="id" expected="FO#8" />
+      </fo:block>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>

Propchange: xmlgraphics/fop/trunk/test/fotree/testcases/id_auto.fo
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/fotree/testcases/id_auto.fo
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org