root/trunk/src/java/org/jcoderz/commons/util/SerializableIterator.java

Revision 1011, 4.3 kB (checked in by amandel, 7 months ago)

Aligned svn keyword settings.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
Line 
1/*
2 * $Id$
3 *
4 * Copyright 2006, The jCoderZ.org Project. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 *    * Redistributions of source code must retain the above copyright
11 *      notice, this list of conditions and the following disclaimer.
12 *    * Redistributions in binary form must reproduce the above
13 *      copyright notice, this list of conditions and the following
14 *      disclaimer in the documentation and/or other materials
15 *      provided with the distribution.
16 *    * Neither the name of the jCoderZ.org Project nor the names of
17 *      its contributors may be used to endorse or promote products
18 *      derived from this software without specific prior written
19 *      permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33package org.jcoderz.commons.util;
34
35import java.io.Serializable;
36import java.util.ArrayList;
37import java.util.Arrays;
38import java.util.Collection;
39import java.util.Iterator;
40import java.util.List;
41import java.util.NoSuchElementException;
42
43/**
44 * Provides a serializable iterator over a collection (which may
45 * be either a {@link java.util.Collection} or an array of Objects. The
46 * {@link #remove()} operation is not supported in this implementation.
47 *
48 * NOTE: It is the caller's responsibility to ensure that all objects in
49 * the arguments passed to the factory methods are serializable. The
50 * implementation does not check this.
51 *
52 * @author Albrecht Messner
53 */
54public final class SerializableIterator
55      implements Iterator, Serializable
56{
57   static final long serialVersionUID = 1L;
58
59   private final List mItems;
60   private int mNextIndex = 0;
61
62
63   private SerializableIterator (Collection c)
64   {
65      mItems = new ArrayList();
66      mItems.addAll(c);
67   }
68
69   /**
70    * Construct a new iterator from the given collection. All elements
71    * of the collection will be copied to an internal list.
72    *
73    * @param collection the collection for which an iterator should be
74    *       created. All elements in the collection must be serializable.
75    * @return a serializable iterator over the given collection
76    */
77   public static SerializableIterator fromCollection (Collection collection)
78   {
79      Assert.notNull(collection, "collection");
80      return new SerializableIterator(collection);
81   }
82
83   /**
84    * Construct a new iterator from the given array. All elements of
85    * the array will be copied to an internal list.
86    *
87    * @param array the object array for which an iterator should be
88    *       created. All elements in the array must be serializable.
89    * @return a new iterator from the given array.
90    */
91   public static SerializableIterator fromArray (Object[] array)
92   {
93      Assert.notNull(array, "array");
94      return new SerializableIterator(Arrays.asList(array));
95   }
96
97   /**
98    * This operation is not supported in this implementation.
99    * @throws UnsupportedOperationException whenever this method is called.
100    * @see java.util.Iterator#remove()
101    */
102   public void remove ()
103       throws UnsupportedOperationException
104   {
105      throw new UnsupportedOperationException(
106            "Can't remove from a SerializableIterator");
107   }
108
109   /** {@inheritDoc} */
110   public boolean hasNext ()
111   {
112      return mNextIndex < mItems.size();
113   }
114
115   /** {@inheritDoc} */
116   public Object next ()
117   {
118      if (mNextIndex >= mItems.size())
119      {
120         throw new NoSuchElementException();
121      }
122      return mItems.get(mNextIndex++);
123   }
124
125   /** {@inheritDoc} */
126   public String toString ()
127   {
128      return "[SerializableIterator: " + mItems + "]";
129   }
130}
Note: See TracBrowser for help on using the browser.