org.codehaus.staxmate.out
Class SMBufferedFragment

java.lang.Object
  extended by org.codehaus.staxmate.out.SMOutputtable
      extended by org.codehaus.staxmate.out.SMOutputContainer
          extended by org.codehaus.staxmate.out.SMBufferedFragment
All Implemented Interfaces:
SMBufferable

public final class SMBufferedFragment
extends SMOutputContainer
implements SMBufferable

Buffered fragment; starts its life buffered, so that its content are not automatically written to the underlying stream, but only when buffered instance is released. Once released, can not be buffered again.


Field Summary
protected static int LAST_BLOCKED
           
protected static int LAST_BUFFERED
           
protected  int mState
          All instances are initially buffered; state will be changed when instance is released (and further on with other changes)
protected static int STATE_BLOCKED
           
protected static int STATE_BUFFERED
           
protected static int STATE_BUFFERED_AND_BLOCKED
           
protected static int STATE_CLOSED
           
protected static int STATE_OPEN
           
 
Fields inherited from class org.codehaus.staxmate.out.SMOutputtable
mNext
 
Constructor Summary
protected SMBufferedFragment(SMOutputContext ctxt)
           
 
Method Summary
 boolean canOutputNewChild()
          Method called to figure out if we can just output a newly added child, without any buffering.
protected  void childReleased(SMOutputtable child)
          Method called by a child, when it is released and neither is or contains any buffered entities.
protected  boolean doOutput(SMOutputContext ctxt, boolean canClose)
          Method called to request that the entity output itself; either as much as it can without closing, or as much as it can if it is to get closed.
protected  void forceOutput(SMOutputContext ctxt)
          Method similar to SMOutputtable.doOutput(org.codehaus.staxmate.out.SMOutputContext, boolean), except that this method will always succeed in doing the output.
 void getPath(java.lang.StringBuilder sb)
           
 boolean isBuffered()
           
 void linkParent(SMOutputContainer parent, boolean blocked)
          Method called by a container when bufferable item is linked as its child.
 void release()
          Method called to signal that the node need not be buffered any more (if not required to do so by parent/children restrictions)
 
Methods inherited from class org.codehaus.staxmate.out.SMOutputContainer
addAndReleaseBuffered, addBuffered, addCData, addCData, addCharacters, addCharacters, addCharacters, addComment, addElement, addElement, addEntityRef, addProcessingInstruction, closeAllButLastChild, closeAndOutputChildren, createBufferedElement, createBufferedFragment, forceChildOutput, getContext, getNamespace, getNamespace, getParent, getPath, linkNewChild, setIndentation, throwBuffered, throwClosed, throwRelinking
 
Methods inherited from class org.codehaus.staxmate.out.SMOutputtable
getNext, linkNext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

STATE_BUFFERED_AND_BLOCKED

protected static final int STATE_BUFFERED_AND_BLOCKED
See Also:
Constant Field Values

STATE_BUFFERED

protected static final int STATE_BUFFERED
See Also:
Constant Field Values

STATE_BLOCKED

protected static final int STATE_BLOCKED
See Also:
Constant Field Values

STATE_OPEN

protected static final int STATE_OPEN
See Also:
Constant Field Values

STATE_CLOSED

protected static final int STATE_CLOSED
See Also:
Constant Field Values

LAST_BUFFERED

protected static final int LAST_BUFFERED
See Also:
Constant Field Values

LAST_BLOCKED

protected static final int LAST_BLOCKED
See Also:
Constant Field Values

mState

protected int mState
All instances are initially buffered; state will be changed when instance is released (and further on with other changes)

Constructor Detail

SMBufferedFragment

protected SMBufferedFragment(SMOutputContext ctxt)
Method Detail

isBuffered

public boolean isBuffered()
Specified by:
isBuffered in interface SMBufferable
Returns:
True if this object is still buffered; false if not

linkParent

public void linkParent(SMOutputContainer parent,
                       boolean blocked)
                throws javax.xml.stream.XMLStreamException
Description copied from interface: SMBufferable
Method called by a container when bufferable item is linked as its child. It should not only add parent linkage, but also do any output necessary, if this item is not buffered or blocked.

Specified by:
linkParent in interface SMBufferable
Parameters:
parent - Container to attach bufferable instance under
blocked - If true, parent output is blocked (and as the result so is bufferable's); if false, parent is (and will remain) unblocked.
Throws:
javax.xml.stream.XMLStreamException

release

public void release()
             throws javax.xml.stream.XMLStreamException
Description copied from interface: SMBufferable
Method called to signal that the node need not be buffered any more (if not required to do so by parent/children restrictions)

Specified by:
release in interface SMBufferable
Throws:
javax.xml.stream.XMLStreamException

childReleased

protected void childReleased(SMOutputtable child)
                      throws javax.xml.stream.XMLStreamException
Description copied from class: SMOutputContainer
Method called by a child, when it is released and neither is or contains any buffered entities. This should indicate that it can be output unless one of its parents or preceding siblings is buffered. Container is expected to update its own state, and then inform its own parent (if necesary) about release; this may cascade output from parents up the container stack.

Specified by:
childReleased in class SMOutputContainer
Parameters:
child - Child node that now neither is nor contains any buffered nodes.
Throws:
javax.xml.stream.XMLStreamException

doOutput

protected boolean doOutput(SMOutputContext ctxt,
                           boolean canClose)
                    throws javax.xml.stream.XMLStreamException
Description copied from class: SMOutputtable
Method called to request that the entity output itself; either as much as it can without closing, or as much as it can if it is to get closed. In both cases output can fail or be only a partial one: buffered nodes will not be output at all, and nodes with buffered children can only be partially output.

Specified by:
doOutput in class SMOutputContainer
Parameters:
ctxt - Output context to use for outputting this node (and its contents)
canClose - If true, indicates that the node can (and should) be fully closed if possible. This (passing true) is usually done when a new sibling is added after a node (element/fragment); if so, current one should be recursively closed. If false, should only try to output as much as can be done without forcing closures.
Returns:
True if the whole node could be output, ie. neither it nor its children are buffered.
Throws:
javax.xml.stream.XMLStreamException

forceOutput

protected void forceOutput(SMOutputContext ctxt)
                    throws javax.xml.stream.XMLStreamException
Description copied from class: SMOutputtable
Method similar to SMOutputtable.doOutput(org.codehaus.staxmate.out.SMOutputContext, boolean), except that this method will always succeed in doing the output. Specifically, it will force all buffered nodes to be unbuffered, and then output.

Specified by:
forceOutput in class SMOutputContainer
Throws:
javax.xml.stream.XMLStreamException

canOutputNewChild

public boolean canOutputNewChild()
                          throws javax.xml.stream.XMLStreamException
Description copied from class: SMOutputContainer
Method called to figure out if we can just output a newly added child, without any buffering. It will request container to close and output all non-buffered children it has, if any; and indicate whether it was fully succesful or not.

Specified by:
canOutputNewChild in class SMOutputContainer
Returns:
True if all children (if any) were completely output; false if there was at least one buffered child that couldn't be output.
Throws:
javax.xml.stream.XMLStreamException

getPath

public void getPath(java.lang.StringBuilder sb)
Specified by:
getPath in class SMOutputContainer