Class BuilderContext

java.lang.Object
org.apache.fop.render.rtf.rtflib.tools.BuilderContext

public class BuilderContext extends Object

A BuilderContext holds context information when building an RTF document.

This class was originally developed by Bertrand Delacretaz bdelacretaz@codeconsult.ch for the JFOR project and is now integrated into FOP.

This work was authored by Bertrand Delacretaz (bdelacretaz@codeconsult.ch), Andreas Putz (a.putz@skynamics.com), and Peter Herweg (pherweg@web.de).

  • Field Details

    • LOG

      protected static final org.apache.commons.logging.Log LOG
      Static logging instance
    • containers

      private final Stack containers
      stack of RtfContainers
    • tableContexts

      private final Stack tableContexts
      stack of TableContexts
    • builders

      private final Stack builders
      stack of IBuilders
    • options

      private IRtfOptions options
      Rtf options
  • Constructor Details

    • BuilderContext

      public BuilderContext(IRtfOptions rtfOptions)
      Construct a builder context.
      Parameters:
      rtfOptions - some options
  • Method Details

    • getObjectFromStack

      private Object getObjectFromStack(Stack s, Class desiredClass)
      find first object of given class from top of stack s
      Returns:
      null if not found
    • getContainer

      public RtfContainer getContainer(Class containerClass, boolean required, Object forWhichBuilder) throws RtfException
      Find the "nearest" container that implements the given interface on our stack.
      Parameters:
      containerClass - class of container
      required - if true, ConverterException is thrown if no container found
      forWhichBuilder - used in error message if container not found
      Returns:
      the container
      Throws:
      RtfException - if not caught
    • pushContainer

      public void pushContainer(RtfContainer c)
      Push an RtfContainer on our stack.
      Parameters:
      c - the container
    • pushPart

      public void pushPart(FObj part)
      Push a Class representing a non-writeable section of the FO tree
      Parameters:
      part - the part
    • replaceContainer

      public void replaceContainer(RtfContainer oldC, RtfContainer newC) throws Exception
      In some cases an RtfContainer must be replaced by another one on the stack. This happens when handling nested fo:blocks for example: after handling a nested block the enclosing block must switch to a new paragraph container to handle what follows the nested block. TODO: what happens to elements that are "more on top" than oldC on the stack? shouldn't they be closed or something?
      Parameters:
      oldC - old container
      newC - new container
      Throws:
      Exception - if not caught
    • popContainer

      public void popContainer(Class containerClass, RTFHandler handler)
      pop the topmost RtfContainer from our stack
    • popPart

      public void popPart(Class part, RTFHandler handler)
      pop the topmost part class from our stack
    • handlePop

      private void handlePop(Class aClass, RTFHandler handler)
      This method checks for any tag mismatches between what is being closed and what exists on the stack. If a mismatch is found, then it will push the object back onto the stack and attempt to close the given section before retrying with the current pop task.
      Parameters:
      aClass - The class to be popped from the stack
      handler - The RTF handler class to fix any mismatches
    • pushAndClose

      private void pushAndClose(Class aClass, Object object, RTFHandler handler)
    • getTableContext

      public TableContext getTableContext()
      Returns:
      the current TableContext
    • pushTableContext

      public void pushTableContext(TableContext tc)
      Push a TableContext to our stack.
      Parameters:
      tc - the table context
    • popTableContext

      public void popTableContext()
      Pop a TableContext from our stack.