pbwest      2004/01/14 06:40:19

  Modified:    src/java/org/apache/fop/fo Tag: FOP_0-20-0_Alt-Design
                        FObjects.java
  Log:
  defaultConstructorArgs moved here from FONode
  Method makeFlowObject overridden by version with
  XMLEvent event signature, used when it is possible the
  event is a XMLEvent of type CHARACTERS, as opposed
  to an FoXMLEvent.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.4   +67 -4     xml-fop/src/java/org/apache/fop/fo/Attic/FObjects.java
  
  Index: FObjects.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/Attic/FObjects.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- FObjects.java     5 Jan 2004 02:53:04 -0000       1.1.2.3
  +++ FObjects.java     14 Jan 2004 14:40:19 -0000      1.1.2.4
  @@ -62,7 +62,9 @@
   
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.datatypes.Ints;
  +import org.apache.fop.fo.flow.FoPcdata;
   import org.apache.fop.xml.FoXMLEvent;
  +import org.apache.fop.xml.XMLEvent;
   
   /**
    * Data class for common data and methods relating to Flow Objects.
  @@ -130,6 +132,24 @@
                           = new Constructor[FObjectNames.foLocalNamesLength];
   
       /**
  +     * The default constructor arguments for an FObject. <b>N.B.</b> not
  +     * all subclasses of <tt>FONode</tt> use this constructor; e.g.
  +     * <tt>FoRoot</tt>, <tt>FoPageSequence</tt> &amp; <tt>FoFlow</tt>.
  +     * Generally these FObjects are not invoked through reflection.  If such
  +     * invocation becomes necessary for a particular class, a contructor of
  +     * this kind must be added to the class.
  +     * <p>At present, the only difference is in the addition of the
  +     * <tt>int.class</tt> constructor argument.
  +     */
  +    protected static final Class[] defaultConstructorArgs =
  +        new Class[] {
  +            FOTree.class
  +            ,FONode.class
  +            ,FoXMLEvent.class
  +            ,int.class
  +    };
  +    
  +    /**
        * A HashMap whose elements are an integer index value keyed by an
        * fo local name.  The index value is the index of the fo local name in
        * the FObjectNames.foLocalNames[] array.
  @@ -207,6 +227,18 @@
           }
       }
   
  +    /**
  +     * This method generates generates new FO objects, except for FoPcdata
  +     * objects, which require an XMLEvent argument.  Use only when it is
  +     * known that no CHARACTERS event will be passed.
  +     * @param foTree
  +     * @param parent
  +     * @param event the <code>FoXMLEvent</code> event that triggered the
  +     * generation of this FO
  +     * @param stateFlags
  +     * @return the new FO node
  +     * @throws FOPException
  +     */
       public Object makeFlowObject(FOTree foTree,
                                FONode parent, FoXMLEvent event, int stateFlags)
           throws FOPException
  @@ -225,7 +257,7 @@
                   // Generate the constructor object
                   foclass = Class.forName(foPkgClassNames[foType]);
                   foConstructors[foType] =
  -                        foclass.getConstructor(FONode.defaultConstructorArgs);
  +                        foclass.getConstructor(defaultConstructorArgs);
               }
               // Now generate a new instance
               return foConstructors[foType].newInstance(args);
  @@ -240,6 +272,37 @@
           } catch (InvocationTargetException e) {
               throw new FOPException(e);
           }
  +    }
  +
  +    /**
  +     * This method generates generates new FO objects, including FoPcdata
  +     * objects.  It is more general in this sense than the overloaded
  +     * version which takes the <code>FoXMLEvent event</code> parameter.
  +     * objects, which require an XMLEvent argument.
  +     * @param foTree
  +     * @param parent
  +     * @param event the <code>XMLEvent</code> which triggered the generation
  +     * of this fo
  +     * @param stateFlags
  +     * @return
  +     * @throws FOPException
  +     */
  +    public Object makeFlowObject(FOTree foTree,
  +            FONode parent, XMLEvent event, int stateFlags)
  +    throws FOPException
  +    {
  +        if (event instanceof FoXMLEvent) {
  +            return makeFlowObject(
  +                    foTree, parent, (FoXMLEvent)event, stateFlags);
  +        }
  +        if (event.getType() != XMLEvent.CHARACTERS) {
  +            throw new FOPException(
  +                    "Attempt to makeFlowObject() with XMLEvent for event type "
  +                    + XMLEvent.eventTypeName(event.getType()));
  +        }
  +        int foType = FObjectNames.PCDATA;
  +
  +        return new FoPcdata(foTree, parent, event, stateFlags);
       }
   
       public static int getFoIndex(String name) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to