KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > xerces > internal > impl > xs > util > XSNamedMap4Types


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2002 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Xerces" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 2001, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package com.sun.org.apache.xerces.internal.impl.xs.util;
59
60 import com.sun.org.apache.xerces.internal.xs.XSObject;
61 import com.sun.org.apache.xerces.internal.xs.XSTypeDefinition;
62 import com.sun.org.apache.xerces.internal.util.SymbolHash;
63
64 /**
65  * Containts the map between qnames and XSObject's.
66  *
67  * @author Sandy Gao, IBM
68  *
69  * @version $Id: XSNamedMap4Types.java,v 1.5 2003/11/11 20:15:00 sandygao Exp $
70  */

71 public class XSNamedMap4Types extends XSNamedMapImpl {
72
73     // the type of component stored here: complex or simple type
74
short fType;
75     
76     /**
77      * Construct an XSNamedMap implmentation for one namespace
78      *
79      * @param namespace the namespace to which the components belong
80      * @param map the map from local names to components
81      * @param type the type of components
82      */

83     public XSNamedMap4Types(String JavaDoc namespace, SymbolHash map, short type) {
84         super(namespace, map);
85         fType = type;
86     }
87
88     /**
89      * Construct an XSNamedMap implmentation for a list of namespaces
90      *
91      * @param namespaces the namespaces to which the components belong
92      * @param maps the maps from local names to components
93      * @param num the number of namespaces
94      * @param type the type of components
95      */

96     public XSNamedMap4Types(String JavaDoc[] namespaces, SymbolHash[] maps, int num, short type) {
97         super(namespaces, maps, num);
98         fType = type;
99     }
100
101     /**
102      * The number of <code>XSObjects</code> in the <code>XSObjectList</code>. The
103      * range of valid child node indices is 0 to <code>length-1</code>
104      * inclusive.
105      */

106     public synchronized int getLength() {
107         if (fLength == -1) {
108             // first get the number of components for all types
109
int length = 0;
110             for (int i = 0; i < fNSNum; i++)
111                 length += fMaps[i].getLength();
112             // then copy all types to an temporary array
113
int pos = 0;
114             XSObject[] array = new XSObject[length];
115             for (int i = 0; i < fNSNum; i++) {
116                 pos += fMaps[i].getValues(array, pos);
117             }
118             // then copy either simple or complex types to fArray,
119
// depending on which kind is required
120
fLength = 0;
121             fArray = new XSObject[length];
122             XSTypeDefinition type;
123             for (int i = 0; i < length; i++) {
124                 type = (XSTypeDefinition)array[i];
125                 if (type.getTypeCategory() == fType) {
126                     fArray[fLength++] = type;
127                 }
128             }
129         }
130         return fLength;
131     }
132
133     /**
134      * Retrieves an <code>XSObject</code> specified by local name and namespace
135      * URI.
136      * @param namespace The namespace URI of the <code>XSObject</code> to
137      * retrieve.
138      * @param localName The local name of the <code>XSObject</code> to retrieve.
139      * @return A <code>XSObject</code> (of any type) with the specified local
140      * name and namespace URI, or <code>null</code> if they do not
141      * identify any <code>XSObject</code> in this map.
142      */

143     public XSObject itemByName(String JavaDoc namespace, String JavaDoc localName) {
144         if (namespace != null)
145             namespace = namespace.intern();
146         for (int i = 0; i < fNSNum; i++) {
147             if (namespace == fNamespaces[i]) {
148                 XSTypeDefinition type = (XSTypeDefinition)fMaps[i].get(localName);
149                 // only return it if it mataches the required type
150
if (type.getTypeCategory() == fType)
151                     return type;
152                 return null;
153             }
154         }
155         return null;
156     }
157
158     /**
159      * Returns the <code>index</code>th item in the map. The index starts at
160      * 0. If <code>index</code> is greater than or equal to the number of
161      * nodes in the list, this returns <code>null</code>.
162      * @param index The position in the map from which the item is to be
163      * retrieved.
164      * @return The <code>XSObject</code> at the <code>index</code>th position
165      * in the <code>XSNamedMap</code>, or <code>null</code> if that is
166      * not a valid index.
167      */

168     public synchronized XSObject item(int index) {
169         if (fArray == null) {
170             getLength();
171         }
172         if (index < 0 || index >= fLength)
173             return null;
174         return fArray[index];
175     }
176     
177 } // class XSNamedMapImpl
178
Popular Tags