FileDocCategorySizeDatePackage
XSNamedMapImpl.javaAPI DocJava SE 5 API8011Fri Aug 26 14:55:52 BST 2005com.sun.org.apache.xerces.internal.impl.xs.util

XSNamedMapImpl

public class XSNamedMapImpl extends Object implements XSNamedMap
Containts the map between qnames and XSObject's.
author
Sandy Gao, IBM
version
$Id: XSNamedMapImpl.java,v 1.5 2003/11/11 20:15:00 sandygao Exp $

Fields Summary
String[]
fNamespaces
int
fNSNum
SymbolHash[]
fMaps
XSObject[]
fArray
int
fLength
QName
fName
Constructors Summary
public XSNamedMapImpl(String namespace, 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, 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;
    
public synchronized com.sun.org.apache.xerces.internal.xs.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 com.sun.org.apache.xerces.internal.xs.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.

        if (namespace != null)
            namespace = namespace.intern();
        for (int i = 0; i < fNSNum; i++) {
            if (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;