com.ctc.wstx.sw
Class OutputElementBase

java.lang.Object
  extended bycom.ctc.wstx.sw.OutputElementBase
All Implemented Interfaces:
javax.xml.namespace.NamespaceContext
Direct Known Subclasses:
DOMOutputElement, SimpleOutputElement

public abstract class OutputElementBase
extends java.lang.Object
implements javax.xml.namespace.NamespaceContext

Class that encapsulates information about a specific element in virtual output stack for namespace-aware writers. It provides support for URI-to-prefix mappings as well as namespace mapping generation.

One noteworthy feature of the class is that it is designed to allow "short-term recycling", ie. instances can be reused within context of a simple document output. While reuse/recycling of such lightweight object is often useless or even counter productive, here it may be worth using, due to simplicity of the scheme (basically using a very simple free-elements linked list).


Field Summary
protected  java.lang.String mDefaultNsURI
           
protected  BijectiveNsMap mNsMapping
          Mapping of namespace prefixes to URIs and back.
protected  boolean mNsMapShared
          True, if mNsMapping is a shared copy from the parent; false if a local copy was created (which happens when namespaces get bound etc).
protected  javax.xml.namespace.NamespaceContext mRootNsContext
          Namespace context end application may have supplied, and that (if given) should be used to augment explicitly defined bindings.
static int PREFIX_MISBOUND
           
static int PREFIX_OK
           
static int PREFIX_UNBOUND
           
 
Constructor Summary
protected OutputElementBase()
          Constructor for the virtual root element
protected OutputElementBase(OutputElementBase parent, BijectiveNsMap ns)
           
 
Method Summary
 void addPrefix(java.lang.String prefix, java.lang.String uri)
           
 java.lang.String generateMapping(java.lang.String prefixBase, java.lang.String uri, int[] seqArr)
           
 java.lang.String getDefaultNsUri()
           
 java.lang.String getExplicitPrefix(java.lang.String uri)
          Method similar to getPrefix(java.lang.String), but one that will not accept the default namespace, only an explicit one.
abstract  java.lang.String getNameDesc()
           
 java.lang.String getNamespaceURI(java.lang.String prefix)
           
 java.lang.String getPrefix(java.lang.String uri)
           
 java.util.Iterator getPrefixes(java.lang.String uri)
           
 int isPrefixValid(java.lang.String prefix, java.lang.String nsURI, boolean isElement)
          Method that verifies that passed-in prefix indeed maps to the specified namespace URI; and depending on how it goes returns a status for caller.
abstract  boolean isRoot()
           
protected  void relink(OutputElementBase parent)
          Method called to reuse a pooled instance.
abstract  void setDefaultNsUri(java.lang.String uri)
           
protected abstract  void setRootNsContext(javax.xml.namespace.NamespaceContext ctxt)
           
protected  void throwOutputError(java.lang.String msg)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PREFIX_UNBOUND

public static final int PREFIX_UNBOUND
See Also:
Constant Field Values

PREFIX_OK

public static final int PREFIX_OK
See Also:
Constant Field Values

PREFIX_MISBOUND

public static final int PREFIX_MISBOUND
See Also:
Constant Field Values

mRootNsContext

protected javax.xml.namespace.NamespaceContext mRootNsContext
Namespace context end application may have supplied, and that (if given) should be used to augment explicitly defined bindings.


mDefaultNsURI

protected java.lang.String mDefaultNsURI

mNsMapping

protected BijectiveNsMap mNsMapping
Mapping of namespace prefixes to URIs and back.


mNsMapShared

protected boolean mNsMapShared
True, if mNsMapping is a shared copy from the parent; false if a local copy was created (which happens when namespaces get bound etc).

Constructor Detail

OutputElementBase

protected OutputElementBase()
Constructor for the virtual root element


OutputElementBase

protected OutputElementBase(OutputElementBase parent,
                            BijectiveNsMap ns)
Method Detail

relink

protected void relink(OutputElementBase parent)
Method called to reuse a pooled instance.


setRootNsContext

protected abstract void setRootNsContext(javax.xml.namespace.NamespaceContext ctxt)

isRoot

public abstract boolean isRoot()

getNameDesc

public abstract java.lang.String getNameDesc()
Returns:
String presentation of the fully-qualified name, in "prefix:localName" format (no URI). Useful for error and debugging messages.

getDefaultNsUri

public final java.lang.String getDefaultNsUri()

getExplicitPrefix

public final java.lang.String getExplicitPrefix(java.lang.String uri)
Method similar to getPrefix(java.lang.String), but one that will not accept the default namespace, only an explicit one. Usually used when trying to find a prefix for attributes.


isPrefixValid

public final int isPrefixValid(java.lang.String prefix,
                               java.lang.String nsURI,
                               boolean isElement)
                        throws javax.xml.stream.XMLStreamException
Method that verifies that passed-in prefix indeed maps to the specified namespace URI; and depending on how it goes returns a status for caller.

Parameters:
isElement - If true, rules for the default NS are those of elements (ie. empty prefix can map to non-default namespace); if false, rules are those of attributes (only non-default prefix can map to a non-default namespace).
Returns:
PREFIX_OK, if passed-in prefix matches matched-in namespace URI in current scope; PREFIX_UNBOUND if it's not bound to anything, and PREFIX_MISBOUND if it's bound to another URI.
Throws:
javax.xml.stream.XMLStreamException - True if default (no) prefix is allowed to match a non-default URI (elements); false if not (attributes)

setDefaultNsUri

public abstract void setDefaultNsUri(java.lang.String uri)

generateMapping

public final java.lang.String generateMapping(java.lang.String prefixBase,
                                              java.lang.String uri,
                                              int[] seqArr)

addPrefix

public final void addPrefix(java.lang.String prefix,
                            java.lang.String uri)

getNamespaceURI

public final java.lang.String getNamespaceURI(java.lang.String prefix)
Specified by:
getNamespaceURI in interface javax.xml.namespace.NamespaceContext

getPrefix

public final java.lang.String getPrefix(java.lang.String uri)
Specified by:
getPrefix in interface javax.xml.namespace.NamespaceContext

getPrefixes

public final java.util.Iterator getPrefixes(java.lang.String uri)
Specified by:
getPrefixes in interface javax.xml.namespace.NamespaceContext

throwOutputError

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