FileDocCategorySizeDatePackage
XSNamedMapImpl.javaAPI DocApache Xerces 3.0.16701Fri Sep 14 20:33:52 BST 2007org.apache.xerces.impl.xs.util

XSNamedMapImpl

public class XSNamedMapImpl extends Object implements XSNamedMap
Containts the map between qnames and XSObject's.
xerces.internal
author
Sandy Gao, IBM
version
$Id: XSNamedMapImpl.java 446723 2006-09-15 20:37:45Z mrglavas $

Fields Summary
public static final XSNamedMap
EMPTY_MAP
An immutable empty map.
String[]
fNamespaces
int
fNSNum
org.apache.xerces.util.SymbolHash[]
fMaps
XSObject[]
fArray
int
fLength
org.apache.xerces.xni.QName
fName
Constructors Summary
public XSNamedMapImpl(String namespace, org.apache.xerces.util.SymbolHash map)
Construct an XSNamedMap implmentation for one namespace

param
namespace the namespace to which the components belong
param
map the map from local names to components

    
                                         
         
        fNamespaces = new String[] {namespace};
        fMaps = new SymbolHash[] {map};
        fNSNum = 1;
    
public XSNamedMapImpl(String[] namespaces, org.apache.xerces.util.SymbolHash[] maps, int num)
Construct an XSNamedMap implmentation for a list of namespaces

param
namespaces the namespaces to which the components belong
param
maps the maps from local names to components
param
num the number of namespaces

        fNamespaces = namespaces;
        fMaps = maps;
        fNSNum = num;
    
public XSNamedMapImpl(XSObject[] array, int length)
Construct an XSNamedMap implmentation one namespace from an array

param
array containing all components
param
length number of components

        if (length == 0) {
            fNSNum = 0;
            fLength = 0;
            return;
        }
        // because all components are from the same target namesapce,
        // get the namespace from the first one.
        fNamespaces = new String[]{array[0].getNamespace()};
        fMaps = null;
        fNSNum = 1;
        // copy elements to the Vector
        fArray = array;
        fLength = length;
    
Methods Summary
public synchronized intgetLength()
The number of XSObjects in the XSObjectList. The range of valid child node indices is 0 to length-1 inclusive.

        if (fLength == -1) {
            fLength = 0;
            for (int i = 0; i < fNSNum; i++)
                fLength += fMaps[i].getLength();
        }
        return fLength;
    
final booleanisEqual(java.lang.String one, java.lang.String two)

        return (one != null) ? one.equals(two) : (two == null);
    
public synchronized XSObjectitem(int index)
Returns the indexth item in the map. The index starts at 0. If index is greater than or equal to the number of nodes in the list, this returns null.

param
index The position in the map from which the item is to be retrieved.
return
The XSObject at the indexth position in the XSNamedMap, or null if that is not a valid index.

        if (fArray == null) {
            // calculate the total number of elements
            getLength();
            fArray = new XSObject[fLength];
            int pos = 0;
            // get components from all SymbolHash's
            for (int i = 0; i < fNSNum; i++) {
                pos += fMaps[i].getValues(fArray, pos);
            }
        }
        if (index < 0 || index >= fLength)
            return null;
        return fArray[index];
    
public XSObjectitemByName(java.lang.String namespace, java.lang.String localName)
Retrieves an XSObject specified by local name and namespace URI.

param
namespace The namespace URI of the XSObject to retrieve.
param
localName The local name of the XSObject to retrieve.
return
A XSObject (of any type) with the specified local name and namespace URI, or null if they do not identify any XSObject in this map.

        for (int i = 0; i < fNSNum; i++) {
            if (isEqual(namespace, fNamespaces[i])) {
                // when this map is created from SymbolHash's
                // get the component from SymbolHash
                if (fMaps != null)
                    return (XSObject)fMaps[i].get(localName);
                // Otherwise (it's created from an array)
                // go through the array to find a matcing name
                XSObject ret;
                for (int j = 0; j < fLength; j++) {
                    ret = fArray[j];
                    if (ret.getName().equals(localName))
                        return ret;
                }
                return null;
            }
        }
        return null;