Hi,

I would like to ask, if you could write the Extractor more flexible. I
need a transformer like the FragmentExtractorTransformer for my
project(http://sourceforge.net/projects/jeuclid/). I had also ask
the Author of this class, but got no answer.

I suggestion is like this:
sitemap.xmap:

   <map:transformer     name="extractor"
       src="org.apache.cocoon.transformation.FragmentExtractorTransformer"/>
    <extract-uri>http://www.w3.org/2000/svg</extract-uri>
    <extract-element>svg</extract-element>
   </map:transformer>

   <map:transformer     name="mml-extractor"
      src="org.apache.cocoon.transformation.FragmentExtractorTransformer">
    <extract-uri>http://www.w3.org/1998/Math/MathML</extract-uri>
    <extract-element>math</extract-element>
   </map:transformer>

I have attached a patch file for this.

Thank you, Stephan Michels.
--- FragmentExtractorTransformer.java   Fri Jan 25 11:20:47 2002
+++ FragmentExtractorTransformer2.java  Fri Jan 25 11:25:22 2002
@@ -13,6 +13,9 @@
 import org.apache.avalon.framework.component.ComponentException;
 import org.apache.avalon.framework.component.ComponentManager;
 import org.apache.avalon.framework.component.Composable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.caching.CacheValidity;
@@ -35,13 +38,13 @@
 
 
 /** The transformation half of the FragmentExtractor.
- * This transformer sieves an incoming stream of xml with embedded SVG images
- * and replaces the images with an xlink locator pointing to the image.
+ * This transformer sieves an incoming stream of xml 
+ * and replaces fragments with an xlink locator pointing to the fragments.
  * Ultimately this could be much more general, but at the moment, I think it's
- * mainly SVG extraction that's likely to go on, and afterall,
+ * mainly fragment extraction that's likely to go on, and afterall,
  * <a href="http://c2.com/cgi/wiki?YouArentGonnaNeedIt";>you aren't gonna need it</a>,
  * so I've just used very simple extraction based on a URI and local name.
- * <p>
+ * <p> 
  * <b><em>Warning</em> : since fragments are stored locally in the class, this 
transformer
  * and the associated generator are very likely to fail on a clustered server.</b>
  *
@@ -49,9 +52,12 @@
  * @version CVS $Revision: 1.4 $ $Date: 2002/01/25 03:58:30 $
  */
 public class FragmentExtractorTransformer extends AbstractTransformer
-    implements Composable, Disposable, Cacheable, Poolable {
-    private static String EXTRACT_URI="http://www.w3.org/2000/svg";;
-    private static String EXTRACT_ELEMENT="svg";
+    implements Composable, Disposable, Cacheable, Poolable, Configurable {
+    private String EXTRACT_URI="http://www.w3.org/2000/svg";;
+    private String EXTRACT_ELEMENT="svg";
+
+    private final static String EXTRACT_URI_NAME="extract-uri";
+    private final static String EXTRACT_ELEMENT_NAME="extract-element";
 
     private static String FE_URI="http://apache.org/cocoon/fragmentextractor/2.0";;
     private static String XLINK_URI="http://www.w3c.org/1999/xlink";;
@@ -70,14 +76,32 @@
 
     private DOMFactory documentFactory;
 
-    public void compose(ComponentManager manager) throws ComponentException {
+    public void compose(ComponentManager manager)
+        throws ComponentException{
         this.manager = manager;
         this.documentFactory = (DOMFactory) this.manager.lookup(Parser.ROLE);
     }
 
+     /**
+     * Configure this transformer.
+     */
+    public void configure( Configuration conf )
+            throws ConfigurationException {
+        if ( conf != null ) {
+
+            Configuration child = conf.getChild( EXTRACT_URI_NAME );
+            EXTRACT_URI = child.getValue( "http://www.w3.org/2000/svg"; );
+            getLogger().debug( "Extraction URI is " + EXTRACT_URI );
+
+            child = conf.getChild( EXTRACT_ELEMENT_NAME );
+            EXTRACT_ELEMENT = child.getValue( "svg" );
+            getLogger().debug( "Extraction element is " + EXTRACT_ELEMENT );
+        }
+    }
+
     /** Setup the transformer.
      */
-    public void setup(SourceResolver resolver, Map objectModel, String src, 
Parameters par)
+    public void setup(SourceResolver resolver, Map objectModel, String src, 
+Parameters parameters)
             throws ProcessingException, SAXException, IOException {
         extractLevel = 0;
         imageID = 0;
@@ -318,7 +342,7 @@
             super.startDTD(name,publicId,systemId);
         } else {
             throw new SAXException(
-                "Recieved startDTD after beginning SVG extraction process."
+                "Recieved startDTD after beginning fragment extraction process."
             );
         }
     }
@@ -332,7 +356,7 @@
             super.endDTD();
         } else {
             throw new SAXException(
-                "Recieved endDTD after beginning SVG extraction process."
+                "Recieved endDTD after beginning fragment extraction process."
             );
         }
     }
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to