com.ctc.wstx.sr
Class AttributeCollector

java.lang.Object
  extended by com.ctc.wstx.sr.AttributeCollector

public final class AttributeCollector
extends Object

Shared base class that defines API stream reader uses to communicate with the attribute collector implementation, independent of whether it's operating in namespace-aware or non-namespace modes. Collector class is used to build up attribute lists; for the most part will just hold references to few specialized TextBuilders that are used to create efficient semi-shared value Strings.


Field Summary
protected static int EXP_ATTR_COUNT
          Expected typical maximum number of attributes for any element; chosen to minimize need to resize, while trying not to waste space.
protected static int EXP_NS_COUNT
           
protected static int LONG_ATTR_LIST_LEN
          Threshold value that indicates minimum length for lists instances that need a Map structure, for fast attribute access by fully-qualified name.
protected  int mAttrCount
          Actual number of attributes collected, including attributes added via default values.
protected  int mAttrHashSize
          Size of hash area in mAttrMap; generally at least 20% more than number of attributes (mAttrCount).
protected  com.ctc.wstx.sr.Attribute[] mAttributes
          Array of attributes collected for this element.
protected  int[] mAttrMap
          Encoding of a data structure that contains mapping from attribute names to attribute index in main attribute name arrays.
protected  int mAttrSpillEnd
          Pointer to int slot right after last spill entr, in mAttrMap array.
protected  boolean mDefaultNsDeclared
          Flag to indicate whether the default namespace has already been declared for the current element.
protected  com.ctc.wstx.sr.Attribute[] mNamespaces
          Array of namespace declaration attributes collected for this element; not used in non-namespace-aware mode
protected  int mNonDefCount
          Number of attribute values actually parsed, not including ones created via default value expansion.
protected  int mNsCount
          Number of valid namespace declarations in mNamespaces.
protected  TextBuilder mValueBuilder
          TextBuilder into which values of all attributes are appended to, including default valued ones (defaults are added after explicit ones).
protected  int mXmlIdAttrIndex
          Index of "xml:id" attribute, if one exists for the current element; XMLID_IX_NONE if none.
protected static InternCache sInternCache
           
protected static int XMLID_IX_DISABLED
          This value is used to indicate that we shouldn't keep track of index of xml:id attribute -- generally done when Xml:id support is disabled
protected static int XMLID_IX_NONE
           
 
Constructor Summary
protected AttributeCollector(ReaderConfig cfg, boolean nsAware)
           
 
Method Summary
 int addDefaultAttribute(String localName, String uri, String prefix, String value)
          Method called by validator to insert an attribute that has a default value and wasn't yet included in collector's attribute set.
protected  void allocBuffers()
          Method called to initialize buffers that need not be immediately initialized
 ElemAttrs buildAttrOb()
          Method needed by event creating code, to build a non-transient attribute container, to use with XMLEvent objects (specifically implementation of StartElement event).
 byte[] decodeBinary(int index, org.codehaus.stax2.typed.Base64Variant v, org.codehaus.stax2.ri.typed.CharArrayBase64Decoder dec, InputProblemReporter rep)
           
 void decodeValue(int index, org.codehaus.stax2.typed.TypedValueDecoder tvd)
          Method called to decode the whole attribute value as a single typed value.
 int decodeValues(int index, org.codehaus.stax2.typed.TypedArrayDecoder tad, InputProblemReporter rep)
          Method called to decode the attribute value that consists of zero or more space-separated tokens.
 int findIndex(String localName)
           
 int findIndex(String nsURI, String localName)
           
 TextBuilder getAttrBuilder(String attrPrefix, String attrLocalName)
          Low-level accessor method that attribute validation code may call for certain types of attributes; generally only for id and idref/idrefs attributes.
 int getCount()
           
 TextBuilder getDefaultNsBuilder()
           
 String getLocalName(int index)
           
 TextBuilder getNsBuilder(String prefix)
           
protected  int getNsCount()
           
 String getNsPrefix(int index)
           
 String getNsURI(int index)
           
 String getPrefix(int index)
           
 QName getQName(int index)
           
protected  char[] getSharedValueBuffer()
           
 int getSpecifiedCount()
           
 String getURI(int index)
           
 String getValue(int index)
           Note: the main reason this method is defined at this level, and made final, is performance.
 String getValue(String nsURI, String localName)
           
protected  int getValueStartOffset(int index)
          Method for getting start pointer within shared value buffer for given attribute.
 int getXmlIdAttrIndex()
           
 boolean hasDefaultNs()
           
 boolean isSpecified(int index)
           
 void normalizeSpacesInValue(int index)
          Method that can be called to force space normalization (remove leading/trailing spaces, replace non-spaces white space with spaces, collapse spaces to one) on specified attribute.
 void reset()
          Method called to allow reusing of collector, usually right before starting collecting attributes for a new start tag.
protected  com.ctc.wstx.sr.Attribute resolveNamespaceDecl(int index, boolean internURI)
          Method called to resolve and initialize specified collected namespace declaration
 int resolveNamespaces(InputProblemReporter rep, StringVector ns)
          Method called to resolve namespace URIs from attribute prefixes.
 void setNormalizedValue(int index, String value)
          Low-level mutator method that attribute validation code may call for certain types of attributes, when it wants to handle the whole validation and normalization process by itself.
protected  void throwDupAttr(InputProblemReporter rep, int index)
          Method that can be used to get the specified attribute value, by getting it written using Writer passed in.
protected  void throwIndex(int index)
           
protected  void validateAttribute(int index, org.codehaus.stax2.validation.XMLValidator vld)
           
 void writeAttribute(int index, XmlWriter xw)
          Method that basically serializes the specified (read-in) attribute using Writers provided.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LONG_ATTR_LIST_LEN

protected static final int LONG_ATTR_LIST_LEN
Threshold value that indicates minimum length for lists instances that need a Map structure, for fast attribute access by fully-qualified name.

See Also:
Constant Field Values

EXP_ATTR_COUNT

protected static final int EXP_ATTR_COUNT
Expected typical maximum number of attributes for any element; chosen to minimize need to resize, while trying not to waste space. Dynamically grown; better not to set too high to avoid excessive overhead for small attribute-less documents.

See Also:
Constant Field Values

EXP_NS_COUNT

protected static final int EXP_NS_COUNT
See Also:
Constant Field Values

XMLID_IX_DISABLED

protected static final int XMLID_IX_DISABLED
This value is used to indicate that we shouldn't keep track of index of xml:id attribute -- generally done when Xml:id support is disabled

See Also:
Constant Field Values

XMLID_IX_NONE

protected static final int XMLID_IX_NONE
See Also:
Constant Field Values

sInternCache

protected static final InternCache sInternCache

mAttributes

protected com.ctc.wstx.sr.Attribute[] mAttributes
Array of attributes collected for this element.


mAttrCount

protected int mAttrCount
Actual number of attributes collected, including attributes added via default values.


mNonDefCount

protected int mNonDefCount
Number of attribute values actually parsed, not including ones created via default value expansion. Equal to or less than mAttrCount.


mNamespaces

protected com.ctc.wstx.sr.Attribute[] mNamespaces
Array of namespace declaration attributes collected for this element; not used in non-namespace-aware mode


mNsCount

protected int mNsCount
Number of valid namespace declarations in mNamespaces.


mDefaultNsDeclared

protected boolean mDefaultNsDeclared
Flag to indicate whether the default namespace has already been declared for the current element.


mXmlIdAttrIndex

protected int mXmlIdAttrIndex
Index of "xml:id" attribute, if one exists for the current element; XMLID_IX_NONE if none.


mValueBuilder

protected TextBuilder mValueBuilder
TextBuilder into which values of all attributes are appended to, including default valued ones (defaults are added after explicit ones). Constructed lazily, if and when needed (not needed for short attribute-less docs)


mAttrMap

protected int[] mAttrMap
Encoding of a data structure that contains mapping from attribute names to attribute index in main attribute name arrays.

Data structure contains two separate areas; main hash area (with size mAttrHashSize), and remaining spillover area that follows hash area up until (but not including) mAttrSpillEnd index. Main hash area only contains indexes (index+1; 0 signifying empty slot) to actual attributes; spillover area has both hash and index for any spilled entry. Spilled entries are simply stored in order added, and need to be searched using linear search. In case of both primary hash hits and spills, eventual comparison with the local name needs to be done with actual name array.


mAttrHashSize

protected int mAttrHashSize
Size of hash area in mAttrMap; generally at least 20% more than number of attributes (mAttrCount).


mAttrSpillEnd

protected int mAttrSpillEnd
Pointer to int slot right after last spill entr, in mAttrMap array.

Constructor Detail

AttributeCollector

protected AttributeCollector(ReaderConfig cfg,
                             boolean nsAware)
Method Detail

reset

public void reset()
Method called to allow reusing of collector, usually right before starting collecting attributes for a new start tag.

Note: public only so that it can be called by unit tests.


normalizeSpacesInValue

public void normalizeSpacesInValue(int index)
Method that can be called to force space normalization (remove leading/trailing spaces, replace non-spaces white space with spaces, collapse spaces to one) on specified attribute. Currently called by InputElementStack to force normalization of Xml:id attribute


getNsCount

protected int getNsCount()
Returns:
Number of namespace declarations collected, including possible default namespace declaration

hasDefaultNs

public boolean hasDefaultNs()

getCount

public final int getCount()

getSpecifiedCount

public int getSpecifiedCount()
Returns:
Number of attributes that were explicitly specified; may be less than the total count due to attributes created using attribute default values

getNsPrefix

public String getNsPrefix(int index)

getNsURI

public String getNsURI(int index)

getPrefix

public String getPrefix(int index)

getLocalName

public String getLocalName(int index)

getURI

public String getURI(int index)

getQName

public QName getQName(int index)

getValue

public final String getValue(int index)

Note: the main reason this method is defined at this level, and made final, is performance. JIT may be able to fully inline this method, even when reference is via this base class. This is important since this is likely to be the most often called method of the collector instances.


getValue

public String getValue(String nsURI,
                       String localName)

findIndex

public int findIndex(String localName)

findIndex

public int findIndex(String nsURI,
                     String localName)

isSpecified

public final boolean isSpecified(int index)

getXmlIdAttrIndex

public final int getXmlIdAttrIndex()

decodeValue

public final void decodeValue(int index,
                              org.codehaus.stax2.typed.TypedValueDecoder tvd)
                       throws IllegalArgumentException
Method called to decode the whole attribute value as a single typed value. Decoding is done using the decoder provided.

Throws:
IllegalArgumentException

decodeValues

public final int decodeValues(int index,
                              org.codehaus.stax2.typed.TypedArrayDecoder tad,
                              InputProblemReporter rep)
                       throws XMLStreamException
Method called to decode the attribute value that consists of zero or more space-separated tokens. Decoding is done using the decoder provided.

Returns:
Number of tokens decoded
Throws:
XMLStreamException

decodeBinary

public final byte[] decodeBinary(int index,
                                 org.codehaus.stax2.typed.Base64Variant v,
                                 org.codehaus.stax2.ri.typed.CharArrayBase64Decoder dec,
                                 InputProblemReporter rep)
                          throws XMLStreamException
Throws:
XMLStreamException

getValueStartOffset

protected int getValueStartOffset(int index)
Method for getting start pointer within shared value buffer for given attribute. It is also the same as end pointer for preceding attribute, if any.


getSharedValueBuffer

protected char[] getSharedValueBuffer()

resolveNamespaceDecl

protected com.ctc.wstx.sr.Attribute resolveNamespaceDecl(int index,
                                                         boolean internURI)
Method called to resolve and initialize specified collected namespace declaration

Returns:
Attribute that contains specified namespace declaration

buildAttrOb

public ElemAttrs buildAttrOb()
Method needed by event creating code, to build a non-transient attribute container, to use with XMLEvent objects (specifically implementation of StartElement event).


validateAttribute

protected void validateAttribute(int index,
                                 org.codehaus.stax2.validation.XMLValidator vld)
                          throws XMLStreamException
Throws:
XMLStreamException

getAttrBuilder

public final TextBuilder getAttrBuilder(String attrPrefix,
                                        String attrLocalName)
Low-level accessor method that attribute validation code may call for certain types of attributes; generally only for id and idref/idrefs attributes. It returns the underlying 'raw' attribute value buffer for direct access.


addDefaultAttribute

public int addDefaultAttribute(String localName,
                               String uri,
                               String prefix,
                               String value)
Method called by validator to insert an attribute that has a default value and wasn't yet included in collector's attribute set.

Returns:
Index of the newly added attribute, if added; -1 to indicate this was a duplicate

setNormalizedValue

public final void setNormalizedValue(int index,
                                     String value)
Low-level mutator method that attribute validation code may call for certain types of attributes, when it wants to handle the whole validation and normalization process by itself. It is generally only called for id and idref/idrefs attributes, as those values are usually normalized.


getDefaultNsBuilder

public TextBuilder getDefaultNsBuilder()
Returns:
null if the default namespace URI has been already declared for the current element; TextBuilder to add URI to if not.

getNsBuilder

public TextBuilder getNsBuilder(String prefix)
Returns:
null if prefix has been already declared; TextBuilder to add value to if not.

resolveNamespaces

public int resolveNamespaces(InputProblemReporter rep,
                             StringVector ns)
                      throws XMLStreamException
Method called to resolve namespace URIs from attribute prefixes.

Note: public only so that it can be called by unit tests.

Parameters:
rep - Reporter to use for reporting well-formedness problems
ns - Namespace prefix/URI mappings active for this element
Returns:
Index of xml:id attribute, if any, -1 if not
Throws:
XMLStreamException

throwIndex

protected void throwIndex(int index)

writeAttribute

public void writeAttribute(int index,
                           XmlWriter xw)
                    throws IOException,
                           XMLStreamException
Method that basically serializes the specified (read-in) attribute using Writers provided. Serialization is done by writing out (fully-qualified) name of the attribute, followed by the equals sign and quoted value.

Throws:
IOException
XMLStreamException

allocBuffers

protected final void allocBuffers()
Method called to initialize buffers that need not be immediately initialized


throwDupAttr

protected void throwDupAttr(InputProblemReporter rep,
                            int index)
                     throws XMLStreamException
Method that can be used to get the specified attribute value, by getting it written using Writer passed in. Can potentially save one String allocation, since no (temporary) Strings need to be created.

Throws:
XMLStreamException


Copyright © 2011 Codehaus. All Rights Reserved.