org.apache.tuscany.sca.databinding.xml
Class XMLFragmentStreamReaderImpl

java.lang.Object
  extended by org.apache.tuscany.sca.databinding.xml.XMLFragmentStreamReaderImpl
All Implemented Interfaces:
javax.xml.stream.XMLStreamConstants, javax.xml.stream.XMLStreamReader, XMLFragmentStreamReader

public class XMLFragmentStreamReaderImpl
extends java.lang.Object
implements XMLFragmentStreamReader

This is the new implementation of the XMLFramentStreamReader. The approach here is simple When the pull parser needs to generate events for a particular name-value(s) pair it always hands over (delegates) the task to another pull parser which knows how to deal with it The common types of name value pairs we'll come across are

As for the attributes, these are the possible combinations in the array

Note that certain array methods have been deliberately removed to avoid complications. The generated code will take the trouble to lay the elements of the array in the correct order

Hence there will be a parser impl that knows how to handle these types, and this parent parser will always delegate these tasks to the child pullparasers in effect this is one huge state machine that has only a few states and delegates things down to the child parsers whenever possible


Field Summary
protected  NamedProperty[] attributes
           
protected  XMLFragmentStreamReader childReader
           
protected  java.util.Map<java.lang.String,java.lang.String> declaredNamespaceMap
           
protected  javax.xml.namespace.QName elementQName
           
protected  NamedProperty[] elements
           
protected  int index
           
protected  DelegatingNamespaceContext namespaceContext
           
protected  int state
           
 
Fields inherited from interface org.apache.tuscany.sca.databinding.xml.XMLFragmentStreamReader
ELEMENT_TEXT, NIL_QNAME, NIL_VALUE_TRUE
 
Fields inherited from interface javax.xml.stream.XMLStreamConstants
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT
 
Constructor Summary
protected XMLFragmentStreamReaderImpl(javax.xml.namespace.QName elementQName)
           
  XMLFragmentStreamReaderImpl(javax.xml.namespace.QName elementQName, NamedProperty[] elements, NamedProperty[] attributes)
           
 
Method Summary
protected  void addToNsMap(java.lang.String prefix, java.lang.String uri)
           
 void close()
           
 int getAttributeCount()
           
 java.lang.String getAttributeLocalName(int i)
           
 javax.xml.namespace.QName getAttributeName(int i)
           
 java.lang.String getAttributeNamespace(int i)
           
 java.lang.String getAttributePrefix(int i)
           
protected  NamedProperty[] getAttributes()
           
 java.lang.String getAttributeType(int i)
           
 java.lang.String getAttributeValue(int i)
           
 java.lang.String getAttributeValue(java.lang.String nsUri, java.lang.String localName)
           
 java.lang.String getCharacterEncodingScheme()
           
protected  NamedProperty[] getElements()
           
 java.lang.String getElementText()
          TODO implement the right contract for this
 java.lang.String getEncoding()
           
 int getEventType()
           
 java.lang.String getLocalName()
           
 javax.xml.stream.Location getLocation()
           
 javax.xml.namespace.QName getName()
           
 javax.xml.namespace.NamespaceContext getNamespaceContext()
           
 int getNamespaceCount()
           
 java.lang.String getNamespacePrefix(int i)
           
protected  javax.xml.namespace.QName[] getNamespaces()
           
 java.lang.String getNamespaceURI()
           
 java.lang.String getNamespaceURI(int i)
           
 java.lang.String getNamespaceURI(java.lang.String prefix)
           
 java.lang.String getPIData()
           
 java.lang.String getPITarget()
           
 java.lang.String getPrefix()
           
 java.lang.Object getProperty(java.lang.String key)
           
 java.lang.String getText()
           
 char[] getTextCharacters()
           
 int getTextCharacters(int i, char[] chars, int i1, int i2)
           
 int getTextLength()
           
 int getTextStart()
           
 java.lang.String getVersion()
           
 boolean hasName()
           
 boolean hasNext()
           
 boolean hasText()
          check the validity of this implementation
 void init()
          we need to split out the calling to the populate namespaces separately since this needs to be done *after* setting the parent namespace context.
 boolean isAttributeSpecified(int i)
           
 boolean isCharacters()
           
 boolean isDone()
          are we done ?
 boolean isEndElement()
           
 boolean isStandalone()
           
 boolean isStartElement()
           
 boolean isWhiteSpace()
           
 int next()
          By far this should be the most important method in this class this method changes the state of the parser
 int nextTag()
          TODO implement this
 void require(int i, java.lang.String string, java.lang.String string1)
           
 void setParentNamespaceContext(javax.xml.namespace.NamespaceContext nsContext)
          add the namespace context
 boolean standaloneSet()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

attributes

protected NamedProperty[] attributes

childReader

protected XMLFragmentStreamReader childReader

index

protected int index

declaredNamespaceMap

protected java.util.Map<java.lang.String,java.lang.String> declaredNamespaceMap

elementQName

protected javax.xml.namespace.QName elementQName

namespaceContext

protected DelegatingNamespaceContext namespaceContext

elements

protected NamedProperty[] elements

state

protected int state
Constructor Detail

XMLFragmentStreamReaderImpl

public XMLFragmentStreamReaderImpl(javax.xml.namespace.QName elementQName,
                                   NamedProperty[] elements,
                                   NamedProperty[] attributes)

XMLFragmentStreamReaderImpl

protected XMLFragmentStreamReaderImpl(javax.xml.namespace.QName elementQName)
Method Detail

setParentNamespaceContext

public void setParentNamespaceContext(javax.xml.namespace.NamespaceContext nsContext)
add the namespace context

Specified by:
setParentNamespaceContext in interface XMLFragmentStreamReader

getElements

protected NamedProperty[] getElements()

getAttributes

protected NamedProperty[] getAttributes()

getNamespaces

protected javax.xml.namespace.QName[] getNamespaces()

addToNsMap

protected void addToNsMap(java.lang.String prefix,
                          java.lang.String uri)
Parameters:
prefix -
uri -

close

public void close()
           throws javax.xml.stream.XMLStreamException
Specified by:
close in interface javax.xml.stream.XMLStreamReader
Throws:
javax.xml.stream.XMLStreamException

getAttributeCount

public int getAttributeCount()
Specified by:
getAttributeCount in interface javax.xml.stream.XMLStreamReader

getAttributeLocalName

public java.lang.String getAttributeLocalName(int i)
Specified by:
getAttributeLocalName in interface javax.xml.stream.XMLStreamReader

getAttributeName

public javax.xml.namespace.QName getAttributeName(int i)
Specified by:
getAttributeName in interface javax.xml.stream.XMLStreamReader
Parameters:
i -

getAttributeNamespace

public java.lang.String getAttributeNamespace(int i)
Specified by:
getAttributeNamespace in interface javax.xml.stream.XMLStreamReader

getAttributePrefix

public java.lang.String getAttributePrefix(int i)
Specified by:
getAttributePrefix in interface javax.xml.stream.XMLStreamReader

getAttributeType

public java.lang.String getAttributeType(int i)
Specified by:
getAttributeType in interface javax.xml.stream.XMLStreamReader

getAttributeValue

public java.lang.String getAttributeValue(int i)
Specified by:
getAttributeValue in interface javax.xml.stream.XMLStreamReader

getAttributeValue

public java.lang.String getAttributeValue(java.lang.String nsUri,
                                          java.lang.String localName)
Specified by:
getAttributeValue in interface javax.xml.stream.XMLStreamReader

getCharacterEncodingScheme

public java.lang.String getCharacterEncodingScheme()
Specified by:
getCharacterEncodingScheme in interface javax.xml.stream.XMLStreamReader

getElementText

public java.lang.String getElementText()
                                throws javax.xml.stream.XMLStreamException
TODO implement the right contract for this

Specified by:
getElementText in interface javax.xml.stream.XMLStreamReader
Throws:
javax.xml.stream.XMLStreamException

getEncoding

public java.lang.String getEncoding()
Specified by:
getEncoding in interface javax.xml.stream.XMLStreamReader

getEventType

public int getEventType()
Specified by:
getEventType in interface javax.xml.stream.XMLStreamReader

getLocalName

public java.lang.String getLocalName()
Specified by:
getLocalName in interface javax.xml.stream.XMLStreamReader

getLocation

public javax.xml.stream.Location getLocation()
Specified by:
getLocation in interface javax.xml.stream.XMLStreamReader

getName

public javax.xml.namespace.QName getName()
Specified by:
getName in interface javax.xml.stream.XMLStreamReader

getNamespaceContext

public javax.xml.namespace.NamespaceContext getNamespaceContext()
Specified by:
getNamespaceContext in interface javax.xml.stream.XMLStreamReader

getNamespaceCount

public int getNamespaceCount()
Specified by:
getNamespaceCount in interface javax.xml.stream.XMLStreamReader

getNamespacePrefix

public java.lang.String getNamespacePrefix(int i)
Specified by:
getNamespacePrefix in interface javax.xml.stream.XMLStreamReader
Parameters:
i -

getNamespaceURI

public java.lang.String getNamespaceURI()
Specified by:
getNamespaceURI in interface javax.xml.stream.XMLStreamReader

getNamespaceURI

public java.lang.String getNamespaceURI(int i)
Specified by:
getNamespaceURI in interface javax.xml.stream.XMLStreamReader

getNamespaceURI

public java.lang.String getNamespaceURI(java.lang.String prefix)
Specified by:
getNamespaceURI in interface javax.xml.stream.XMLStreamReader

getPIData

public java.lang.String getPIData()
Specified by:
getPIData in interface javax.xml.stream.XMLStreamReader

getPITarget

public java.lang.String getPITarget()
Specified by:
getPITarget in interface javax.xml.stream.XMLStreamReader

getPrefix

public java.lang.String getPrefix()
Specified by:
getPrefix in interface javax.xml.stream.XMLStreamReader

getProperty

public java.lang.Object getProperty(java.lang.String key)
                             throws java.lang.IllegalArgumentException
Specified by:
getProperty in interface javax.xml.stream.XMLStreamReader
Parameters:
key -
Throws:
java.lang.IllegalArgumentException

getText

public java.lang.String getText()
Specified by:
getText in interface javax.xml.stream.XMLStreamReader

getTextCharacters

public char[] getTextCharacters()
Specified by:
getTextCharacters in interface javax.xml.stream.XMLStreamReader

getTextCharacters

public int getTextCharacters(int i,
                             char[] chars,
                             int i1,
                             int i2)
                      throws javax.xml.stream.XMLStreamException
Specified by:
getTextCharacters in interface javax.xml.stream.XMLStreamReader
Throws:
javax.xml.stream.XMLStreamException

getTextLength

public int getTextLength()
Specified by:
getTextLength in interface javax.xml.stream.XMLStreamReader

getTextStart

public int getTextStart()
Specified by:
getTextStart in interface javax.xml.stream.XMLStreamReader

getVersion

public java.lang.String getVersion()
Specified by:
getVersion in interface javax.xml.stream.XMLStreamReader

hasName

public boolean hasName()
Specified by:
hasName in interface javax.xml.stream.XMLStreamReader

hasNext

public boolean hasNext()
                throws javax.xml.stream.XMLStreamException
Specified by:
hasNext in interface javax.xml.stream.XMLStreamReader
Throws:
javax.xml.stream.XMLStreamException

hasText

public boolean hasText()
check the validity of this implementation

Specified by:
hasText in interface javax.xml.stream.XMLStreamReader

init

public void init()
we need to split out the calling to the populate namespaces separately since this needs to be done *after* setting the parent namespace context. We cannot assume it will happen at construction!

Specified by:
init in interface XMLFragmentStreamReader

isAttributeSpecified

public boolean isAttributeSpecified(int i)
Specified by:
isAttributeSpecified in interface javax.xml.stream.XMLStreamReader

isCharacters

public boolean isCharacters()
Specified by:
isCharacters in interface javax.xml.stream.XMLStreamReader

isDone

public boolean isDone()
are we done ?

Specified by:
isDone in interface XMLFragmentStreamReader

isEndElement

public boolean isEndElement()
Specified by:
isEndElement in interface javax.xml.stream.XMLStreamReader

isStandalone

public boolean isStandalone()
Specified by:
isStandalone in interface javax.xml.stream.XMLStreamReader

isStartElement

public boolean isStartElement()
Specified by:
isStartElement in interface javax.xml.stream.XMLStreamReader

isWhiteSpace

public boolean isWhiteSpace()
Specified by:
isWhiteSpace in interface javax.xml.stream.XMLStreamReader

next

public int next()
         throws javax.xml.stream.XMLStreamException
By far this should be the most important method in this class this method changes the state of the parser

Specified by:
next in interface javax.xml.stream.XMLStreamReader
Throws:
javax.xml.stream.XMLStreamException

nextTag

public int nextTag()
            throws javax.xml.stream.XMLStreamException
TODO implement this

Specified by:
nextTag in interface javax.xml.stream.XMLStreamReader
Throws:
javax.xml.stream.XMLStreamException

require

public void require(int i,
                    java.lang.String string,
                    java.lang.String string1)
             throws javax.xml.stream.XMLStreamException
Specified by:
require in interface javax.xml.stream.XMLStreamReader
Throws:
javax.xml.stream.XMLStreamException

standaloneSet

public boolean standaloneSet()
Specified by:
standaloneSet in interface javax.xml.stream.XMLStreamReader