You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by jo...@census.gov on 2001/11/30 16:39:23 UTC

Simple extension problem

Greetings all,

I'm learning to write extensions and I'm trying to start simple.
I think I've followed the directions on the "Extensions" page
(http://xml.apache.org/fop/extensions.html), but something
is still missing or incorrect.

I'm using JDK build 1.4.0-beta3-b84 with Fop0.20.2 on
Windows 2000, Service Pack 3.

I have a Java class to simply output the Date in the default
locale.  Eventually I'll need to get content from log files and
database tables,  etc., but I just want to see output from my
extension class show up in the rendered result right now.

I have an ElementMapping subclass that parallels
the functionality used to support the fox:label tag.

I have a single line of text in the text file
META-INF/services/org.apache.fop.fo.ElementMapping
with the fully qualified class name for that ElementMapping
subclass:

gov.census.geo.pob.fop.extensions.TimeDisplayMapping

I stored the jar in my Fop-0.20.2\lib\ directory.

My stylesheet element includes the attributes
     xmlns:pob="http://jgilvary.geo.census.gov/"
     extension-element-prefixes="pob"

When I try to use <pob:time /> in the fo file, there is no output
in pdf or awt. There are no more error messages about
Transformer errors or ClassNotFoundExceptions, so I
think I'm getting closer. Everything else I do in that file
works (png images, pdf bookmarks and internal links),
so I believe the set up is correct.

I'm doing something wrong or not doing something right <G>

Any help greatly appreciated.

 Thanks,

 Joe


 Functionality class source code:
package gov.census.geo.pob.fop.extensions;

import org.apache.fop.fo.*;
import org.apache.fop.extensions.*;
import java.util.Date;
import java.text.SimpleDateFormat;

public class TimeDisplay extends ExtensionObj {
    private String today = (new SimpleDateFormat()).format(new Date());

    public static class Maker extends FObj.Maker {
        public FObj make(FObj parent, PropertyList propertyList) {
            return new TimeDisplay(parent, propertyList);
        }
    }

    public static FObj.Maker maker() {
        return new TimeDisplay.Maker();
    }

    public TimeDisplay(FObj parent, PropertyList propertyList) {
        super(parent, propertyList);
    }

    public String toString(){
     return (today);
    }
}


ElementMapping subclass source code:

package gov.census.geo.pob.fop.extensions;

import org.apache.fop.fo.*;
import org.apache.fop.fo.properties.ExtensionPropertyMapping;
import org.apache.fop.fo.TreeBuilder;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;

public class TimeDisplayMapping implements ElementMapping {

    public final static String URI = "http://jgilvary.geo.census.gov/";

    private static HashMap foObjs = null;

    public synchronized void addToBuilder(TreeBuilder builder) {
        if(foObjs == null) {
            foObjs = new HashMap();
            foObjs.put("time", TimeDisplay.maker());
     }
        builder.addMapping(URI, foObjs);

        builder.addPropertyList(URI,
                                ExtensionPropertyMapping.getGenericMappings
());
        /* Add any element mappings */
        for (Iterator iter = ExtensionPropertyMapping.getElementMappings
().iterator();
                iter.hasNext(); ) {
            String elem = (String)iter.next();
            builder.addElementPropertyList(URI, elem,

ExtensionPropertyMapping.getElementMapping(elem));
        }
    }
}



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-dev-unsubscribe@xml.apache.org
For additional commands, email: fop-dev-help@xml.apache.org


Re: Simple extension problem

Posted by Keiron Liddle <ke...@aftexsw.com>.
The class ExtensionObj is used in a particular way. Overriding it like you 
have done will not do what you want.

You should extends the FObj class and in the layout method you should 
insert the text that you want into the line area. The same as what is done 
in the FOText class by adding your text to the BlockArea.

On 2001.11.30 16:39 joseph.aloysius.gilvary@census.gov wrote:
> Greetings all,
> 
> I'm learning to write extensions and I'm trying to start simple.
> I think I've followed the directions on the "Extensions" page
> (http://xml.apache.org/fop/extensions.html), but something
> is still missing or incorrect.
> 
> I'm using JDK build 1.4.0-beta3-b84 with Fop0.20.2 on
> Windows 2000, Service Pack 3.
> 
> I have a Java class to simply output the Date in the default
> locale.  Eventually I'll need to get content from log files and
> database tables,  etc., but I just want to see output from my
> extension class show up in the rendered result right now.
> 
> I have an ElementMapping subclass that parallels
> the functionality used to support the fox:label tag.
> 
> I have a single line of text in the text file
> META-INF/services/org.apache.fop.fo.ElementMapping
> with the fully qualified class name for that ElementMapping
> subclass:
> 
> gov.census.geo.pob.fop.extensions.TimeDisplayMapping
> 
> I stored the jar in my Fop-0.20.2\lib\ directory.
> 
> My stylesheet element includes the attributes
>      xmlns:pob="http://jgilvary.geo.census.gov/"
>      extension-element-prefixes="pob"
> 
> When I try to use <pob:time /> in the fo file, there is no output
> in pdf or awt. There are no more error messages about
> Transformer errors or ClassNotFoundExceptions, so I
> think I'm getting closer. Everything else I do in that file
> works (png images, pdf bookmarks and internal links),
> so I believe the set up is correct.
> 
> I'm doing something wrong or not doing something right <G>
> 
> Any help greatly appreciated.
> 
>  Thanks,
> 
>  Joe
> 
> 
>  Functionality class source code:
> package gov.census.geo.pob.fop.extensions;
> 
> import org.apache.fop.fo.*;
> import org.apache.fop.extensions.*;
> import java.util.Date;
> import java.text.SimpleDateFormat;
> 
> public class TimeDisplay extends ExtensionObj {
>     private String today = (new SimpleDateFormat()).format(new Date());
> 
>     public static class Maker extends FObj.Maker {
>         public FObj make(FObj parent, PropertyList propertyList) {
>             return new TimeDisplay(parent, propertyList);
>         }
>     }
> 
>     public static FObj.Maker maker() {
>         return new TimeDisplay.Maker();
>     }
> 
>     public TimeDisplay(FObj parent, PropertyList propertyList) {
>         super(parent, propertyList);
>     }
> 
>     public String toString(){
>      return (today);
>     }
> }
> 
> 
> ElementMapping subclass source code:
> 
> package gov.census.geo.pob.fop.extensions;
> 
> import org.apache.fop.fo.*;
> import org.apache.fop.fo.properties.ExtensionPropertyMapping;
> import org.apache.fop.fo.TreeBuilder;
> 
> import java.util.Enumeration;
> import java.util.HashMap;
> import java.util.Iterator;
> 
> public class TimeDisplayMapping implements ElementMapping {
> 
>     public final static String URI = "http://jgilvary.geo.census.gov/";
> 
>     private static HashMap foObjs = null;
> 
>     public synchronized void addToBuilder(TreeBuilder builder) {
>         if(foObjs == null) {
>             foObjs = new HashMap();
>             foObjs.put("time", TimeDisplay.maker());
>      }
>         builder.addMapping(URI, foObjs);
> 
>         builder.addPropertyList(URI,
>                                 
> ExtensionPropertyMapping.getGenericMappings
> ());
>         /* Add any element mappings */
>         for (Iterator iter = ExtensionPropertyMapping.getElementMappings
> ().iterator();
>                 iter.hasNext(); ) {
>             String elem = (String)iter.next();
>             builder.addElementPropertyList(URI, elem,
> 
> ExtensionPropertyMapping.getElementMapping(elem));
>         }
>     }
> }
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: fop-dev-unsubscribe@xml.apache.org
> For additional commands, email: fop-dev-help@xml.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-dev-unsubscribe@xml.apache.org
For additional commands, email: fop-dev-help@xml.apache.org