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 }