001: /*--
002:
003: Copyright (C) 2002-2005 Adrian Price.
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009:
010: 1. Redistributions of source code must retain the above copyright
011: notice, this list of conditions, and the following disclaimer.
012:
013: 2. Redistributions in binary form must reproduce the above copyright
014: notice, this list of conditions, and the disclaimer that follows
015: these conditions in the documentation and/or other materials
016: provided with the distribution.
017:
018: 3. The names "OBE" and "Open Business Engine" must not be used to
019: endorse or promote products derived from this software without prior
020: written permission. For written permission, please contact
021: adrianprice@sourceforge.net.
022:
023: 4. Products derived from this software may not be called "OBE" or
024: "Open Business Engine", nor may "OBE" or "Open Business Engine"
025: appear in their name, without prior written permission from
026: Adrian Price (adrianprice@users.sourceforge.net).
027:
028: THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
029: WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
030: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
031: DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT,
032: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
033: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
034: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
035: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
036: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
037: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
038: POSSIBILITY OF SUCH DAMAGE.
039:
040: For more information on OBE, please see
041: <http://obe.sourceforge.net/>.
042:
043: */
044:
045: package org.obe.client.api.base;
046:
047: import org.wfmc.wapi.WMIterator;
048: import org.wfmc.wapi.WMNoMoreDataException;
049:
050: /**
051: * An abstract base iterator class for typesafe WAPI iterators. Subclasses
052: * must implement a typesafe accessor method that follows the pattern:
053: * <code><class-name> <class-name>.tsNext()
054: * throws WMNoMoreDataException</code>.
055: *
056: * @author Adrian Price
057: */
058: public abstract class AbstractWMIterator extends ArrayIterator
059: implements WMIterator {
060:
061: int _count;
062:
063: /**
064: * Construct a new iterator for a data array. The value returned from the
065: * {@link #getCount()} method is the length of the array. The
066: * <code>array</code> should not contain <code>null</code> elements - to
067: * return just the count, call the {@link #AbstractWMIterator(int)}
068: * constructor.
069: *
070: * @param array The objects over which to iterate.
071: */
072: protected AbstractWMIterator(Object[] array) {
073: super (array);
074: _count = array == null ? 0 : array.length;
075: }
076:
077: /**
078: * Construct a new iterator that contains only a count value. Such an
079: * iterator will throw <code>java.lang.NoSuchElementException</code from
080: * the <code>next()</code method, and {@link WMNoMoreDataException} from
081: * the <code>tsNext()</code> method.
082: *
083: * @param count The count value.
084: */
085: protected AbstractWMIterator(int count) {
086: super (null);
087: _count = count;
088: }
089:
090: // This constructor will not be required until we implement blocked mode
091: // retrieval of WAPI query results.
092: // /**
093: // * Construct a new iterator that contains both data and a count value. This
094: // * constructor should be used when the iterator is operating in blocked
095: // * mode; the count value may be greater than the size of the array, or it
096: // * can be -1 to signify that the total count is unknown.
097: // * @param array The objects over which to iterate.
098: // * @param count The count value, or -1 if this is unknown.
099: // */
100: // protected AbstractWMIterator(Object[] array, int count) {
101: // super(array);
102: // _count = count;
103: // }
104:
105: public int getCount() {
106: return _count;
107: }
108: }
|