Development Java Tutorial

/*
 * Copyright (c) 2002-2003 by OpenSymphony
 * All rights reserved.
 */
import java.io.Serializable;
/**
 * A bean that can be used to keep track of a counter.
 * 


 * Since it is an Iterator it can be used by the iterator tag
 *
 * @author Rickard Öberg (rickard@middleware-company.com)
 * @version $Revision: 1282 $
 * @see 
 */
public class Counter implements java.util.Iterator, Serializable {
    boolean wrap = false;
    // Attributes ----------------------------------------------------
    long first = 1;
    long current = first;
    long interval = 1;
    long last = -1;
    public void setAdd(long addition) {
        current += addition;
    }
    public void setCurrent(long current) {
        this.current = current;
    }
    public long getCurrent() {
        return current;
    }
    public void setFirst(long first) {
        this.first = first;
        current = first;
    }
    public long getFirst() {
        return first;
    }
    public void setInterval(long interval) {
        this.interval = interval;
    }
    public long getInterval() {
        return interval;
    }
    public void setLast(long last) {
        this.last = last;
    }
    public long getLast() {
        return last;
    }
    // Public --------------------------------------------------------
    public long getNext() {
        long next = current;
        current += interval;
        if (wrap && (current > last)) {
            current -= ((1 + last) - first);
        }
        return next;
    }
    public long getPrevious() {
        current -= interval;
        if (wrap && (current < first)) {
            current += (last - first + 1);
        }
        return current;
    }
    public void setWrap(boolean wrap) {
        this.wrap = wrap;
    }
    public boolean isWrap() {
        return wrap;
    }
    public boolean hasNext() {
        return ((last == -1) || wrap) ? true : (current <= last);
    }
    public Object next() {
        return new Long(getNext());
    }
    public void remove() {
        // Do nothing
    }
}
///////////////////
/*
 * Copyright (c) 2002-2003 by OpenSymphony
 * All rights reserved.
 */
package com.opensymphony.webwork.util;
import junit.framework.TestCase;
/**
 * User: plightbo
 * Date: Jan 7, 2004
 * Time: 7:55:35 PM
 */
public class CounterTest extends TestCase {
    Counter c = new Counter();
    public void testCurrentAfterNext() {
        long next = c.getNext();
        long current = c.getCurrent();
        assertEquals(next + 1, current);
    }
    public void testCurrentBeforeNext() {
        long current = c.getCurrent();
        long next = c.getNext();
        assertEquals(current, next);
    }
    public void testWrap() {
        c.setWrap(true);
        c.setLast(1);
        long a = c.getNext();
        long b = c.getNext();
        assertEquals(1, a);
        assertEquals(1, b);
    }
}