org.codehaus.staxmate.in
Class SMInputCursor

java.lang.Object
  extended by org.codehaus.staxmate.in.SMInputCursor
Direct Known Subclasses:
SMFlatteningCursor, SMHierarchicCursor

public abstract class SMInputCursor
extends java.lang.Object

Base class for reader-side cursors that form the main input-side abstraction offered by StaxMate.

Note: since cursors are thin wrappers around XMLStreamReader2, and since not all Stax implementations implement XMLStreamReader2, some wrapping may be involved.

Author:
Tatu Saloranta

Nested Class Summary
protected static class SMInputCursor.State
           
static class SMInputCursor.Tracking
          This enumeration lists different tracking behaviors available for cursors.
 
Field Summary
protected  int mBaseDepth
          Depth the underlying stream reader had when this cursor was created (which is the number of currently open parent elements).
protected  SMInputCursor mChildCursor
          Cursor that has been opened for iterating child nodes of the start element node this cursor points to.
protected  SMEvent mCurrEvent
           
protected  java.lang.Object mData
          Non-typesafe payload data that applications can use, to pass an extra argument along with cursors.
protected  int mElemCount
          Number of start elements iterated over by this cursor, including the current one.
protected  ElementInfoFactory mElemInfoFactory
          Optional factory instance that is used to create element info objects if element tracking is enabled.
protected  SMInputCursor.Tracking mElemTracking
          Whether element information is to be tracked or not, and if it is, how much of it will be stored.
protected  SMFilter mFilter
          Optional filter object that can be used to filter out events of types caller is not interested in.
protected  int mNodeCount
          Number of nodes iterated over by this cursor, including the current one.
protected  SMElementInfo mParentTrackedElement
          Element that the parent of this cursor tracked (if any), when this cursor was created.
protected  SMInputCursor.State mState
          Current state of the cursor.
protected  org.codehaus.stax2.XMLStreamReader2 mStreamReader
          Underlying stream reader used.
protected  SMElementInfo mTrackedElement
          Element that was last "tracked"; element over which cursor was moved, and of which state has been saved for further use.
protected static SMEvent[] sEventsByIds
          This is the mapping array, indexed by Stax 1.0 event type integer code, value being matching SMEvent enumeration value.
 
Constructor Summary
SMInputCursor(SMInputCursor parent, org.codehaus.stax2.XMLStreamReader2 sr, SMFilter filter)
           
 
Method Summary
 SMInputCursor childCursor()
           
 SMInputCursor childCursor(SMFilter f)
          Method that will create a new nested cursor for iterating over all (immediate) child nodes of the start element this cursor currently points to.
 SMInputCursor childElementCursor()
          Convenience method; equivalent to childCursor(SMFilterFactory.getElementOnlyFilter());
 SMInputCursor childElementCursor(javax.xml.namespace.QName elemName)
          Convenience method; equivalent to childCursor(SMFilterFactory.getElementOnlyFilter(elemName)); Will only return START_ELEMENT and END_ELEMENT events, whose element name matches given qname.
 SMInputCursor childElementCursor(java.lang.String elemLocalName)
          Convenience method; equivalent to childCursor(SMFilterFactory.getElementOnlyFilter(elemName)); Will only return START_ELEMENT and END_ELEMENT events, whose element's local name matches given local name, and that does not belong to a namespace.
 SMInputCursor childMixedCursor()
          Convenience method; equivalent to childCursor(SMFilterFactory.getMixedFilter());
 java.lang.String collectDescendantText(boolean includeIgnorable)
          Method that can collect all text contained within START_ELEMENT currently pointed by this cursor.
protected abstract  SMInputCursor constructChildCursor(SMFilter f)
           
protected abstract  SMInputCursor constructDescendantCursor(SMFilter f)
           
protected  SMElementInfo constructElementInfo(SMElementInfo parent, SMElementInfo prevSibling)
          Method cursor calls when it needs to track element state information; if so, it calls this method to take a snapshot of the element.
protected  java.lang.String currentEventStr()
           
 SMInputCursor descendantCursor()
           
 SMInputCursor descendantCursor(SMFilter f)
          Method that will create a new nested cursor for iterating over all the descendant (children and grandchildren) nodes of the start element this cursor currently points to.
 SMInputCursor descendantElementCursor()
          Convenience method; equivalent to descendantCursor(SMFilterFactory.getElementOnlyFilter());
 SMInputCursor descendantElementCursor(javax.xml.namespace.QName elemName)
          Convenience method; equivalent to descendantCursor(SMFilterFactory.getElementOnlyFilter(elemName)); Will only return START_ELEMENT and END_ELEMENT events, whose element name matches given qname.
 SMInputCursor descendantElementCursor(java.lang.String elemLocalName)
          Convenience method; equivalent to descendantCursor(SMFilterFactory.getElementOnlyFilter(elemLocalName));.
 SMInputCursor descendantMixedCursor()
          Convenience method; equivalent to descendantCursor(SMFilterFactory.getMixedFilter());
protected  int doParseInt(java.lang.String valueStr)
           
protected  int doParseInt(java.lang.String valueStr, int defValue)
           
 int findAttrIndex(java.lang.String uri, java.lang.String localName)
           
 int getAttrCount()
           
 int getAttrIntValue(int index)
           
 int getAttrIntValue(int index, int defValue)
           
 int getAttrIntValue(java.lang.String uri, java.lang.String localName)
           
 int getAttrIntValue(java.lang.String uri, java.lang.String localName, int defValue)
           
 java.lang.String getAttrLocalName(int index)
           
 javax.xml.namespace.QName getAttrName(int index)
           
 java.lang.String getAttrNsUri(int index)
           
 java.lang.String getAttrPrefix(int index)
           
 java.lang.String getAttrValue(int index)
           
 java.lang.String getAttrValue(java.lang.String localName)
          Convenience accessor method to access an attribute that is not in a namespace (has no prefix).
 java.lang.String getAttrValue(java.lang.String uri, java.lang.String localName)
           
protected  int getBaseParentCount()
          This method is needed by flattening cursors when they have child cursors: if so, they can determine their depth relative to child cursor's base parent count (and can not check stream -- as it may have moved -- nor want to have separate field to track this information)
 SMEvent getCurrEvent()
          Returns the type of event this cursor either currently points to (if in valid state), or pointed to (if ever iterated forward), or null if just created.
 int getCurrEventCode()
          Convenience method doing
 java.lang.Object getData()
           
 int getDepth()
          Deprecated. 
 int getElementCount()
           
 ElementInfoFactory getElementInfoFactory()
           
 SMInputCursor.Tracking getElementTracking()
           
 java.lang.String getLocalName()
          For events with fully qualified names (START_ELEMENT, END_ELEMENT, ATTRIBUTE, NAMESPACE), returns the local component of the full name.
 javax.xml.stream.Location getLocation()
           
abstract  SMEvent getNext()
          Main iterating method.
 int getNodeCount()
           
 java.lang.String getNsUri()
           
abstract  int getParentCount()
          Number of parent elements that the token/event cursor points to has, if it points to one.
 SMElementInfo getParentTrackedElement()
           
 java.lang.String getPrefix()
           
 java.lang.String getPrefixedName()
          Returns a String representation of either the fully-qualified name (if the event has full name) or the local name (if event does not have full name but has local name); or if no name available, throws stream exception.
 javax.xml.namespace.QName getQName()
           
protected  java.lang.String getStateDesc()
           
 org.codehaus.stax2.XMLStreamReader2 getStreamReader()
          Method that can be used to get direct access to the underlying stream reader.
 java.lang.String getText()
          Method that can be used when this cursor points to a textual event; something for which XMLStreamReader.getText() can be called.
 SMElementInfo getTrackedElement()
           
 boolean hasLocalName(java.lang.String expName)
           
 boolean hasName(java.lang.String expNsURI, java.lang.String expLN)
           
protected  void invalidate()
          Method called by the parent cursor, to indicate it has to traverse over xml content and that child cursor as well as all of its descendant cursors (if any) are to be considered invalid.
protected  boolean isRootCursor()
           
protected  java.lang.String notAccessible(java.lang.String method)
           
 void processDescendantText(java.io.Writer w, boolean includeIgnorable)
          Method similar to collectDescendantText(boolean), but will write the text to specified Writer instead of collecting it into a String.
 boolean readerAccessible()
           
protected  void rewindPastChild()
          Method called to skim through the content that the child cursor(s) are pointing to, end return once next call to XMLStreamReader2.next() will return the next event this cursor should see.
 void setData(java.lang.Object o)
           
 void setElementInfoFactory(ElementInfoFactory f)
           
 void setElementTracking(SMInputCursor.Tracking tracking)
          Changes tracking mode of this cursor to the new specified mode.
 void setFilter(SMFilter f)
           
protected  void throwUnexpectedEndDoc()
           
protected  void throwWrongEndElem(int expDepth, int actDepth)
           
protected  void throwXsEx(java.lang.String msg)
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

sEventsByIds

protected static final SMEvent[] sEventsByIds
This is the mapping array, indexed by Stax 1.0 event type integer code, value being matching SMEvent enumeration value.


mStreamReader

protected final org.codehaus.stax2.XMLStreamReader2 mStreamReader
Underlying stream reader used. It will either be a native XMLStreamReader2 instance, or a regular (Stax 1.0) XMLStreamReader wrapped in an adapter.


mFilter

protected SMFilter mFilter
Optional filter object that can be used to filter out events of types caller is not interested in.


mElemTracking

protected SMInputCursor.Tracking mElemTracking
Whether element information is to be tracked or not, and if it is, how much of it will be stored. See SMInputCursor.Tracking for details.


mElemInfoFactory

protected ElementInfoFactory mElemInfoFactory
Optional factory instance that is used to create element info objects if element tracking is enabled. If null, will use default generation mechanism, implemented by SMInputCursor itself.

Note that by default, this factory will be passed down to child and descendant cursors this cursor creates, so usually one only needs to set the factory of the root cursor.


mCurrEvent

protected SMEvent mCurrEvent

mState

protected SMInputCursor.State mState
Current state of the cursor.


mNodeCount

protected int mNodeCount
Number of nodes iterated over by this cursor, including the current one.


mElemCount

protected int mElemCount
Number of start elements iterated over by this cursor, including the current one.


mBaseDepth

protected final int mBaseDepth
Depth the underlying stream reader had when this cursor was created (which is the number of currently open parent elements). 0 only for root cursor.


mTrackedElement

protected SMElementInfo mTrackedElement
Element that was last "tracked"; element over which cursor was moved, and of which state has been saved for further use. At this point, it can be null if no elements have yet been iterater over. Alternatively, if it's not null, it may be currently pointed to or not; if it's not, either child cursor is active, or this cursor points to a non-start-element node.


mParentTrackedElement

protected SMElementInfo mParentTrackedElement
Element that the parent of this cursor tracked (if any), when this cursor was created.


mChildCursor

protected SMInputCursor mChildCursor
Cursor that has been opened for iterating child nodes of the start element node this cursor points to. Needed to keep cursor hierarchy synchronized, independent of which ones are traversed.


mData

protected java.lang.Object mData
Non-typesafe payload data that applications can use, to pass an extra argument along with cursors. Not used by the framework itself for anything.

Constructor Detail

SMInputCursor

public SMInputCursor(SMInputCursor parent,
                     org.codehaus.stax2.XMLStreamReader2 sr,
                     SMFilter filter)
Method Detail

setFilter

public final void setFilter(SMFilter f)

setElementTracking

public final void setElementTracking(SMInputCursor.Tracking tracking)
Changes tracking mode of this cursor to the new specified mode. Default mode for cursors is the one their parent uses; SMInputCursor.Tracking.NONE for root cursors with no parent.


getElementTracking

public final SMInputCursor.Tracking getElementTracking()

setElementInfoFactory

public final void setElementInfoFactory(ElementInfoFactory f)

getElementInfoFactory

public final ElementInfoFactory getElementInfoFactory()

getNodeCount

public int getNodeCount()
Returns:
Number of nodes cursor has traversed (including ones filtered out). Starts with 0, and is incremented each time underlying stream reader's XMLStreamReader.next() method is called, but not counting child cursors' node counts.

getElementCount

public int getElementCount()
Returns:
Number of start elements cursor has traversed (including ones filtered out). Starts with 0, and is incremented each time underlying stream reader's XMLStreamReader.next() method is called and has moved over a start element, but not counting child cursors' element counts.

getDepth

@Deprecated
public final int getDepth()
Deprecated. 


getParentCount

public abstract int getParentCount()
Number of parent elements that the token/event cursor points to has, if it points to one. If not, either most recent valid parent count (if cursor is closed), or the depth that it will have once is is advanced. One practical result is that a nested cursor instance will always have a single constant value it returns, whereas flattening cursors can return different values during traversal. Another thing to notice that matching START_ELEMENT and END_ELEMENT will always correspond to the same parent count.

For example, here are expected return values for an example XML document:

  <!-- Comment outside tree --> [0]
  <root> [0]
    Text [1]
    <branch> [1]
      Inner text [2]
      <child /> [2]/[2]
    </branch> [1]
  </root> [0]
Numbers in bracket are depths that would be returned when the cursor points to the node.

Note: depths are different from what many other xml processing APIs (such as Stax and XmlPull)return.

Returns:
Number of enclosing nesting levels, ie. number of parent start elements for the node that cursor currently points to (or, in case of initial state, that it will point to if scope has node(s)).

getCurrEvent

public SMEvent getCurrEvent()
Returns the type of event this cursor either currently points to (if in valid state), or pointed to (if ever iterated forward), or null if just created.

Returns:
Type of event this cursor points to, if it currently points to one, or last one it pointed to otherwise (if ever pointed to a valid event), or null if neither.

getCurrEventCode

public int getCurrEventCode()
Convenience method doing


getTrackedElement

public SMElementInfo getTrackedElement()
Returns:
Information about last "tracked" element; element we have last iterated over when tracking has been enabled.

getParentTrackedElement

public SMElementInfo getParentTrackedElement()
Returns:
Information about the tracked element the parent cursor had, if parent cursor existed and was tracking element information.

readerAccessible

public final boolean readerAccessible()

getStreamReader

public final org.codehaus.stax2.XMLStreamReader2 getStreamReader()
Method that can be used to get direct access to the underlying stream reader. This is usually needed to access some of less often needed accessors for which there is no convenience method in StaxMate API.

Returns:
Stream reader the cursor uses for getting XML events

getLocation

public javax.xml.stream.Location getLocation()
                                      throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getText

public java.lang.String getText()
                         throws javax.xml.stream.XMLStreamException
Method that can be used when this cursor points to a textual event; something for which XMLStreamReader.getText() can be called. Note that it does not advance the cursor, or combine multiple textual events.

Returns:
Textual content of the current event that this cursor points to, if any
Throws:
javax.xml.stream.XMLStreamException - if either the underlying parser has problems (possibly including event type not being of textual type, see Stax 1.0 specs for details); or if this cursor does not currently point to an event.

collectDescendantText

public java.lang.String collectDescendantText(boolean includeIgnorable)
                                       throws javax.xml.stream.XMLStreamException
Method that can collect all text contained within START_ELEMENT currently pointed by this cursor. Collection is done recursively through all descendant text (CHARACTER, CDATA; optionally SPACE) nodes, ignoring nodes of other types. After collecting text, cursor will be positioned at the END_ELEMENT matching initial START_ELEMENT and thus needs to be advanced to access the next sibling event.

Parameters:
includeIgnorable - Whether text for events of type SPACE should be ignored in the results or not. If false, SPACE events will be skipped; if true, white space will be included in results.
Throws:
javax.xml.stream.XMLStreamException

processDescendantText

public void processDescendantText(java.io.Writer w,
                                  boolean includeIgnorable)
                           throws java.io.IOException,
                                  javax.xml.stream.XMLStreamException
Method similar to collectDescendantText(boolean), but will write the text to specified Writer instead of collecting it into a String.

Parameters:
w - Writer to use for outputting text found
includeIgnorable - Whether text for events of type SPACE should be ignored in the results or not. If false, SPACE events will be skipped; if true, white space will be included in results.
Throws:
java.io.IOException
javax.xml.stream.XMLStreamException

getQName

public javax.xml.namespace.QName getQName()
                                   throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getLocalName

public java.lang.String getLocalName()
                              throws javax.xml.stream.XMLStreamException
For events with fully qualified names (START_ELEMENT, END_ELEMENT, ATTRIBUTE, NAMESPACE), returns the local component of the full name. For events with only non-qualified name (PROCESSING_INSTRUCTION, entity and notation declarations, references), returns the name. For other events, returns null.

Returns:
Local component of the name
Throws:
javax.xml.stream.XMLStreamException

getPrefix

public java.lang.String getPrefix()
                           throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getNsUri

public java.lang.String getNsUri()
                          throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getPrefixedName

public java.lang.String getPrefixedName()
                                 throws javax.xml.stream.XMLStreamException
Returns a String representation of either the fully-qualified name (if the event has full name) or the local name (if event does not have full name but has local name); or if no name available, throws stream exception.

Throws:
javax.xml.stream.XMLStreamException

hasLocalName

public boolean hasLocalName(java.lang.String expName)
                     throws javax.xml.stream.XMLStreamException
Returns:
True if the local name associated with the event this
Throws:
javax.xml.stream.XMLStreamException

hasName

public boolean hasName(java.lang.String expNsURI,
                       java.lang.String expLN)
                throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrCount

public int getAttrCount()
                 throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

findAttrIndex

public int findAttrIndex(java.lang.String uri,
                         java.lang.String localName)
                  throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrName

public javax.xml.namespace.QName getAttrName(int index)
                                      throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrLocalName

public java.lang.String getAttrLocalName(int index)
                                  throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrPrefix

public java.lang.String getAttrPrefix(int index)
                               throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrNsUri

public java.lang.String getAttrNsUri(int index)
                              throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrValue

public java.lang.String getAttrValue(int index)
                              throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrValue

public java.lang.String getAttrValue(java.lang.String localName)
                              throws javax.xml.stream.XMLStreamException
Convenience accessor method to access an attribute that is not in a namespace (has no prefix).

Throws:
javax.xml.stream.XMLStreamException

getAttrValue

public java.lang.String getAttrValue(java.lang.String uri,
                                     java.lang.String localName)
                              throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrIntValue

public int getAttrIntValue(int index)
                    throws java.lang.NumberFormatException,
                           javax.xml.stream.XMLStreamException
Throws:
java.lang.NumberFormatException
javax.xml.stream.XMLStreamException

getAttrIntValue

public int getAttrIntValue(java.lang.String uri,
                           java.lang.String localName)
                    throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getAttrIntValue

public int getAttrIntValue(int index,
                           int defValue)
                    throws java.lang.NumberFormatException,
                           javax.xml.stream.XMLStreamException
Throws:
java.lang.NumberFormatException
javax.xml.stream.XMLStreamException

getAttrIntValue

public int getAttrIntValue(java.lang.String uri,
                           java.lang.String localName,
                           int defValue)
                    throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getData

public java.lang.Object getData()

setData

public void setData(java.lang.Object o)

getNext

public abstract SMEvent getNext()
                         throws javax.xml.stream.XMLStreamException
Main iterating method.

Returns:
Type of event (from XMLStreamConstants, such as XMLStreamConstants.START_ELEMENT, if a new node was iterated over; null when there are no more nodes this cursor can iterate over.
Throws:
javax.xml.stream.XMLStreamException

childCursor

public SMInputCursor childCursor(SMFilter f)
                          throws javax.xml.stream.XMLStreamException
Method that will create a new nested cursor for iterating over all (immediate) child nodes of the start element this cursor currently points to. If cursor does not point to a start element, it will throw IllegalStateException; if it does not support concept of child cursors, it will throw UnsupportedOperationException

Parameters:
f - Filter child cursor is to use for filtering out 'unwanted' nodes; may be null for no filtering
Throws:
java.lang.IllegalStateException - If cursor can not be created due to the state cursor is in.
java.lang.UnsupportedOperationException - If cursor does not allow creation of child cursors.
javax.xml.stream.XMLStreamException

childCursor

public final SMInputCursor childCursor()
                                throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

descendantCursor

public SMInputCursor descendantCursor(SMFilter f)
                               throws javax.xml.stream.XMLStreamException
Method that will create a new nested cursor for iterating over all the descendant (children and grandchildren) nodes of the start element this cursor currently points to. If cursor does not point to a start element, it will throw IllegalStateException; if it does not support concept of descendant cursors, it will throw UnsupportedOperationException

Throws:
java.lang.IllegalStateException - If cursor can not be created due to the state cursor is in (or for some cursors, if they never allow creating such cursors)
java.lang.UnsupportedOperationException - If cursor does not allow creation of descendant cursors.
javax.xml.stream.XMLStreamException

descendantCursor

public final SMInputCursor descendantCursor()
                                     throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

childElementCursor

public final SMInputCursor childElementCursor()
                                       throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to childCursor(SMFilterFactory.getElementOnlyFilter());

Throws:
javax.xml.stream.XMLStreamException

childElementCursor

public final SMInputCursor childElementCursor(javax.xml.namespace.QName elemName)
                                       throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to childCursor(SMFilterFactory.getElementOnlyFilter(elemName)); Will only return START_ELEMENT and END_ELEMENT events, whose element name matches given qname.

Throws:
javax.xml.stream.XMLStreamException

childElementCursor

public final SMInputCursor childElementCursor(java.lang.String elemLocalName)
                                       throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to childCursor(SMFilterFactory.getElementOnlyFilter(elemName)); Will only return START_ELEMENT and END_ELEMENT events, whose element's local name matches given local name, and that does not belong to a namespace.

Throws:
javax.xml.stream.XMLStreamException

descendantElementCursor

public final SMInputCursor descendantElementCursor()
                                            throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to descendantCursor(SMFilterFactory.getElementOnlyFilter());

Throws:
javax.xml.stream.XMLStreamException

descendantElementCursor

public final SMInputCursor descendantElementCursor(javax.xml.namespace.QName elemName)
                                            throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to descendantCursor(SMFilterFactory.getElementOnlyFilter(elemName)); Will only return START_ELEMENT and END_ELEMENT events, whose element name matches given qname.

Throws:
javax.xml.stream.XMLStreamException

descendantElementCursor

public final SMInputCursor descendantElementCursor(java.lang.String elemLocalName)
                                            throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to descendantCursor(SMFilterFactory.getElementOnlyFilter(elemLocalName));. Will only return START_ELEMENT and END_ELEMENT events, whose element local name matches given local name, and that do not belong to a namespace

Throws:
javax.xml.stream.XMLStreamException

childMixedCursor

public final SMInputCursor childMixedCursor()
                                     throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to childCursor(SMFilterFactory.getMixedFilter());

Throws:
javax.xml.stream.XMLStreamException

descendantMixedCursor

public final SMInputCursor descendantMixedCursor()
                                          throws javax.xml.stream.XMLStreamException
Convenience method; equivalent to descendantCursor(SMFilterFactory.getMixedFilter());

Throws:
javax.xml.stream.XMLStreamException

getBaseParentCount

protected final int getBaseParentCount()
This method is needed by flattening cursors when they have child cursors: if so, they can determine their depth relative to child cursor's base parent count (and can not check stream -- as it may have moved -- nor want to have separate field to track this information)


rewindPastChild

protected final void rewindPastChild()
                              throws javax.xml.stream.XMLStreamException
Method called to skim through the content that the child cursor(s) are pointing to, end return once next call to XMLStreamReader2.next() will return the next event this cursor should see.

Throws:
javax.xml.stream.XMLStreamException

invalidate

protected void invalidate()
                   throws javax.xml.stream.XMLStreamException
Method called by the parent cursor, to indicate it has to traverse over xml content and that child cursor as well as all of its descendant cursors (if any) are to be considered invalid.

Throws:
javax.xml.stream.XMLStreamException

constructElementInfo

protected SMElementInfo constructElementInfo(SMElementInfo parent,
                                             SMElementInfo prevSibling)
                                      throws javax.xml.stream.XMLStreamException
Method cursor calls when it needs to track element state information; if so, it calls this method to take a snapshot of the element.

Note caller already suppresses calls so that this method is only called when information needs to be preserved. Further, previous element is only passed if such linkage is to be preserved (reason for not always doing it is the increased memory usage).

Finally, note that this method does NOT implement ElementInfoFactory, as its signature does not include the cursor argument, as that's passed as this pointer already.

Throws:
javax.xml.stream.XMLStreamException

constructChildCursor

protected abstract SMInputCursor constructChildCursor(SMFilter f)
                                               throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

constructDescendantCursor

protected abstract SMInputCursor constructDescendantCursor(SMFilter f)
                                                    throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

doParseInt

protected int doParseInt(java.lang.String valueStr)
                  throws java.lang.NumberFormatException
Throws:
java.lang.NumberFormatException

doParseInt

protected int doParseInt(java.lang.String valueStr,
                         int defValue)

isRootCursor

protected final boolean isRootCursor()

notAccessible

protected java.lang.String notAccessible(java.lang.String method)
                                  throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

getStateDesc

protected java.lang.String getStateDesc()

currentEventStr

protected java.lang.String currentEventStr()
Returns:
Human-readable description of the underlying Stax event this cursor points to.

throwUnexpectedEndDoc

protected void throwUnexpectedEndDoc()
                              throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

throwWrongEndElem

protected void throwWrongEndElem(int expDepth,
                                 int actDepth)
                          throws java.lang.IllegalStateException
Throws:
java.lang.IllegalStateException

throwXsEx

protected void throwXsEx(java.lang.String msg)
                  throws javax.xml.stream.XMLStreamException
Throws:
javax.xml.stream.XMLStreamException

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object