org.codehaus.staxmate.out
Class SMRootFragment

java.lang.Object
  extended by org.codehaus.staxmate.out.SMOutputtable
      extended by org.codehaus.staxmate.out.SMOutputContainer
          extended by org.codehaus.staxmate.out.SMRootFragment
Direct Known Subclasses:
SMOutputDocument

public class SMRootFragment
extends SMOutputContainer

Concrete non-buffered fragment (== container) class used as the root level output container. Root-level does not necessarily have to mean XML root level; it may also be a child context of a stream writer in which StaxMate is only used to output specific sub-trees. This class is also used as the base for the outputter that models a complete document.


Field Summary
protected  boolean _active
          Simple state flag; children can only be added when root container is still active.
 
Fields inherited from class org.codehaus.staxmate.out.SMOutputtable
_next
 
Constructor Summary
SMRootFragment(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  void _forceOutput(SMOutputContext ctxt)
          Method similar to SMOutputtable._output(org.codehaus.staxmate.out.SMOutputContext, boolean), except that this method will always succeed in doing the output.
protected  boolean _output(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.
 void closeRoot()
          Method that HAS to be called when all additions have been done via StaxMate API.
 void closeRootAndWriter()
           
 void getPath(java.lang.StringBuilder sb)
          Method that can be called to get an XPath like description of the relative location of this output node, starting from root.
 
Methods inherited from class org.codehaus.staxmate.out.SMOutputContainer
_closeAllButLastChild, _closeAndOutputChildren, _forceChildOutput, _linkNewChild, _throwClosed, _throwRelinking, _verifyNamespaceArg, addAndReleaseBuffered, addBuffered, addCData, addCData, addCharacters, addCharacters, addComment, addElement, addElement, addElementWithCharacters, addEntityRef, addProcessingInstruction, addValue, addValue, addValue, addValue, createBufferedElement, createBufferedFragment, getContext, getNamespace, getNamespace, getParent, getPath, setIndentation
 
Methods inherited from class org.codehaus.staxmate.out.SMOutputtable
_linkNext, getNext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_active

protected boolean _active
Simple state flag; children can only be added when root container is still active.

Constructor Detail

SMRootFragment

public SMRootFragment(SMOutputContext ctxt)
Method Detail

_output

protected boolean _output(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:
_output 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._output(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

_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

_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)
Description copied from class: SMOutputContainer
Method that can be called to get an XPath like description of the relative location of this output node, starting from root. Path will be appended to given StringBuilder.

Specified by:
getPath in class SMOutputContainer

closeRoot

public void closeRoot()
               throws javax.xml.stream.XMLStreamException
Method that HAS to be called when all additions have been done via StaxMate API. Since it is possible that the underlying stream writer may be buffering some parts, it needs to be informed of the closure.

Note that the underlying stream is NOT closed as part of this call, just this logical outputter object. If you do want the underlying writer to be closed too, call closeRootAndWriter() instead.

Throws:
javax.xml.stream.XMLStreamException

closeRootAndWriter

public void closeRootAndWriter()
                        throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException