c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.6-b27-fcs
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// Any modifications to this file will be lost upon recompilation of the source schema.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// Generated on: 2012.06.11 at 10:34:16 AM PDT
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkpackage com.sun.identity.wsfederation.jaxb.entityconfig.impl.runtime;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.Enumeration;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.HashMap;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.HashSet;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.Iterator;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.Map;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.Set;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport javax.xml.XMLConstants;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport org.xml.sax.SAXException;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.marshaller.NamespacePrefixMapper;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.marshaller.NamespaceSupport;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk/**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Implementation of the NamespaceContext2.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * This class also provides several utility methods for
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * XMLSerializer-derived classes.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * The startElement method and the endElement method need to be called
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * appropriately when used. See javadoc for those methods for details.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkpublic class NamespaceContextImpl implements NamespaceContext2
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk{
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Sequence generator. Used as the last resort to generate
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * unique prefix.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private int iota = 1;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Used to maintain association between prefixes and URIs.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final NamespaceSupport nss = new NamespaceSupport();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * A flag that indicates the current mode of this object.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private boolean inCollectingMode;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Assigns prefixes to URIs. Can be null. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final NamespacePrefixMapper prefixMapper;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Used during the collecting mode to sort out the namespace
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * URIs we need for this element.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * A map from prefixes to namespace URIs.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final Map decls = new HashMap();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final Map reverseDecls = new HashMap();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public NamespaceContextImpl(NamespacePrefixMapper _prefixMapper) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk this.prefixMapper = _prefixMapper;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // declare the default namespace binding
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // which are effective because of the way XML1.0 is made
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nss.declarePrefix("","");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nss.declarePrefix( "xmlns", XMLConstants.XMLNS_ATTRIBUTE_NS_URI );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// this one is taken care of by the NamespaceSupport class by default.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// nss.declarePrefix( "xml", XMLConstants.XML_NS_URI );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public final NamespacePrefixMapper getNamespacePrefixMapper() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return prefixMapper;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// public methods of MarshallingContext
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * @param requirePrefix
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * true if this is called for attribute name. false otherwise.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public String declareNamespace( String namespaceUri, String preferedPrefix, boolean requirePrefix ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( !inCollectingMode ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( !requirePrefix && nss.getURI("").equals(namespaceUri) )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return ""; // can use the default prefix. use it whenever we can
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // find a valid prefix for this namespace URI
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // ASSERTION: the result is always non-null,
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // since we require all the namespace URIs to be declared while
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // this object is in collection mode.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if (requirePrefix)
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return nss.getPrefix2(namespaceUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk else
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return nss.getPrefix(namespaceUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk } else {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( requirePrefix && namespaceUri.length()==0 )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return "";
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // collect this new namespace URI
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String prefix = (String)reverseDecls.get(namespaceUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( prefix!=null ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( !requirePrefix || prefix.length()!=0 ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // this namespace URI is already taken care of,
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // and it satisfies the "requirePrefix" requirement.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return prefix;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk } else {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // the prefix was already allocated but it's "",
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // and we specifically need non-empty prefix.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // erase the current binding
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk decls.remove(prefix);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reverseDecls.remove(namespaceUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( namespaceUri.length()==0 ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // the empty namespace URI needs to be bound to the default prefix.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = "";
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk } else {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // see if this namespace URI is already in-scope
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = nss.getPrefix(namespaceUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( prefix==null )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = (String)reverseDecls.get(namespaceUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( prefix==null ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // if not, try to allocate a new one.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // use prefixMapper if specified. If so, just let the
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // prefixMapper decide if it wants to use the suggested prefix.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // otherwise our best bet is the suggested prefix.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( prefixMapper!=null )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = prefixMapper.getPreferredPrefix(
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk namespaceUri,preferedPrefix,requirePrefix);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk else
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = preferedPrefix;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( prefix==null )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // if the user don't care, generate one
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = "ns"+(iota++);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // ASSERT: prefix!=null
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( requirePrefix && prefix.length()==0 )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // we can't map it to the default prefix. generate one.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = "ns"+(iota++);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk while(true) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String existingUri = (String)decls.get(prefix);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( existingUri==null ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // this prefix is unoccupied. use it
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk decls.put( prefix, namespaceUri );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reverseDecls.put( namespaceUri, prefix );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return prefix;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( existingUri.length()==0 ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // we have to remap the new namespace URI to a different
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // prefix because the current association of ""->"" cannot
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // be changed
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk ;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk } else {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // the new one takes precedence. this is necessary
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // because we might first assign "uri1"->"" and then
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // later find that ""->"" needs to be added.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // so change the existing one
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk decls.put( prefix, namespaceUri );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reverseDecls.put( namespaceUri, prefix );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk namespaceUri = existingUri;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // we need to find a new prefix for URI "namespaceUri"
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // generate a machine-made prefix
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefix = "ns"+(iota++);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // go back to the loop and reassign
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public String getPrefix( String namespaceUri ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // even through the method name is "getPrefix", we
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // use this method to declare prefixes if necessary.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // the only time a prefix is required is when we print
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // attribute names, and in those cases we will call
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // declareNamespace method directly. So it's safe to
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // assume that we don't require a prefix in this case.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return declareNamespace(namespaceUri,null,false);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Obtains the namespace URI currently associated to the given prefix.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * If no namespace URI is associated, return null.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public String getNamespaceURI( String prefix ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String uri = (String)decls.get(prefix);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(uri!=null) return uri;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return nss.getURI(prefix);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public Iterator getPrefixes( String namespaceUri ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // not particularly efficient implementation.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk Set s = new HashSet();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String prefix = (String)reverseDecls.get(namespaceUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(prefix!=null) s.add(prefix);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( nss.getURI("").equals(namespaceUri) )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk s.add("");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk for( Enumeration e=nss.getPrefixes(namespaceUri); e.hasMoreElements(); )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk s.add(e.nextElement());
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return s.iterator();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Sets the current bindings aside and starts a new element context.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * This method should be called at the beginning of the startElement method
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * of the Serializer implementation.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void startElement() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nss.pushContext();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk inCollectingMode = true;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Reconciles the namespace URI/prefix mapping requests since the
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * last startElement method invocation and finalizes them.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * This method must be called after all the necessary namespace URIs
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * for this element is reported through the declareNamespace method
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * or the getPrefix method.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void endNamespaceDecls() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(!decls.isEmpty()) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // most of the times decls is empty, so take advantage of it.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk for( Iterator itr=decls.entrySet().iterator(); itr.hasNext(); ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk Map.Entry e = (Map.Entry)itr.next();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String prefix = (String)e.getKey();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String uri = (String)e.getValue();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(!uri.equals(nss.getURI(prefix))) // avoid redundant decls.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nss.declarePrefix( prefix, uri );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk decls.clear();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reverseDecls.clear();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk inCollectingMode = false;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Ends the current element context and gets back to the parent context.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * This method should be called at the end of the endElement method
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * of derived classes.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void endElement() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nss.popContext();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Iterates all newly declared namespace prefixes for this element. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void iterateDeclaredPrefixes( PrefixCallback callback ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk for( Enumeration e=nss.getDeclaredPrefixes(); e.hasMoreElements(); ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String p = (String)e.nextElement();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String uri = nss.getURI(p);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk callback.onPrefixMapping( p, uri );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk}