View Javadoc
1   /**
2    * Redistribution and use of this software and associated documentation ("Software"), with or
3    * without modification, are permitted provided that the following conditions are met:
4    *
5    * 1. Redistributions of source code must retain copyright statements and notices. Redistributions
6    * must also contain a copy of this document.
7    *
8    * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
9    * conditions and the following disclaimer in the documentation and/or other materials provided with
10   * the distribution.
11   *
12   * 3. The name "Exolab" must not be used to endorse or promote products derived from this Software
13   * without prior written permission of Intalio, Inc. For written permission, please contact
14   * info@exolab.org.
15   *
16   * 4. Products derived from this Software may not be called "Exolab" nor may "Exolab" appear in
17   * their names without prior written permission of Intalio, Inc. Exolab is a registered trademark of
18   * Intalio, Inc.
19   *
20   * 5. Due credit should be given to the Exolab Project (http://www.exolab.org/).
21   *
22   * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR
23   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
24   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTALIO, INC. OR ITS
25   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
29   * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30   *
31   * Copyright 1999-2003 (C) Intalio, Inc. All Rights Reserved.
32   *
33   * $Id$
34   */
35  
36  package org.exolab.castor.mapping.loader;
37  
38  import java.util.Vector;
39  import java.util.Hashtable;
40  import java.util.Enumeration;
41  import java.util.NoSuchElementException;
42  import org.exolab.castor.mapping.CollectionHandler;
43  import org.exolab.castor.mapping.loader.collection.handler.ArrayCollectionHandler;
44  import org.exolab.castor.mapping.loader.collection.handler.EnumerateCollectionHandler;
45  import org.exolab.castor.mapping.loader.collection.handler.HashtableCollectionHandler;
46  import org.exolab.castor.mapping.loader.collection.handler.VectorCollectionHandler;
47  
48  import java.lang.reflect.*;
49  
50  /**
51   * Implementation of various collection handlers for the Java 1.1 libraries.
52   * 
53   * @author <a href="arkin@intalio.com">Assaf Arkin</a>
54   * @version $Revision$ $Date: 2006-04-25 15:08:23 -0600 (Tue, 25 Apr 2006) $
55   * @see CollectionHandler
56   */
57  public final class J1CollectionHandlers {
58  
59    /**
60     * List of all the default collection handlers.
61     */
62    private static CollectionHandlers.Info[] _colHandlers;
63  
64    static {
65      _colHandlers =
66          new CollectionHandlers.Info[] {
67              // For array (any)
68              new CollectionHandlers.Info("array", Object[].class, true,
69                  new ArrayCollectionHandler()),
70              // For Vector (1.1)
71              new CollectionHandlers.Info("vector", Vector.class, false,
72                  new VectorCollectionHandler()),
73              // For Hashtable (1.1)
74              new CollectionHandlers.Info("hashtable", Hashtable.class, false,
75                  new HashtableCollectionHandler()),
76              // For Enumeration (1.1)
77              new CollectionHandlers.Info("enumerate", Enumeration.class, false,
78                  new EnumerateCollectionHandler())};
79    }
80  
81    public static CollectionHandlers.Info[] getCollectionHandlersInfo() {
82      return _colHandlers;
83    }
84  
85    /**
86     * Enumerator for an array.
87     */
88    public static final class ArrayEnumerator<T> implements Enumeration<T> {
89  
90      private final Object _array;
91  
92      private int _index;
93  
94      public ArrayEnumerator(Object array) {
95        _array = array;
96      }
97  
98      public boolean hasMoreElements() {
99        return (_index < Array.getLength(_array));
100     }
101 
102     @SuppressWarnings("unchecked")
103     public T nextElement() {
104       if (_index >= Array.getLength(_array))
105         throw new NoSuchElementException();
106       return (T) Array.get(_array, _index++);
107     }
108 
109   }
110 
111 }