cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tony Collen <colle...@umn.edu>
Subject Re: AW: Custom Transformers
Date Fri, 21 May 2004 03:31:05 GMT
Round II:

Here's my transformer code, (I know there's extra imports I don't need just yet):
-----
package com.openweather.cocoon.transformation;

import org.apache.cocoon.transformation.AbstractSAXTransformer;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.ProcessingException;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.logger.Logger;

import org.xml.sax.SAXException;
import org.xml.sax.Attributes;

import java.util.Map;
import java.io.IOException;

public class CAPDescriptionTransformer
     extends AbstractSAXTransformer {

     protected String NAMESPACE = "http://www.incident.com/cap/1.0";
     protected String DESCRIPTION = "description";
     private String text = null;

     public void startElement(String uri, String name, String raw, Attributes attr)
     throws SAXException {

         super.startElement(uri, name, raw, attr);

         if ( NAMESPACE.equals(uri) && DESCRIPTION.equals(name) ) {
             this.text = null;
             startTextRecording();
         }
     }

     public void endElement(String uri, String name, String raw, Attributes attr)
     throws SAXException {

         if ( NAMESPACE.equals(uri) && DESCRIPTION.equals(name) ) {
             // we found the element

             // get the text and process
             this.text = endTextRecording();


             // send the processed characters to the next pipeline component
             characters( process(this.text).toCharArray(), 0, text.length() );
         }

         // end the element
         super.endElement(uri, name, raw);
     }

     private String process(String text) {
         System.out.println("inside process()");

         // @TODO: finish me

         // arbitrarily process the text

         System.out.println("leaving process before return():");
         return text.toLowerCase();
     }
}

------


package com.openweather.cocoon.transformation;

import org.apache.cocoon.transformation.AbstractSAXTransformer;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.ProcessingException;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.logger.Logger;

import org.xml.sax.SAXException;
import org.xml.sax.Attributes;

import java.util.Map;
import java.io.IOException;

public class CAPDescriptionTransformer
     extends AbstractSAXTransformer {

     protected String NAMESPACE = "http://www.incident.com/cap/1.0";
     protected String DESCRIPTION = "description";
     private String text = null;

     public void startElement(String uri, String name, String raw, Attributes attr)
     throws SAXException {

         super.startElement(uri, name, raw, attr);

         if ( NAMESPACE.equals(uri) && DESCRIPTION.equals(name) ) {
             this.text = null;
             startTextRecording();
         }
     }

     public void endElement(String uri, String name, String raw, Attributes attr)
     throws SAXException {

         if ( NAMESPACE.equals(uri) && DESCRIPTION.equals(name) ) {
             // we found the element

             // get the text and process
             this.text = endTextRecording();


             // send the processed characters to the next pipeline component
             characters( process(this.text).toCharArray(), 0, text.length() );
         }

         // end the element
         super.endElement(uri, name, raw);
     }

     private String process(String text) {
         System.out.println("inside process()");

         // @TODO: finish me

         // arbitrarily process the text

         System.out.println("leaving process before return():");
         return text.toLowerCase();
     }
}

By using the LogTransformer before and after my transformer, it seems that once 
startRecording() is called, no events are sent to my tranformer.  I would assume 
that calling endRecording() would turn that off, but that doesn't seem to be the 
case.  Can anyone tell me where I'm going wrong?  I notices the 
SourceWritingTransformer keeps a stack... am I going to have to keep track of 
the elements I see once I've started recording?


Regards,

Tony

Mime
View raw message